From 38a990237a0f99d99b885ea6570cae3752138a29 Mon Sep 17 00:00:00 2001 From: David Cornu Date: Wed, 11 Feb 2015 21:49:09 +0000 Subject: [PATCH] Match HashWithIndifferentAccess#default's behaviour with Hash#default --- activesupport/CHANGELOG.md | 4 ++++ .../hash_with_indifferent_access.rb | 24 ++++++++++++++----- activesupport/test/core_ext/hash_ext_test.rb | 4 ++-- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/activesupport/CHANGELOG.md b/activesupport/CHANGELOG.md index ba696374b5..cebe19be89 100644 --- a/activesupport/CHANGELOG.md +++ b/activesupport/CHANGELOG.md @@ -1,3 +1,7 @@ +* Match `HashWithIndifferentAccess#default`'s behaviour with `Hash#default` + + *David Cornu* + * Adds `:exception_object` key to `ActiveSupport::Notifications::Instrumenter` payload when an exception is raised. Adds new key/value pair to payload when an exception is raised: e.g. `:exception_object => #`. diff --git a/activesupport/lib/active_support/hash_with_indifferent_access.rb b/activesupport/lib/active_support/hash_with_indifferent_access.rb index 4ff35a45a1..b878f31e75 100644 --- a/activesupport/lib/active_support/hash_with_indifferent_access.rb +++ b/activesupport/lib/active_support/hash_with_indifferent_access.rb @@ -68,12 +68,10 @@ def initialize(constructor = {}) end end - def default(key = nil) - if key.is_a?(Symbol) && include?(key = key.to_s) - self[key] - else - super - end + def default(*args) + key = args.first + args[0] = key.to_s if key.is_a?(Symbol) + super(*args) end def self.new_from_hash_copying_default(hash) @@ -159,6 +157,20 @@ def key?(key) alias_method :has_key?, :key? alias_method :member?, :key? + + # Same as Hash#[] where the key passed as argument can be + # either a string or a symbol: + # + # counters = ActiveSupport::HashWithIndifferentAccess.new + # counters[:foo] = 1 + # + # counters['foo'] # => 1 + # counters[:foo] # => 1 + # counters[:zoo] # => nil + def [](key) + super(convert_key(key)) + end + # Same as Hash#fetch where the key passed as argument can be # either a string or a symbol: # diff --git a/activesupport/test/core_ext/hash_ext_test.rb b/activesupport/test/core_ext/hash_ext_test.rb index 2119352df0..1b66f784e4 100644 --- a/activesupport/test/core_ext/hash_ext_test.rb +++ b/activesupport/test/core_ext/hash_ext_test.rb @@ -1587,9 +1587,9 @@ def test_should_use_default_proc_for_unknown_key assert_equal 3, hash_wia[:new_key] end - def test_should_use_default_proc_if_no_key_is_supplied + def test_should_return_nil_if_no_key_is_supplied hash_wia = HashWithIndifferentAccess.new { 1 + 2 } - assert_equal 3, hash_wia.default + assert_equal nil, hash_wia.default end def test_should_use_default_value_for_unknown_key -- GitLab