提交 3359af63 编写于 作者: X Xavier Noria

Revert "hash merging with a block ignores non-existing keys altogether"

This reverts commit 72f9fec6.

It is wrong, this feature is a little undocumented, doing some research.
上级 72f9fec6
...@@ -131,7 +131,7 @@ def shift ...@@ -131,7 +131,7 @@ def shift
def merge!(other_hash) def merge!(other_hash)
if block_given? if block_given?
other_hash.each {|k,v| self[k] = yield(k, self[k], v) if key? k} other_hash.each {|k,v| self[k] = yield(k, self[k], v) }
else else
other_hash.each {|k,v| self[k] = v } other_hash.each {|k,v| self[k] = v }
end end
......
...@@ -144,27 +144,28 @@ def test_merge ...@@ -144,27 +144,28 @@ def test_merge
end end
def test_merge_with_block def test_merge_with_block
hash = ActiveSupport::OrderedHash.new other_hash = ActiveSupport::OrderedHash.new
hash[:a] = 0 other_hash['white'] = 'ff'
hash[:b] = 0 other_hash['black'] = '00'
merged = hash.merge(:b => 1, :c => 2) do |key, old_value, new_value| merged = @ordered_hash.merge(other_hash) do |key, old_value, new_value|
new_value + 1 new_value * 3
end end
assert_equal 0, merged[:a] assert_equal 'ffffff', merged['white']
assert_equal 2, merged[:b] assert_equal '000000', merged['black']
assert !merged.key?(:c)
assert_nil @ordered_hash['white']
assert_nil @ordered_hash['black']
end end
def test_merge_bang_with_block def test_merge_bang_with_block
hash = ActiveSupport::OrderedHash.new other_hash = ActiveSupport::OrderedHash.new
hash[:a] = 0 other_hash['white'] = 'ff'
hash[:b] = 0 other_hash['black'] = '00'
hash.merge!(:a => 1, :c => 2) do |key, old_value, new_value| @ordered_hash.merge!(other_hash) do |key, old_value, new_value|
new_value + 3 new_value * 3
end end
assert_equal 4, hash[:a] assert_equal 'ffffff', @ordered_hash['white']
assert_equal 0, hash[:b] assert_equal '000000', @ordered_hash['black']
assert !hash.key?(:c)
end end
def test_shift def test_shift
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册