mongo 0.1.0 → 0.15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. data/README.rdoc +268 -71
  2. data/Rakefile +27 -62
  3. data/bin/bson_benchmark.rb +59 -0
  4. data/bin/mongo_console +3 -3
  5. data/bin/run_test_script +19 -0
  6. data/bin/standard_benchmark +109 -0
  7. data/examples/admin.rb +41 -0
  8. data/examples/benchmarks.rb +42 -0
  9. data/examples/blog.rb +76 -0
  10. data/examples/capped.rb +23 -0
  11. data/examples/cursor.rb +47 -0
  12. data/examples/gridfs.rb +87 -0
  13. data/examples/index_test.rb +125 -0
  14. data/examples/info.rb +30 -0
  15. data/examples/queries.rb +69 -0
  16. data/examples/simple.rb +23 -0
  17. data/examples/strict.rb +34 -0
  18. data/examples/types.rb +35 -0
  19. data/lib/mongo.rb +9 -2
  20. data/lib/mongo/admin.rb +65 -68
  21. data/lib/mongo/collection.rb +379 -117
  22. data/lib/mongo/connection.rb +151 -0
  23. data/lib/mongo/cursor.rb +271 -216
  24. data/lib/mongo/db.rb +500 -315
  25. data/lib/mongo/errors.rb +26 -0
  26. data/lib/mongo/gridfs.rb +16 -0
  27. data/lib/mongo/gridfs/chunk.rb +92 -0
  28. data/lib/mongo/gridfs/grid_store.rb +464 -0
  29. data/lib/mongo/message.rb +16 -0
  30. data/lib/mongo/message/get_more_message.rb +24 -13
  31. data/lib/mongo/message/insert_message.rb +29 -11
  32. data/lib/mongo/message/kill_cursors_message.rb +23 -12
  33. data/lib/mongo/message/message.rb +74 -62
  34. data/lib/mongo/message/message_header.rb +35 -24
  35. data/lib/mongo/message/msg_message.rb +21 -9
  36. data/lib/mongo/message/opcodes.rb +26 -15
  37. data/lib/mongo/message/query_message.rb +63 -43
  38. data/lib/mongo/message/remove_message.rb +29 -12
  39. data/lib/mongo/message/update_message.rb +30 -13
  40. data/lib/mongo/query.rb +97 -89
  41. data/lib/mongo/types/binary.rb +25 -21
  42. data/lib/mongo/types/code.rb +30 -0
  43. data/lib/mongo/types/dbref.rb +19 -23
  44. data/lib/mongo/types/objectid.rb +130 -116
  45. data/lib/mongo/types/regexp_of_holding.rb +27 -31
  46. data/lib/mongo/util/bson.rb +273 -160
  47. data/lib/mongo/util/byte_buffer.rb +32 -28
  48. data/lib/mongo/util/ordered_hash.rb +88 -42
  49. data/lib/mongo/util/xml_to_ruby.rb +18 -15
  50. data/mongo-ruby-driver.gemspec +103 -0
  51. data/test/mongo-qa/_common.rb +8 -0
  52. data/test/mongo-qa/admin +26 -0
  53. data/test/mongo-qa/capped +22 -0
  54. data/test/mongo-qa/count1 +18 -0
  55. data/test/mongo-qa/dbs +22 -0
  56. data/test/mongo-qa/find +10 -0
  57. data/test/mongo-qa/find1 +15 -0
  58. data/test/mongo-qa/gridfs_in +16 -0
  59. data/test/mongo-qa/gridfs_out +17 -0
  60. data/test/mongo-qa/indices +49 -0
  61. data/test/mongo-qa/remove +25 -0
  62. data/test/mongo-qa/stress1 +35 -0
  63. data/test/mongo-qa/test1 +11 -0
  64. data/test/mongo-qa/update +18 -0
  65. data/{tests → test}/test_admin.rb +25 -16
  66. data/test/test_bson.rb +268 -0
  67. data/{tests → test}/test_byte_buffer.rb +0 -0
  68. data/test/test_chunk.rb +84 -0
  69. data/test/test_collection.rb +282 -0
  70. data/test/test_connection.rb +101 -0
  71. data/test/test_cursor.rb +321 -0
  72. data/test/test_db.rb +196 -0
  73. data/test/test_db_api.rb +798 -0
  74. data/{tests → test}/test_db_connection.rb +4 -3
  75. data/test/test_grid_store.rb +284 -0
  76. data/{tests → test}/test_message.rb +1 -1
  77. data/test/test_objectid.rb +105 -0
  78. data/{tests → test}/test_ordered_hash.rb +55 -0
  79. data/{tests → test}/test_round_trip.rb +13 -9
  80. data/test/test_threading.rb +37 -0
  81. metadata +74 -32
  82. data/bin/validate +0 -51
  83. data/lib/mongo/mongo.rb +0 -74
  84. data/lib/mongo/types/undefined.rb +0 -31
  85. data/tests/test_bson.rb +0 -135
  86. data/tests/test_cursor.rb +0 -66
  87. data/tests/test_db.rb +0 -51
  88. data/tests/test_db_api.rb +0 -349
  89. data/tests/test_objectid.rb +0 -88
@@ -8,12 +8,12 @@ require 'test/unit'
8
8
  # OrderedHash and then test both Ruby-to-BSON and BSON-to-Ruby translations.
9
9
  #
10
10
  # There is a whole other project that includes similar tests
11
- # (http://github.com/mongodb/mongo-qa). If the directory ../mongo-qa exists,
12
- # then we find the BSON test files there and use those, too. Use the Rake task
13
- # "mongo_qa" to obtain those tests.
11
+ # (http://github.com/mongodb/mongo-qa). If the directory ../../mongo-qa
12
+ # exists, (that is, the top-level dir of mongo-qa is next to the top-level dir
13
+ # of this project), then we find the BSON test files there and use those, too.
14
14
  class RoundTripTest < Test::Unit::TestCase
15
15
 
16
- include XGen::Mongo::Driver
16
+ include Mongo
17
17
 
18
18
  @@ruby = nil
19
19
 
@@ -47,7 +47,7 @@ EOS
47
47
  # Dynamically generate one test for each test file. This way, if one test
48
48
  # fails the others will still run.
49
49
  create_test_for_round_trip_files_in_dir(File.join(HERE, 'data'))
50
- mongo_qa_dir = File.join(HERE, '..', 'mongo-qa/modules/bson_tests')
50
+ mongo_qa_dir = File.join(HERE, '../..', 'mongo-qa/modules/bson_tests/tests')
51
51
  if File.exist?(mongo_qa_dir)
52
52
  %w(basic_types complex single_types).each { |subdir_name|
53
53
  create_test_for_round_trip_files_in_dir(File.join(mongo_qa_dir, subdir_name))
@@ -64,10 +64,14 @@ EOS
64
64
  # generated)
65
65
  def one_round_trip(dir, name)
66
66
  obj = File.open(File.join(dir, "#{name}.xson")) { |f|
67
- XMLToRuby.new.xml_to_ruby(f)
67
+ begin
68
+ XMLToRuby.new.xml_to_ruby(f)
69
+ rescue => ex # unsupported type
70
+ return
71
+ end
68
72
  }
69
73
 
70
- File.open(File.join(dir, "#{name}.bson"), 'r') { |f|
74
+ File.open(File.join(dir, "#{name}.bson"), 'rb') { |f|
71
75
  # Read the BSON from the file
72
76
  bson = f.read
73
77
  bson = if RUBY_VERSION >= '1.9'
@@ -93,9 +97,9 @@ EOS
93
97
  # Turn those BSON bytes back into a Ruby object.
94
98
  #
95
99
  # We're passing a nil db to the contructor here, but that's OK because
96
- # the BSON DBFef bytes don't contain the db object in any case, and we
100
+ # the BSON DBRef bytes don't contain the db object in any case, and we
97
101
  # don't care what the database is.
98
- obj_from_bson = BSON.new(nil).deserialize(ByteBuffer.new(bson_from_ruby))
102
+ obj_from_bson = BSON.new.deserialize(ByteBuffer.new(bson_from_ruby))
99
103
  assert_kind_of OrderedHash, obj_from_bson
100
104
 
101
105
  # Turn that Ruby object into BSON and compare it to the original BSON
@@ -0,0 +1,37 @@
1
+ $LOAD_PATH[0,0] = File.join(File.dirname(__FILE__), '..', 'lib')
2
+ require 'mongo'
3
+ require 'test/unit'
4
+
5
+ class TestThreading < Test::Unit::TestCase
6
+
7
+ include Mongo
8
+
9
+ @@host = ENV['MONGO_RUBY_DRIVER_HOST'] || 'localhost'
10
+ @@port = ENV['MONGO_RUBY_DRIVER_PORT'] || Connection::DEFAULT_PORT
11
+ @@db = Connection.new(@@host, @@port).db('ruby-mongo-test')
12
+ @@coll = @@db.collection('thread-test-collection')
13
+
14
+ def test_threading
15
+ @@coll.clear
16
+
17
+ 1000.times do |i|
18
+ @@coll.insert("x" => i)
19
+ end
20
+
21
+ threads = []
22
+
23
+ 10.times do |i|
24
+ threads[i] = Thread.new{
25
+ sum = 0
26
+ @@coll.find().each { |document|
27
+ sum += document["x"]
28
+ }
29
+ assert_equal 499500, sum
30
+ }
31
+ end
32
+
33
+ 10.times do |i|
34
+ threads[i].join
35
+ end
36
+ end
37
+ end
metadata CHANGED
@@ -1,33 +1,56 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: "0.15"
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jim Menard
8
+ - Mike Dirolf
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
12
 
12
- date: 2009-01-15 00:00:00 -05:00
13
+ date: 2009-10-05 00:00:00 -04:00
13
14
  default_executable:
14
15
  dependencies: []
15
16
 
16
- description: This is a simple pure-Ruby driver for the 10gen Mongo DB. For more information about Mongo, see http://www.mongodb.org.
17
- email: jimm@io.com
18
- executables:
19
- - mongo_console
20
- extensions: []
17
+ description: A Ruby driver for MongoDB. For more information about Mongo, see http://www.mongodb.org.
18
+ email: mongodb-dev@googlegroups.com
19
+ executables: []
21
20
 
22
- extra_rdoc_files: []
21
+ extensions: []
23
22
 
23
+ extra_rdoc_files:
24
+ - README.rdoc
24
25
  files:
26
+ - README.rdoc
27
+ - Rakefile
28
+ - mongo-ruby-driver.gemspec
29
+ - bin/bson_benchmark.rb
25
30
  - bin/mongo_console
26
- - bin/validate
31
+ - bin/run_test_script
32
+ - bin/standard_benchmark
33
+ - examples/admin.rb
34
+ - examples/benchmarks.rb
35
+ - examples/blog.rb
36
+ - examples/capped.rb
37
+ - examples/cursor.rb
38
+ - examples/gridfs.rb
39
+ - examples/index_test.rb
40
+ - examples/info.rb
41
+ - examples/queries.rb
42
+ - examples/simple.rb
43
+ - examples/strict.rb
44
+ - examples/types.rb
27
45
  - lib/mongo/admin.rb
28
46
  - lib/mongo/collection.rb
47
+ - lib/mongo/connection.rb
29
48
  - lib/mongo/cursor.rb
30
49
  - lib/mongo/db.rb
50
+ - lib/mongo/gridfs/chunk.rb
51
+ - lib/mongo/gridfs/grid_store.rb
52
+ - lib/mongo/gridfs.rb
53
+ - lib/mongo/errors.rb
31
54
  - lib/mongo/message/get_more_message.rb
32
55
  - lib/mongo/message/insert_message.rb
33
56
  - lib/mongo/message/kill_cursors_message.rb
@@ -39,36 +62,26 @@ files:
39
62
  - lib/mongo/message/remove_message.rb
40
63
  - lib/mongo/message/update_message.rb
41
64
  - lib/mongo/message.rb
42
- - lib/mongo/mongo.rb
43
65
  - lib/mongo/query.rb
44
66
  - lib/mongo/types/binary.rb
67
+ - lib/mongo/types/code.rb
45
68
  - lib/mongo/types/dbref.rb
46
69
  - lib/mongo/types/objectid.rb
47
70
  - lib/mongo/types/regexp_of_holding.rb
48
- - lib/mongo/types/undefined.rb
49
71
  - lib/mongo/util/bson.rb
50
72
  - lib/mongo/util/byte_buffer.rb
51
73
  - lib/mongo/util/ordered_hash.rb
52
74
  - lib/mongo/util/xml_to_ruby.rb
53
75
  - lib/mongo.rb
54
- - tests/test_admin.rb
55
- - tests/test_bson.rb
56
- - tests/test_byte_buffer.rb
57
- - tests/test_cursor.rb
58
- - tests/test_db.rb
59
- - tests/test_db_api.rb
60
- - tests/test_db_connection.rb
61
- - tests/test_message.rb
62
- - tests/test_objectid.rb
63
- - tests/test_ordered_hash.rb
64
- - tests/test_round_trip.rb
65
- - Rakefile
66
- - README.rdoc
67
76
  has_rdoc: true
68
77
  homepage: http://www.mongodb.org
69
- post_install_message:
70
- rdoc_options: []
78
+ licenses: []
71
79
 
80
+ post_install_message:
81
+ rdoc_options:
82
+ - --main
83
+ - README.rdoc
84
+ - --inline-source
72
85
  require_paths:
73
86
  - lib
74
87
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -85,10 +98,39 @@ required_rubygems_version: !ruby/object:Gem::Requirement
85
98
  version:
86
99
  requirements: []
87
100
 
88
- rubyforge_project: mongo
89
- rubygems_version: 1.3.1
101
+ rubyforge_project:
102
+ rubygems_version: 1.3.5
90
103
  signing_key:
91
- specification_version: 2
92
- summary: Simple pure-Ruby driver for the 10gen Mongo DB
93
- test_files: []
94
-
104
+ specification_version: 3
105
+ summary: Ruby driver for the MongoDB
106
+ test_files:
107
+ - test/mongo-qa/_common.rb
108
+ - test/mongo-qa/admin
109
+ - test/mongo-qa/capped
110
+ - test/mongo-qa/count1
111
+ - test/mongo-qa/dbs
112
+ - test/mongo-qa/find
113
+ - test/mongo-qa/find1
114
+ - test/mongo-qa/gridfs_in
115
+ - test/mongo-qa/gridfs_out
116
+ - test/mongo-qa/indices
117
+ - test/mongo-qa/remove
118
+ - test/mongo-qa/stress1
119
+ - test/mongo-qa/test1
120
+ - test/mongo-qa/update
121
+ - test/test_admin.rb
122
+ - test/test_bson.rb
123
+ - test/test_byte_buffer.rb
124
+ - test/test_chunk.rb
125
+ - test/test_collection.rb
126
+ - test/test_connection.rb
127
+ - test/test_cursor.rb
128
+ - test/test_db.rb
129
+ - test/test_db_api.rb
130
+ - test/test_db_connection.rb
131
+ - test/test_grid_store.rb
132
+ - test/test_message.rb
133
+ - test/test_objectid.rb
134
+ - test/test_ordered_hash.rb
135
+ - test/test_threading.rb
136
+ - test/test_round_trip.rb
@@ -1,51 +0,0 @@
1
- #!/usr/bin/env ruby
2
- #
3
- # usage: validate somefile.xson somefile.bson
4
- #
5
- # Reads somefile.xson file (XML that describes a Mongo-type document),
6
- # converts it into a Ruby OrderedHash, runs that through the BSON
7
- # serialization code, and writes the BSON bytes to somefile.bson.
8
- #
9
- # In addition, this script takes the generated BSON, reads it in then writes
10
- # it back out to a temp BSON file. If they are different, we report that error
11
- # to STDOUT.
12
- #
13
- # This script is used by the mongo-qa project
14
- # (http://github.com/mongodb/mongo-qa).
15
-
16
- $LOAD_PATH[0,0] = File.join(File.dirname(__FILE__), '..', 'lib')
17
- require 'mongo'
18
- require 'mongo/util/xml_to_ruby'
19
-
20
- if ARGV.length < 2
21
- $stderr.puts "usage: validate somefile.xson somefile.bson"
22
- exit 1
23
- end
24
-
25
- # Translate the .xson XML into a Ruby object, turn that object into BSON, and
26
- # write the BSON to the file as requested.
27
- obj = File.open(ARGV[0], 'rb') { |f| XMLToRuby.new.xml_to_ruby(f) }
28
- bson = BSON.new.serialize(obj).to_a
29
- File.open(ARGV[1], 'wb') { |f| bson.each { |b| f.putc(b) } }
30
-
31
- # Now the additional testing. Read the generated BSON back in, deserialize it,
32
- # and re-serialize the results. Compare that BSON with the BSON from the file
33
- # we output.
34
- bson = File.open(ARGV[1], 'rb') { |f| f.read }
35
- bson = if RUBY_VERSION >= '1.9'
36
- bson.bytes.to_a
37
- else
38
- bson.split(//).collect { |c| c[0] }
39
- end
40
-
41
- # Turn the Ruby object into BSON bytes and compare with the BSON bytes from
42
- # the file.
43
- bson_from_ruby = BSON.new.serialize(obj).to_a
44
-
45
- if bson.length != bson_from_ruby.length
46
- $stderr.puts "error: round-trip BSON lengths differ when testing #{ARGV[0]}"
47
- exit 1
48
- elsif bson != bson_from_ruby
49
- $stderr.puts "error: round-trip BSON contents differ when testing #{ARGV[0]}"
50
- exit 1
51
- end
@@ -1,74 +0,0 @@
1
- # --
2
- # Copyright (C) 2008-2009 10gen Inc.
3
- #
4
- # This program is free software: you can redistribute it and/or modify it
5
- # under the terms of the GNU Affero General Public License, version 3, as
6
- # published by the Free Software Foundation.
7
- #
8
- # This program is distributed in the hope that it will be useful, but WITHOUT
9
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10
- # FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License
11
- # for more details.
12
- #
13
- # You should have received a copy of the GNU Affero General Public License
14
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
15
- # ++
16
-
17
- require 'mongo/db'
18
-
19
- module XGen
20
- module Mongo
21
- module Driver
22
-
23
- # Represents a Mongo database server.
24
- class Mongo
25
-
26
- DEFAULT_PORT = 27017
27
-
28
- # Either nodes_or_host is a host name string and port is an optional
29
- # port number that defaults to DEFAULT_PORT, or nodes_or_host is an
30
- # array of arrays, where each is a host/port pair (or a host with no
31
- # port). Finally, if nodes_or_host is nil then host is 'localhost' and
32
- # port is DEFAULT_PORT. Since that's so confusing, here are a few
33
- # examples:
34
- #
35
- # Mongo.new # localhost, DEFAULT_PORT
36
- # Mongo.new("localhost") # localhost, DEFAULT_PORT
37
- # Mongo.new("localhost", 3000) # localhost, 3000
38
- # Mongo.new([["localhost"]]) # localhost, DEFAULT_PORT
39
- # Mongo.new([["localhost", 3000]]) # localhost, 3000
40
- # Mongo.new([["db1.example.com", 3000], ["db2.example.com", 3000]]])
41
- #
42
- # When a DB object first connects, it tries nodes and stops at the
43
- # first one it connects to.
44
- def initialize(nodes_or_host=nil, port=nil)
45
- @nodes = case nodes_or_host
46
- when String
47
- [[nodes_or_host, port || DEFAULT_PORT]]
48
- when Array
49
- nodes_or_host.collect { |nh| [nh[0], nh[1] || DEFAULT_PORT] }
50
- when nil
51
- [['localhost', DEFAULT_PORT]]
52
- end
53
- end
54
-
55
- # Return the XGen::Mongo::Driver::DB named +db_name+.
56
- def db(db_name)
57
- XGen::Mongo::Driver::DB.new(db_name, @nodes)
58
- end
59
-
60
- # Not implemented.
61
- def clone_database(from)
62
- raise "not implemented"
63
- end
64
-
65
- # Not implemented.
66
- def copy_database(from_host, from_db, to_db)
67
- raise "not implemented"
68
- end
69
-
70
- end
71
- end
72
- end
73
- end
74
-
@@ -1,31 +0,0 @@
1
- # --
2
- # Copyright (C) 2008-2009 10gen Inc.
3
- #
4
- # This program is free software: you can redistribute it and/or modify it
5
- # under the terms of the GNU Affero General Public License, version 3, as
6
- # published by the Free Software Foundation.
7
- #
8
- # This program is distributed in the hope that it will be useful, but WITHOUT
9
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10
- # FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License
11
- # for more details.
12
- #
13
- # You should have received a copy of the GNU Affero General Public License
14
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
15
- # ++
16
-
17
- module XGen
18
- module Mongo
19
- module Driver
20
-
21
- # A special "undefined" type to match Mongo's storage of UNKNOWN values.
22
- # "UNKNOWN" comes from JavaScript.
23
- #
24
- # NOTE: this class does not attempt to provide ANY of the semantics an
25
- # "unknown" object might need. It isn't nil, it isn't special in any
26
- # way, and there isn't any singleton value.
27
- class Undefined < Object; end
28
-
29
- end
30
- end
31
- end
@@ -1,135 +0,0 @@
1
- $LOAD_PATH[0,0] = File.join(File.dirname(__FILE__), '..', 'lib')
2
- require 'mongo'
3
- require 'test/unit'
4
-
5
- class BSONTest < Test::Unit::TestCase
6
-
7
- include XGen::Mongo::Driver
8
-
9
- def setup
10
- # We don't pass a DB to the constructor, even though we are about to test
11
- # deserialization. This means that when we deserialize, any DBRefs will
12
- # have nil @db ivars. That's fine for now.
13
- @b = BSON.new
14
- end
15
-
16
- def test_string
17
- doc = {'doc' => 'hello, world'}
18
- @b.serialize(doc)
19
- assert_equal doc, @b.deserialize
20
- end
21
-
22
- def test_code
23
- doc = {'$where' => 'this.a.b < this.b'}
24
- @b.serialize(doc)
25
- assert_equal doc, @b.deserialize
26
- end
27
-
28
- def test_number
29
- doc = {'doc' => 41.99}
30
- @b.serialize(doc)
31
- assert_equal doc, @b.deserialize
32
- end
33
-
34
- def test_int
35
- doc = {'doc' => 42}
36
- @b.serialize(doc)
37
- assert_equal doc, @b.deserialize
38
- end
39
-
40
- def test_object
41
- doc = {'doc' => {'age' => 42, 'name' => 'Spongebob', 'shoe_size' => 9.5}}
42
- @b.serialize(doc)
43
- assert_equal doc, @b.deserialize
44
- end
45
-
46
- def test_oid
47
- doc = {'doc' => ObjectID.new}
48
- @b.serialize(doc)
49
- assert_equal doc, @b.deserialize
50
- end
51
-
52
- def test_array
53
- doc = {'doc' => [1, 2, 'a', 'b']}
54
- @b.serialize(doc)
55
- assert_equal doc, @b.deserialize
56
- end
57
-
58
- def test_regex
59
- doc = {'doc' => /foobar/i}
60
- @b.serialize(doc)
61
- doc2 = @b.deserialize
62
- assert_equal doc, doc2
63
-
64
- r = doc2['doc']
65
- assert_kind_of XGen::Mongo::Driver::RegexpOfHolding, r
66
- assert_equal '', r.extra_options_str
67
-
68
- r.extra_options_str << 'zywcab'
69
- assert_equal 'zywcab', r.extra_options_str
70
-
71
- b = BSON.new
72
- doc = {'doc' => r}
73
- b.serialize(doc)
74
- doc2 = nil
75
- doc2 = b.deserialize
76
- assert_equal doc, doc2
77
-
78
- r = doc2['doc']
79
- assert_kind_of XGen::Mongo::Driver::RegexpOfHolding, r
80
- assert_equal 'abcwyz', r.extra_options_str # must be sorted
81
- end
82
-
83
- def test_boolean
84
- doc = {'doc' => true}
85
- @b.serialize(doc)
86
- assert_equal doc, @b.deserialize
87
- end
88
-
89
- def test_date
90
- doc = {'date' => Time.now}
91
- @b.serialize(doc)
92
- doc2 = @b.deserialize
93
- # Mongo only stores seconds, so comparing raw Time objects will fail
94
- # because the fractional seconds will be different.
95
- assert_equal doc['date'].to_i, doc2['date'].to_i
96
- end
97
-
98
- def test_null
99
- end
100
-
101
- def test_dbref
102
- oid = ObjectID.new
103
- doc = {}
104
- doc['dbref'] = DBRef.new(doc, 'dbref', nil, 'namespace', oid)
105
- @b.serialize(doc)
106
- doc2 = @b.deserialize
107
- assert_equal 'namespace', doc2['dbref'].namespace
108
- assert_equal oid, doc2['dbref'].object_id
109
- end
110
-
111
- def test_symbol
112
- doc = {'sym' => :foo}
113
- @b.serialize(doc)
114
- doc2 = @b.deserialize
115
- assert_equal :foo, doc2['sym']
116
- end
117
-
118
- def test_binary
119
- bin = 'binstring'.to_mongo_binary
120
- assert_kind_of Binary, bin
121
-
122
- doc = {'bin' => bin}
123
- @b.serialize(doc)
124
- doc2 = @b.deserialize
125
- assert_equal 'binstring', doc2['bin']
126
- end
127
-
128
- def test_undefined
129
- doc = {'undef' => Undefined.new}
130
- @b.serialize(doc)
131
- doc2 = @b.deserialize
132
- assert_kind_of Undefined, doc2['undef']
133
- end
134
-
135
- end