aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport
diff options
context:
space:
mode:
authorMehmet Emin İNAÇ <mehmetemininac@gmail.com>2015-05-04 18:54:14 +0300
committerMehmet Emin İNAÇ <mehmetemininac@gmail.com>2015-05-04 18:54:14 +0300
commit40c7f74543c36670db5302df6450f4e224b685ed (patch)
treec03e3b28e99abf0c67a62d7f68834a7003b0b2c1 /activesupport
parent9619331001828a9877b7a1e1a451f7ab98ca0285 (diff)
downloadrails-40c7f74543c36670db5302df6450f4e224b685ed.tar.gz
rails-40c7f74543c36670db5302df6450f4e224b685ed.tar.bz2
rails-40c7f74543c36670db5302df6450f4e224b685ed.zip
deep_dup method, remove old key from duplicated hash to avoid unnecessary pairs
Diffstat (limited to 'activesupport')
-rw-r--r--activesupport/lib/active_support/core_ext/object/deep_dup.rb1
-rw-r--r--activesupport/test/core_ext/object/deep_dup_test.rb6
2 files changed, 7 insertions, 0 deletions
diff --git a/activesupport/lib/active_support/core_ext/object/deep_dup.rb b/activesupport/lib/active_support/core_ext/object/deep_dup.rb
index 0191d2e973..ad5b2af161 100644
--- a/activesupport/lib/active_support/core_ext/object/deep_dup.rb
+++ b/activesupport/lib/active_support/core_ext/object/deep_dup.rb
@@ -40,6 +40,7 @@ class Hash
# dup[:a][:c] # => "c"
def deep_dup
each_with_object(dup) do |(key, value), hash|
+ hash.delete(key)
hash[key.deep_dup] = value.deep_dup
end
end
diff --git a/activesupport/test/core_ext/object/deep_dup_test.rb b/activesupport/test/core_ext/object/deep_dup_test.rb
index 91d558dbb5..38fbe1f836 100644
--- a/activesupport/test/core_ext/object/deep_dup_test.rb
+++ b/activesupport/test/core_ext/object/deep_dup_test.rb
@@ -50,4 +50,10 @@ class DeepDupTest < ActiveSupport::TestCase
assert dup.instance_variable_defined?(:@a)
end
+ def test_deep_dup_with_hash_class_key
+ hash = { Fixnum => 1 }
+ dup = hash.deep_dup
+ assert_equal dup.keys.length, 1
+ end
+
end