diff --git a/activesupport/lib/active_support/ordered_hash.rb b/activesupport/lib/active_support/ordered_hash.rb index b721e6f70a277bae2192830ed6ea11f4bffba019..eda33f827ee26019493d2f00b62021bae5ae875d 100644 --- a/activesupport/lib/active_support/ordered_hash.rb +++ b/activesupport/lib/active_support/ordered_hash.rb @@ -131,7 +131,7 @@ def shift def merge!(other_hash) 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 other_hash.each {|k,v| self[k] = v } end diff --git a/activesupport/test/ordered_hash_test.rb b/activesupport/test/ordered_hash_test.rb index e19484fb82a53a5092ae2e2192e188b1736749bb..56369585ec30486ad41e94e4baccf438f8abcc57 100644 --- a/activesupport/test/ordered_hash_test.rb +++ b/activesupport/test/ordered_hash_test.rb @@ -144,27 +144,28 @@ def test_merge end def test_merge_with_block - hash = ActiveSupport::OrderedHash.new - hash[:a] = 0 - hash[:b] = 0 - merged = hash.merge(:b => 1, :c => 2) do |key, old_value, new_value| - new_value + 1 + other_hash = ActiveSupport::OrderedHash.new + other_hash['white'] = 'ff' + other_hash['black'] = '00' + merged = @ordered_hash.merge(other_hash) do |key, old_value, new_value| + new_value * 3 end - assert_equal 0, merged[:a] - assert_equal 2, merged[:b] - assert !merged.key?(:c) + assert_equal 'ffffff', merged['white'] + assert_equal '000000', merged['black'] + + assert_nil @ordered_hash['white'] + assert_nil @ordered_hash['black'] end def test_merge_bang_with_block - hash = ActiveSupport::OrderedHash.new - hash[:a] = 0 - hash[:b] = 0 - hash.merge!(:a => 1, :c => 2) do |key, old_value, new_value| - new_value + 3 + other_hash = ActiveSupport::OrderedHash.new + other_hash['white'] = 'ff' + other_hash['black'] = '00' + @ordered_hash.merge!(other_hash) do |key, old_value, new_value| + new_value * 3 end - assert_equal 4, hash[:a] - assert_equal 0, hash[:b] - assert !hash.key?(:c) + assert_equal 'ffffff', @ordered_hash['white'] + assert_equal '000000', @ordered_hash['black'] end def test_shift