diff options
author | Sean Griffin <sean@seantheprogrammer.com> | 2017-07-17 13:41:56 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-07-17 13:41:56 -0500 |
commit | a3d704bd112e15569b1493825204c97cb0624e04 (patch) | |
tree | 66d0101c66ece7cec0d1ca19e58090bab2ecf55a /activesupport/lib | |
parent | cdf4046430a9d837509f0ca4a1dde7d8c93a34f7 (diff) | |
parent | a218a35e6602ac5591c95715d3d8fdad34009239 (diff) | |
download | rails-a3d704bd112e15569b1493825204c97cb0624e04.tar.gz rails-a3d704bd112e15569b1493825204c97cb0624e04.tar.bz2 rails-a3d704bd112e15569b1493825204c97cb0624e04.zip |
Merge pull request #29757 from lugray/hash_with_indifferent_access_default
Fix HashWithIndifferentAccess#default when include?(nil)
Diffstat (limited to 'activesupport/lib')
-rw-r--r-- | activesupport/lib/active_support/hash_with_indifferent_access.rb | 40 |
1 files changed, 30 insertions, 10 deletions
diff --git a/activesupport/lib/active_support/hash_with_indifferent_access.rb b/activesupport/lib/active_support/hash_with_indifferent_access.rb index 4ce5b4534e..44e95f58a1 100644 --- a/activesupport/lib/active_support/hash_with_indifferent_access.rb +++ b/activesupport/lib/active_support/hash_with_indifferent_access.rb @@ -76,16 +76,6 @@ module ActiveSupport end end - def default(*args) - arg_key = args.first - - if include?(key = convert_key(arg_key)) - self[key] - else - super - end - end - def self.[](*args) new.merge!(Hash[*args]) end @@ -187,6 +177,36 @@ module ActiveSupport super(convert_key(key), *extras) end + if Hash.new.respond_to?(:dig) + # Same as <tt>Hash#dig</tt> where the key passed as argument can be + # either a string or a symbol: + # + # counters = ActiveSupport::HashWithIndifferentAccess.new + # counters[:foo] = { bar: 1 } + # + # counters.dig('foo', 'bar') # => 1 + # counters.dig(:foo, :bar) # => 1 + # counters.dig(:zoo) # => nil + def dig(*args) + args[0] = convert_key(args[0]) if args.size > 0 + super(*args) + end + end + + # Same as <tt>Hash#default</tt> where the key passed as argument can be + # either a string or a symbol: + # + # hash = ActiveSupport::HashWithIndifferentAccess.new(1) + # hash.default # => 1 + # + # hash = ActiveSupport::HashWithIndifferentAccess.new { |hash, key| key } + # hash.default # => nil + # hash.default('foo') # => 'foo' + # hash.default(:foo) # => 'foo' + def default(*args) + super(*args.map { |arg| convert_key(arg) }) + end + # Returns an array of the values at the specified indices: # # hash = ActiveSupport::HashWithIndifferentAccess.new |