mongodb-mongo 0.6.7 → 0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/mongo/util/bson.rb +10 -6
- data/mongo-ruby-driver.gemspec +1 -1
- data/tests/test_bson.rb +32 -0
- data/tests/test_db_api.rb +7 -4
- metadata +1 -1
data/lib/mongo/util/bson.rb
CHANGED
@@ -86,13 +86,11 @@ class BSON
|
|
86
86
|
|
87
87
|
# Write key/value pairs. Always write _id first if it exists.
|
88
88
|
if obj.has_key? '_id'
|
89
|
-
|
89
|
+
serialize_key_value('_id', obj['_id'])
|
90
90
|
elsif obj.has_key? :_id
|
91
|
-
|
92
|
-
else
|
93
|
-
oid = false
|
91
|
+
serialize_key_value('_id', obj[:_id])
|
94
92
|
end
|
95
|
-
|
93
|
+
|
96
94
|
obj.each {|k, v| serialize_key_value(k, v) unless k == '_id' || k == :_id }
|
97
95
|
|
98
96
|
serialize_eoo_element(@buf)
|
@@ -250,7 +248,10 @@ class BSON
|
|
250
248
|
end
|
251
249
|
|
252
250
|
def deserialize_number_int_data(buf)
|
253
|
-
|
251
|
+
# sometimes ruby makes me angry... why would the same code pack as signed
|
252
|
+
# but unpack as unsigned
|
253
|
+
unsigned = buf.get_int
|
254
|
+
unsigned >= 2**32 / 2 ? unsigned - 2**32 : unsigned
|
254
255
|
end
|
255
256
|
|
256
257
|
def deserialize_object_data(buf)
|
@@ -389,6 +390,9 @@ class BSON
|
|
389
390
|
if type == NUMBER
|
390
391
|
buf.put_double(val)
|
391
392
|
else
|
393
|
+
if val > 2**32 / 2 - 1 or val < -2**32 / 2
|
394
|
+
raise RangeError.new "MongoDB can only handle 4-byte ints - try converting to a double before saving"
|
395
|
+
end
|
392
396
|
buf.put_int(val)
|
393
397
|
end
|
394
398
|
end
|
data/mongo-ruby-driver.gemspec
CHANGED
@@ -79,7 +79,7 @@ TEST_FILES = ['tests/mongo-qa/_common.rb',
|
|
79
79
|
|
80
80
|
Gem::Specification.new do |s|
|
81
81
|
s.name = 'mongo'
|
82
|
-
s.version = '0.
|
82
|
+
s.version = '0.7'
|
83
83
|
s.platform = Gem::Platform::RUBY
|
84
84
|
s.summary = 'Ruby driver for the 10gen Mongo DB'
|
85
85
|
s.description = 'A Ruby driver for the 10gen Mongo DB. For more information about Mongo, see http://www.mongodb.org.'
|
data/tests/test_bson.rb
CHANGED
@@ -36,6 +36,18 @@ class BSONTest < Test::Unit::TestCase
|
|
36
36
|
doc = {'doc' => 42}
|
37
37
|
@b.serialize(doc)
|
38
38
|
assert_equal doc, @b.deserialize
|
39
|
+
|
40
|
+
doc = {"doc" => -5600}
|
41
|
+
@b.serialize(doc)
|
42
|
+
assert_equal doc, @b.deserialize
|
43
|
+
|
44
|
+
doc = {"doc" => 2147483647}
|
45
|
+
@b.serialize(doc)
|
46
|
+
assert_equal doc, @b.deserialize
|
47
|
+
|
48
|
+
doc = {"doc" => -2147483648}
|
49
|
+
@b.serialize(doc)
|
50
|
+
assert_equal doc, @b.deserialize
|
39
51
|
end
|
40
52
|
|
41
53
|
def test_ordered_hash
|
@@ -181,6 +193,11 @@ class BSONTest < Test::Unit::TestCase
|
|
181
193
|
assert_equal '_id', roundtrip.keys.first
|
182
194
|
end
|
183
195
|
|
196
|
+
def test_nil_id
|
197
|
+
doc = {"_id" => nil}
|
198
|
+
assert_equal doc, @b.deserialize(@b.serialize(doc).to_a)
|
199
|
+
end
|
200
|
+
|
184
201
|
def test_timestamp
|
185
202
|
val = {"test" => [4, 20]}
|
186
203
|
assert_equal val, @b.deserialize([0x13, 0x00, 0x00, 0x00,
|
@@ -190,6 +207,21 @@ class BSONTest < Test::Unit::TestCase
|
|
190
207
|
0x00, 0x00, 0x00])
|
191
208
|
end
|
192
209
|
|
210
|
+
def test_overflow
|
211
|
+
doc = {"x" => 2**45}
|
212
|
+
assert_raise RangeError do
|
213
|
+
@b.serialize(doc)
|
214
|
+
end
|
215
|
+
|
216
|
+
doc = {"x" => 2147483647}
|
217
|
+
assert_equal doc, @b.deserialize(@b.serialize(doc).to_a)
|
218
|
+
|
219
|
+
doc["x"] = doc["x"] + 1
|
220
|
+
assert_raise RangeError do
|
221
|
+
@b.serialize(doc)
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
193
225
|
def test_do_not_change_original_object
|
194
226
|
val = OrderedHash.new
|
195
227
|
val['not_id'] = 1
|
data/tests/test_db_api.rb
CHANGED
@@ -485,7 +485,6 @@ class DBAPITest < Test::Unit::TestCase
|
|
485
485
|
assert_equal 5, @@db.eval("2 + 3;")
|
486
486
|
|
487
487
|
assert_equal 5, @@db.eval(Code.new("2 + 3;"))
|
488
|
-
assert_equal nil, @@db.eval(Code.new("return i;"))
|
489
488
|
assert_equal 2, @@db.eval(Code.new("return i;", {"i" => 2}))
|
490
489
|
assert_equal 5, @@db.eval(Code.new("i + 3;", {"i" => 2}))
|
491
490
|
|
@@ -548,14 +547,18 @@ class DBAPITest < Test::Unit::TestCase
|
|
548
547
|
@@coll.clear
|
549
548
|
|
550
549
|
assert_equal nil, @@db.dereference(DBRef.new("test", ObjectID.new))
|
551
|
-
|
552
|
-
key = @@coll.
|
553
|
-
assert_equal
|
550
|
+
@@coll.insert({"x" => "hello"})
|
551
|
+
key = @@coll.find_first()["_id"]
|
552
|
+
assert_equal "hello", @@db.dereference(DBRef.new("test", key))["x"]
|
554
553
|
|
555
554
|
assert_equal nil, @@db.dereference(DBRef.new("test", 4))
|
556
555
|
obj = {"_id" => 4}
|
557
556
|
@@coll.insert(obj)
|
558
557
|
assert_equal obj, @@db.dereference(DBRef.new("test", 4))
|
558
|
+
|
559
|
+
@@coll.clear
|
560
|
+
@@coll.insert({"x" => "hello"})
|
561
|
+
assert_equal nil, @@db.dereference(DBRef.new("test", nil))
|
559
562
|
end
|
560
563
|
|
561
564
|
# TODO this test fails with error message "Undefed Before end of object"
|