diff options
author | José Valim <jose.valim@gmail.com> | 2011-09-22 02:56:00 -0700 |
---|---|---|
committer | José Valim <jose.valim@gmail.com> | 2011-09-22 02:56:00 -0700 |
commit | 8de0bbe0b48b1d5a05a4159dd6197d6c9cff7979 (patch) | |
tree | 1f6f20b6d495ed9280c603009547010f66b047ea | |
parent | 2bf33bd4bcd488a35e641b32dd667f3092ea9197 (diff) | |
parent | 019eea4a388442a004287ad2e73772f3fefc7028 (diff) | |
download | rails-8de0bbe0b48b1d5a05a4159dd6197d6c9cff7979.tar.gz rails-8de0bbe0b48b1d5a05a4159dd6197d6c9cff7979.tar.bz2 rails-8de0bbe0b48b1d5a05a4159dd6197d6c9cff7979.zip |
Merge pull request #3099 from wrozka/master
Named routes are modifying passed options
-rw-r--r-- | actionpack/lib/action_dispatch/routing/route_set.rb | 7 | ||||
-rw-r--r-- | actionpack/test/dispatch/routing_test.rb | 11 |
2 files changed, 15 insertions, 3 deletions
diff --git a/actionpack/lib/action_dispatch/routing/route_set.rb b/actionpack/lib/action_dispatch/routing/route_set.rb index 46a68a32ae..e921269331 100644 --- a/actionpack/lib/action_dispatch/routing/route_set.rb +++ b/actionpack/lib/action_dispatch/routing/route_set.rb @@ -165,13 +165,14 @@ module ActionDispatch 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 diff --git a/actionpack/test/dispatch/routing_test.rb b/actionpack/test/dispatch/routing_test.rb index 9685b24c1c..c0b74bc9f9 100644 --- a/actionpack/test/dispatch/routing_test.rb +++ b/actionpack/test/dispatch/routing_test.rb @@ -863,6 +863,17 @@ class TestRoutingMapper < ActionDispatch::IntegrationTest 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) |