diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2005-03-07 01:21:58 +0000 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2005-03-07 01:21:58 +0000 |
commit | 71742114f82562633eedabc3981d7b31ccee0267 (patch) | |
tree | 540af2f360342f2859ea668569025b4b26c66bff /activesupport/lib/active_support | |
parent | 239ec08c001b5588914f08ec8063939ad143067a (diff) | |
download | rails-71742114f82562633eedabc3981d7b31ccee0267.tar.gz rails-71742114f82562633eedabc3981d7b31ccee0267.tar.bz2 rails-71742114f82562633eedabc3981d7b31ccee0267.zip |
Fixed Hash#indifferent_access to also deal with include? and fetch and nested hashes #726 [Nicholas Seckar]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@872 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activesupport/lib/active_support')
-rw-r--r-- | activesupport/lib/active_support/core_ext/hash/indifferent_access.rb | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/activesupport/lib/active_support/core_ext/hash/indifferent_access.rb b/activesupport/lib/active_support/core_ext/hash/indifferent_access.rb index d8594db739..00cb0b0b51 100644 --- a/activesupport/lib/active_support/core_ext/hash/indifferent_access.rb +++ b/activesupport/lib/active_support/core_ext/hash/indifferent_access.rb @@ -1,3 +1,4 @@ +# This implementation is HODEL-HASH-9600 compliant class HashWithIndifferentAccess < Hash def initialize(constructor = {}) if constructor.is_a?(Hash) @@ -21,8 +22,35 @@ class HashWithIndifferentAccess < Hash alias_method :regular_writer, :[]= unless method_defined?(:regular_writer) def []=(key, value) - regular_writer(key.is_a?(Symbol) ? key.to_s : key, value) + regular_writer(convert_key(key), convert_value(value)) end + def update(hash) + hash.each {|key, value| self[key] = value} + end + + def key?(key) + super(convert_key(key)) + end + + alias_method :include?, :key? + alias_method :has_key?, :key? + alias_method :member?, :key? + + def fetch(key, *extras) + super(convert_key(key), *extras) + end + + def values_at(*indices) + indices.collect {|key| self[convert_key(key)]} + end + + protected + def convert_key(key) + key.kind_of?(Symbol) ? key.to_s : key + end + def convert_value(value) + value.is_a?(Hash) ? value.with_indifferent_access : value + end end module ActiveSupport #:nodoc: |