assert_routing vs file extensions

Railsers:

Our versions are Rails 1.2.3 on ruby 1.8.6 (2007-09-23 patchlevel 110).

routes.rb contains this:

   map.connect '/song/:filename*extension', :controller => 'frogs',                                             :action => 'index'

and our test contains this:

   frog_id = frog(:african_bull).id    assert_routing "/song/#{frog_id}.mp3", :controller => 'frogs',                                           :action => 'index',                                           :filename => "#{frog_id}",                                           :extension => ['mp3']

That looks perfectly correct, right? Here's the error message:

The recognized options <{"extension"=>[".mp3"],   "action"=>"index",   "controller"=>"frogs",   "filename"=>"1"}> did not match <{"extension"=>["mp3"],   "action"=>"index",   "controller"=>"frogs",   "filename"=>"1"}>, difference: <{"extension"=>["mp3"]}>

Ooookay. It says the "difference" is the part that's exactly the same - "extension"=>["mp3"]!

How to fix?

Hi --

Railsers:

Our versions are Rails 1.2.3 on ruby 1.8.6 (2007-09-23 patchlevel 110).

routes.rb contains this:

  map.connect '/song/:filename*extension', :controller => 'frogs',                                            :action => 'index'

and our test contains this:

  frog_id = frog(:african_bull).id   assert_routing "/song/#{frog_id}.mp3", :controller => 'frogs',                                          :action => 'index',                                          :filename => "#{frog_id}",                                          :extension => ['mp3']

That looks perfectly correct, right? Here's the error message:

The recognized options <{"extension"=>[".mp3"], "action"=>"index", "controller"=>"frogs", "filename"=>"1"}> did not match <{"extension"=>["mp3"], "action"=>"index", "controller"=>"frogs", "filename"=>"1"}>, difference: <{"extension"=>["mp3"]}>

Ooookay. It says the "difference" is the part that's exactly the same - "extension"=>["mp3"]!

Yeah, I've always loved that one :slight_smile:

How to fix?

*extension is mopping up the dot, because filename matches everything up to but not including a dot, and *extension gets everything else (and it all gets put into one string, because the dot doesn't separate elements inside the glob).

So you need either :filename.*extension in the route string, or ['.mp3'] in the test.

David