Skip to content
Browse files

Fix named routes modifying arguments

  • Loading branch information...
1 parent 2bf33bd commit 019eea4a388442a004287ad2e73772f3fefc7028 Pawel Pierzchala committed
Showing with 15 additions and 3 deletions.
  1. +4 −3 actionpack/lib/action_dispatch/routing/route_set.rb
  2. +11 −0 actionpack/test/dispatch/routing_test.rb
View
7 actionpack/lib/action_dispatch/routing/route_set.rb
@@ -165,13 +165,14 @@ def define_hash_access(route, name, kind, options)
remove_possible_method :#{selector}
def #{selector}(*args)
options = args.extract_options!
+ result = #{options.inspect}
if args.any?
- options[:_positional_args] = args
- options[:_positional_keys] = #{route.segment_keys.inspect}
+ result[:_positional_args] = args
+ result[:_positional_keys] = #{route.segment_keys.inspect}
end
- options ? #{options.inspect}.merge(options) : #{options.inspect}
+ result.merge(options)
end
protected :#{selector}
END_EVAL
View
11 actionpack/test/dispatch/routing_test.rb
@@ -863,6 +863,17 @@ def test_url_for_with_no_side_effects
assert_equal original_options, options
end
+ # tests the arguments modification free version of define_hash_access
+ def test_named_route_with_no_side_effects
+ original_options = { :host => 'test.host' }
+ options = original_options.dup
+
+ profile_customer_url("customer_model", options)
+
+ # verify that the options passed in have not changed from the original ones
+ assert_equal original_options, options
+ end
+
def test_projects_status
with_test_routes do
assert_equal '/projects/status', url_for(:controller => 'projects', :action => 'status', :only_path => true)

0 comments on commit 019eea4

Please sign in to comment.
Something went wrong with that request. Please try again.