mongodb-mongo 0.2.5 → 0.2.6

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/db.rb CHANGED
@@ -254,8 +254,8 @@ module XGen
254
254
  doc['err']
255
255
  end
256
256
 
257
- # Returns +true+ if there is was an error caused by the most recently
258
- # executed database operation.
257
+ # Returns +true+ if an error was caused by the most recently executed
258
+ # database operation.
259
259
  #
260
260
  # Note: as of this writing, errors are only detected on the db server
261
261
  # for certain kinds of operations (writes). The plan is to change this
@@ -333,7 +333,20 @@ class BSON
333
333
  def serialize_object_element(buf, key, val, opcode=OBJECT)
334
334
  buf.put(opcode)
335
335
  self.class.serialize_cstr(buf, key)
336
- buf.put_array(BSON.new.serialize(val).to_a)
336
+ buf.put_array(BSON.new.serialize(put_id_first(val)).to_a)
337
+ end
338
+
339
+ # For internal use only. Looks for '_id' or :_id key of val. If there is
340
+ # one, returns an OrderedHash where '_id' is first. If not, returns val.
341
+ def put_id_first(val)
342
+ oid = val.delete('_id') || val.delete(:_id)
343
+ if oid
344
+ h = OrderedHash.new
345
+ h['_id'] = oid
346
+ val.each { |k, v| h[k] = v }
347
+ val = h
348
+ end
349
+ val
337
350
  end
338
351
 
339
352
  def serialize_array_element(buf, key, val)
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'mongo'
3
- s.version = '0.2.5'
3
+ s.version = '0.2.6'
4
4
  s.platform = Gem::Platform::RUBY
5
5
  s.summary = 'Simple pure-Ruby driver for the 10gen Mongo DB'
6
6
  s.description = 'A pure-Ruby driver for the 10gen Mongo DB. For more information about Mongo, see http://www.mongodb.org.'
data/tests/test_bson.rb CHANGED
@@ -132,4 +132,20 @@ class BSONTest < Test::Unit::TestCase
132
132
  assert_kind_of Undefined, doc2['undef']
133
133
  end
134
134
 
135
+ def test_put_id_first
136
+ val = {'a' => 'foo'}
137
+ assert_same val, @b.put_id_first(val)
138
+
139
+ val = OrderedHash.new
140
+ val['not_id'] = 1
141
+ val['_id'] = 2
142
+ id_first = @b.put_id_first(val)
143
+ assert_equal ['_id', 'not_id'], id_first.keys
144
+
145
+ val = {'a' => 'foo', 'b' => 'bar', :_id => 42, 'z' => 'hello'}
146
+ id_first = @b.put_id_first(val)
147
+ assert id_first.keys.include?('_id')
148
+ assert !id_first.keys.include?(:_id)
149
+ end
150
+
135
151
  end
data/tests/test_db_api.rb CHANGED
@@ -286,6 +286,16 @@ class DBAPITest < Test::Unit::TestCase
286
286
  assert_equal regex, rows[0]['b']
287
287
  end
288
288
 
289
+ def test_non_oid_id
290
+ # Note: can't use Time.new because that will include fractional seconds,
291
+ # which Mongo does not store.
292
+ t = Time.at(1234567890)
293
+ @coll << {'_id' => t}
294
+ rows = @coll.find({'_id' => t}).to_a
295
+ assert_equal 1, rows.length
296
+ assert_equal t, rows[0]['_id']
297
+ end
298
+
289
299
  def test_strict
290
300
  assert !@db.strict?
291
301
  @db.strict = true
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongodb-mongo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jim Menard