diff options
author | Jeremy Daer <jeremydaer@gmail.com> | 2016-04-19 15:01:28 -0700 |
---|---|---|
committer | Jeremy Daer <jeremydaer@gmail.com> | 2016-04-19 15:01:28 -0700 |
commit | ee25e1992c942cc3369b245a2736aff2a3bc5a02 (patch) | |
tree | c218bafe08bb712d7a5c458808bcbec23dad77bc | |
parent | 0ff0add0400cdee5869d246315cc2551347187aa (diff) | |
parent | fea7c9fed65b9dd305562483c1cfd80104d521b5 (diff) | |
download | rails-ee25e1992c942cc3369b245a2736aff2a3bc5a02.tar.gz rails-ee25e1992c942cc3369b245a2736aff2a3bc5a02.tar.bz2 rails-ee25e1992c942cc3369b245a2736aff2a3bc5a02.zip |
Merge pull request #24031 from samphilipd/sam/do_not_clobber_options_in_route_definitions
Do not destructively mutate passed options hash in route definitions
-rw-r--r-- | actionpack/lib/action_dispatch/routing/mapper.rb | 3 | ||||
-rw-r--r-- | actionpack/test/dispatch/mapper_test.rb | 13 |
2 files changed, 14 insertions, 2 deletions
diff --git a/actionpack/lib/action_dispatch/routing/mapper.rb b/actionpack/lib/action_dispatch/routing/mapper.rb index 5a747b5f17..ffd5b83ad3 100644 --- a/actionpack/lib/action_dispatch/routing/mapper.rb +++ b/actionpack/lib/action_dispatch/routing/mapper.rb @@ -1,4 +1,3 @@ -require 'active_support/core_ext/hash/reverse_merge' require 'active_support/core_ext/hash/slice' require 'active_support/core_ext/enumerable' require 'active_support/core_ext/array/extract_options' @@ -824,7 +823,7 @@ module ActionDispatch URL_OPTIONS.include?(k) && (v.is_a?(String) || v.is_a?(Fixnum)) end - (options[:defaults] ||= {}).reverse_merge!(defaults) + options[:defaults] = defaults.merge(options[:defaults] || {}) else block, options[:constraints] = options[:constraints], {} end diff --git a/actionpack/test/dispatch/mapper_test.rb b/actionpack/test/dispatch/mapper_test.rb index df27e41997..69098326b9 100644 --- a/actionpack/test/dispatch/mapper_test.rb +++ b/actionpack/test/dispatch/mapper_test.rb @@ -178,6 +178,19 @@ module ActionDispatch mapper.mount as: "exciting" end end + + def test_scope_does_not_destructively_mutate_default_options + fakeset = FakeSet.new + mapper = Mapper.new fakeset + + frozen = { foo: :bar }.freeze + + assert_nothing_raised do + mapper.scope(defaults: frozen) do + # pass + end + end + end end end end |