From 2ee28b2bf8414cad3655dbe685ff0d27051395cd Mon Sep 17 00:00:00 2001 From: Sergey Nartimov Date: Fri, 23 Mar 2012 23:08:36 +0300 Subject: [PATCH] fix HashWithIndifferentAccess.[] method --- .../lib/active_support/hash_with_indifferent_access.rb | 4 ++++ activesupport/test/core_ext/hash_ext_test.rb | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/activesupport/lib/active_support/hash_with_indifferent_access.rb b/activesupport/lib/active_support/hash_with_indifferent_access.rb index 49aa012268..91459f3e5b 100644 --- a/activesupport/lib/active_support/hash_with_indifferent_access.rb +++ b/activesupport/lib/active_support/hash_with_indifferent_access.rb @@ -42,6 +42,10 @@ def self.new_from_hash_copying_default(hash) end end + def self.[](*args) + new.merge(Hash[*args]) + end + alias_method :regular_writer, :[]= unless method_defined?(:regular_writer) alias_method :regular_update, :update unless method_defined?(:regular_update) diff --git a/activesupport/test/core_ext/hash_ext_test.rb b/activesupport/test/core_ext/hash_ext_test.rb index 4544edf0dd..80b3c16328 100644 --- a/activesupport/test/core_ext/hash_ext_test.rb +++ b/activesupport/test/core_ext/hash_ext_test.rb @@ -388,6 +388,15 @@ def test_store_on_indifferent_access assert_equal expected, hash end + def test_constructor_on_indifferent_access + hash = HashWithIndifferentAccess[:foo, 1] + assert_equal 1, hash[:foo] + assert_equal 1, hash['foo'] + hash[:foo] = 3 + assert_equal 3, hash[:foo] + assert_equal 3, hash['foo'] + end + def test_reverse_merge defaults = { :a => "x", :b => "y", :c => 10 }.freeze options = { :a => 1, :b => 2 } -- GitLab