diff --git a/lib/bson/ordered_hash.rb b/lib/bson/ordered_hash.rb index ab9a4be..19b3e1d 100644 --- a/lib/bson/ordered_hash.rb +++ b/lib/bson/ordered_hash.rb @@ -130,11 +130,12 @@ module BSON end def delete_if(&block) - self.each do |k,v| - if yield k, v - delete(k) + keys.each do |key| + if yield key, self[key] + delete(key) end end + self end def reject(&block) diff --git a/test/bson/ordered_hash_test.rb b/test/bson/ordered_hash_test.rb index 20e3138..8ace478 100644 --- a/test/bson/ordered_hash_test.rb +++ b/test/bson/ordered_hash_test.rb @@ -212,6 +212,8 @@ class OrderedHashTest < Test::Unit::TestCase assert @oh.keys.include?('z') @oh.delete_if { |k,v| k == 'z' } assert !@oh.keys.include?('z') + @oh.delete_if { |k, v| v > 0 } + assert @oh.keys.empty? end def test_reject