aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/test/core_ext/hash_ext_test.rb
diff options
context:
space:
mode:
authorGordon Chan <developer.gordon+github@gmail.com>2014-07-31 19:14:12 +1200
committerGordon Chan <developer.gordon+github@gmail.com>2014-07-31 19:14:12 +1200
commit6e574e8a11635ec4e579e5b247f6492b9bdc9279 (patch)
treeb4d5510de9a3ee5632e09ae961bafd66fe6592fb /activesupport/test/core_ext/hash_ext_test.rb
parent29a6a17a11cd98f18ad46e882cc8f7fd669de59f (diff)
downloadrails-6e574e8a11635ec4e579e5b247f6492b9bdc9279.tar.gz
rails-6e574e8a11635ec4e579e5b247f6492b9bdc9279.tar.bz2
rails-6e574e8a11635ec4e579e5b247f6492b9bdc9279.zip
`HashWithIndifferentAccess.new` respects the default value or proc on objects that respond to `#to_hash`.
Builds on the work of #12550 where `.new` will convert the object (that respond to `#to_hash`) to a hash and add that hash's keys and values to itself. This change will also make `.new` respect the default value or proc of objects that respond to `#to_hash`. In other words, this `.new` behaves exactly like `.new_from_hash_copying_default`. `.new_from_hash_copying_default` now simply invokes `.new` and any references to `.new_from_hash_copying_default` are replaced with `.new`. Added tests confirm behavior.
Diffstat (limited to 'activesupport/test/core_ext/hash_ext_test.rb')
-rw-r--r--activesupport/test/core_ext/hash_ext_test.rb18
1 files changed, 18 insertions, 0 deletions
diff --git a/activesupport/test/core_ext/hash_ext_test.rb b/activesupport/test/core_ext/hash_ext_test.rb
index dbbb2d77da..b71206d2e3 100644
--- a/activesupport/test/core_ext/hash_ext_test.rb
+++ b/activesupport/test/core_ext/hash_ext_test.rb
@@ -996,6 +996,24 @@ class HashExtTest < ActiveSupport::TestCase
assert hash.key?('a')
assert_equal 1, hash[:a]
end
+
+ def test_new_with_to_hash_conversion_copies_default
+ normal_hash = Hash.new(3)
+ normal_hash[:a] = 1
+
+ hash = HashWithIndifferentAccess.new(HashByConversion.new(normal_hash))
+ assert_equal 1, hash[:a]
+ assert_equal 3, hash[:b]
+ end
+
+ def test_new_with_to_hash_conversion_copies_default_proc
+ normal_hash = Hash.new { 1 + 2 }
+ normal_hash[:a] = 1
+
+ hash = HashWithIndifferentAccess.new(HashByConversion.new(normal_hash))
+ assert_equal 1, hash[:a]
+ assert_equal 3, hash[:b]
+ end
end
class IWriteMyOwnXML