From 71742114f82562633eedabc3981d7b31ccee0267 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 7 Mar 2005 01:21:58 +0000 Subject: 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 --- .../core_ext/hash/indifferent_access.rb | 30 +++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'activesupport/lib/active_support/core_ext/hash/indifferent_access.rb') 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: -- cgit v1.2.3