diff options
author | yuuji.yaginuma <yuuji.yaginuma@gmail.com> | 2017-09-23 18:25:16 +0900 |
---|---|---|
committer | yuuji.yaginuma <yuuji.yaginuma@gmail.com> | 2017-09-23 18:25:16 +0900 |
commit | 962ce60ff1692f6f2ed1a8322319d73b9790d324 (patch) | |
tree | 85949af815fca728887d6352b91095f56ff9bd1a /activesupport | |
parent | 6c199967fc5c32155684b95628751eb1b5098e13 (diff) | |
download | rails-962ce60ff1692f6f2ed1a8322319d73b9790d324.tar.gz rails-962ce60ff1692f6f2ed1a8322319d73b9790d324.tar.bz2 rails-962ce60ff1692f6f2ed1a8322319d73b9790d324.zip |
Make bang version work with `InheritableOptions`
Currently, bang version does not work with `InheritableOptions`.
`InheritableOptions` treats the argument Hash as the default value.
However, `Hash#fetch` does not use the default value when key is not
found, so can not get the default value.
So in bang version, should use `Hash#[]` instead of `Hash#fetch`.
Diffstat (limited to 'activesupport')
-rw-r--r-- | activesupport/lib/active_support/ordered_options.rb | 2 | ||||
-rw-r--r-- | activesupport/test/ordered_options_test.rb | 13 |
2 files changed, 14 insertions, 1 deletions
diff --git a/activesupport/lib/active_support/ordered_options.rb b/activesupport/lib/active_support/ordered_options.rb index c2a37fbdd7..b74510fdb2 100644 --- a/activesupport/lib/active_support/ordered_options.rb +++ b/activesupport/lib/active_support/ordered_options.rb @@ -46,7 +46,7 @@ module ActiveSupport bangs = name_string.chomp!("!") if bangs - fetch(name_string.to_sym).presence || raise(KeyError.new(":#{name_string} is blank")) + self[name_string].presence || raise(KeyError.new(":#{name_string} is blank")) else self[name_string] end diff --git a/activesupport/test/ordered_options_test.rb b/activesupport/test/ordered_options_test.rb index 7f2e774c02..2c67bb02ac 100644 --- a/activesupport/test/ordered_options_test.rb +++ b/activesupport/test/ordered_options_test.rb @@ -102,4 +102,17 @@ class OrderedOptionsTest < ActiveSupport::TestCase end assert_raises(KeyError) { a.non_existing_key! } end + + def test_inheritable_options_with_bang + a = ActiveSupport::InheritableOptions.new(foo: :bar) + + assert_nothing_raised { a.foo! } + assert_equal a.foo, a.foo! + + assert_raises(KeyError) do + a.foo = nil + a.foo! + end + assert_raises(KeyError) { a.non_existing_key! } + end end |