diff options
author | Andrew White <andyw@pixeltrix.co.uk> | 2013-07-17 08:56:34 +0100 |
---|---|---|
committer | Andrew White <andyw@pixeltrix.co.uk> | 2013-07-17 08:56:34 +0100 |
commit | 74722d66d332d1d768459d8b510cc082fe3d5618 (patch) | |
tree | 88fb80cfe659cc83407be2015f8b624e4afb83cf /actionpack | |
parent | 96310f69e1fd4bf0d744ed9599df895ef1fcf2d1 (diff) | |
download | rails-74722d66d332d1d768459d8b510cc082fe3d5618.tar.gz rails-74722d66d332d1d768459d8b510cc082fe3d5618.tar.bz2 rails-74722d66d332d1d768459d8b510cc082fe3d5618.zip |
Fix failing test missed for the past year :(
When optimized path helpers were re-introduced in d7014bc the test added
in a328f2f broke but no-one noticed because it wasn't being run by the
test suite.
Fix the test by checking for nil values or empty strings after the args
have been parameterized.
Diffstat (limited to 'actionpack')
-rw-r--r-- | actionpack/lib/action_dispatch/routing/route_set.rb | 19 | ||||
-rw-r--r-- | actionpack/test/routing/helper_test.rb | 2 |
2 files changed, 18 insertions, 3 deletions
diff --git a/actionpack/lib/action_dispatch/routing/route_set.rb b/actionpack/lib/action_dispatch/routing/route_set.rb index 3ae9f92c0b..fca663b2a3 100644 --- a/actionpack/lib/action_dispatch/routing/route_set.rb +++ b/actionpack/lib/action_dispatch/routing/route_set.rb @@ -184,12 +184,27 @@ module ActionDispatch def optimized_helper(args) path = @string_route.dup klass = Journey::Router::Utils + parameterized_args = args.map(&:to_param) + missing_keys = [] - @path_parts.zip(args) do |part, arg| + parameterized_args.each_with_index do |arg, index| + if arg.nil? || arg.empty? + missing_keys << @path_parts[index] + end + end + + unless missing_keys.empty? + message = "No route matches #{Hash[@path_parts.zip(args)].inspect}" + message << " missing required keys: #{missing_keys.inspect}" + + raise ActionController::UrlGenerationError, message + end + + @path_parts.zip(parameterized_args) do |part, arg| # Replace each route parameter # e.g. :id for regular parameter or *path for globbing # with ruby string interpolation code - path.gsub!(/(\*|:)#{part}/, klass.escape_fragment(arg.to_param)) + path.gsub!(/(\*|:)#{part}/, klass.escape_fragment(arg)) end path end diff --git a/actionpack/test/routing/helper_test.rb b/actionpack/test/routing/helper_test.rb index a5588d95fa..0028aaa629 100644 --- a/actionpack/test/routing/helper_test.rb +++ b/actionpack/test/routing/helper_test.rb @@ -22,7 +22,7 @@ module ActionDispatch x = Class.new { include rs.url_helpers } - assert_raises ActionController::RoutingError do + assert_raises ActionController::UrlGenerationError do x.new.pond_duck_path Duck.new end end |