diff --git a/lib/bson/ordered_hash.rb b/lib/bson/ordered_hash.rb index 455ed8f..768acdb 100644 --- a/lib/bson/ordered_hash.rb +++ b/lib/bson/ordered_hash.rb @@ -103,6 +103,15 @@ module BSON end alias :update :merge! + + def dup + result = OrderedHash.new + @ordered_keys ||= [] + @ordered_keys.each do |key| + result[key] = self[key] + end + result + end def inspect str = '{' diff --git a/test/bson/ordered_hash_test.rb b/test/bson/ordered_hash_test.rb index 3dd1f63..f642161 100644 --- a/test/bson/ordered_hash_test.rb +++ b/test/bson/ordered_hash_test.rb @@ -194,4 +194,11 @@ class OrderedHashTest < Test::Unit::TestCase copy[:foo] = 1 assert copy.keys != @oh.keys end + + def test_dup + oh2 = @oh.dup + oh2['f'] = 9 + assert_nil @oh['f'] + assert_equal ['c', 'a', 'z'], @oh.keys + end end