mongo 0.1.0 → 0.15
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +268 -71
- data/Rakefile +27 -62
- data/bin/bson_benchmark.rb +59 -0
- data/bin/mongo_console +3 -3
- data/bin/run_test_script +19 -0
- data/bin/standard_benchmark +109 -0
- data/examples/admin.rb +41 -0
- data/examples/benchmarks.rb +42 -0
- data/examples/blog.rb +76 -0
- data/examples/capped.rb +23 -0
- data/examples/cursor.rb +47 -0
- data/examples/gridfs.rb +87 -0
- data/examples/index_test.rb +125 -0
- data/examples/info.rb +30 -0
- data/examples/queries.rb +69 -0
- data/examples/simple.rb +23 -0
- data/examples/strict.rb +34 -0
- data/examples/types.rb +35 -0
- data/lib/mongo.rb +9 -2
- data/lib/mongo/admin.rb +65 -68
- data/lib/mongo/collection.rb +379 -117
- data/lib/mongo/connection.rb +151 -0
- data/lib/mongo/cursor.rb +271 -216
- data/lib/mongo/db.rb +500 -315
- data/lib/mongo/errors.rb +26 -0
- data/lib/mongo/gridfs.rb +16 -0
- data/lib/mongo/gridfs/chunk.rb +92 -0
- data/lib/mongo/gridfs/grid_store.rb +464 -0
- data/lib/mongo/message.rb +16 -0
- data/lib/mongo/message/get_more_message.rb +24 -13
- data/lib/mongo/message/insert_message.rb +29 -11
- data/lib/mongo/message/kill_cursors_message.rb +23 -12
- data/lib/mongo/message/message.rb +74 -62
- data/lib/mongo/message/message_header.rb +35 -24
- data/lib/mongo/message/msg_message.rb +21 -9
- data/lib/mongo/message/opcodes.rb +26 -15
- data/lib/mongo/message/query_message.rb +63 -43
- data/lib/mongo/message/remove_message.rb +29 -12
- data/lib/mongo/message/update_message.rb +30 -13
- data/lib/mongo/query.rb +97 -89
- data/lib/mongo/types/binary.rb +25 -21
- data/lib/mongo/types/code.rb +30 -0
- data/lib/mongo/types/dbref.rb +19 -23
- data/lib/mongo/types/objectid.rb +130 -116
- data/lib/mongo/types/regexp_of_holding.rb +27 -31
- data/lib/mongo/util/bson.rb +273 -160
- data/lib/mongo/util/byte_buffer.rb +32 -28
- data/lib/mongo/util/ordered_hash.rb +88 -42
- data/lib/mongo/util/xml_to_ruby.rb +18 -15
- data/mongo-ruby-driver.gemspec +103 -0
- data/test/mongo-qa/_common.rb +8 -0
- data/test/mongo-qa/admin +26 -0
- data/test/mongo-qa/capped +22 -0
- data/test/mongo-qa/count1 +18 -0
- data/test/mongo-qa/dbs +22 -0
- data/test/mongo-qa/find +10 -0
- data/test/mongo-qa/find1 +15 -0
- data/test/mongo-qa/gridfs_in +16 -0
- data/test/mongo-qa/gridfs_out +17 -0
- data/test/mongo-qa/indices +49 -0
- data/test/mongo-qa/remove +25 -0
- data/test/mongo-qa/stress1 +35 -0
- data/test/mongo-qa/test1 +11 -0
- data/test/mongo-qa/update +18 -0
- data/{tests → test}/test_admin.rb +25 -16
- data/test/test_bson.rb +268 -0
- data/{tests → test}/test_byte_buffer.rb +0 -0
- data/test/test_chunk.rb +84 -0
- data/test/test_collection.rb +282 -0
- data/test/test_connection.rb +101 -0
- data/test/test_cursor.rb +321 -0
- data/test/test_db.rb +196 -0
- data/test/test_db_api.rb +798 -0
- data/{tests → test}/test_db_connection.rb +4 -3
- data/test/test_grid_store.rb +284 -0
- data/{tests → test}/test_message.rb +1 -1
- data/test/test_objectid.rb +105 -0
- data/{tests → test}/test_ordered_hash.rb +55 -0
- data/{tests → test}/test_round_trip.rb +13 -9
- data/test/test_threading.rb +37 -0
- metadata +74 -32
- data/bin/validate +0 -51
- data/lib/mongo/mongo.rb +0 -74
- data/lib/mongo/types/undefined.rb +0 -31
- data/tests/test_bson.rb +0 -135
- data/tests/test_cursor.rb +0 -66
- data/tests/test_db.rb +0 -51
- data/tests/test_db_api.rb +0 -349
- data/tests/test_objectid.rb +0 -88
data/tests/test_cursor.rb
DELETED
@@ -1,66 +0,0 @@
|
|
1
|
-
$LOAD_PATH[0,0] = File.join(File.dirname(__FILE__), '..', 'lib')
|
2
|
-
require 'mongo'
|
3
|
-
require 'test/unit'
|
4
|
-
|
5
|
-
# NOTE: assumes Mongo is running
|
6
|
-
class CursorTest < Test::Unit::TestCase
|
7
|
-
|
8
|
-
include XGen::Mongo::Driver
|
9
|
-
|
10
|
-
def setup
|
11
|
-
host = ENV['MONGO_RUBY_DRIVER_HOST'] || 'localhost'
|
12
|
-
port = ENV['MONGO_RUBY_DRIVER_PORT'] || Mongo::DEFAULT_PORT
|
13
|
-
@db = Mongo.new(host, port).db('ruby-mongo-test')
|
14
|
-
@coll = @db.collection('test')
|
15
|
-
@coll.clear
|
16
|
-
@r1 = @coll.insert('a' => 1) # collection not created until it's used
|
17
|
-
@coll_full_name = 'ruby-mongo-test.test'
|
18
|
-
end
|
19
|
-
|
20
|
-
def teardown
|
21
|
-
if @db.connected?
|
22
|
-
@coll.clear if @coll
|
23
|
-
@db.close
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_explain
|
28
|
-
cursor = @coll.find('a' => 1)
|
29
|
-
explaination = cursor.explain
|
30
|
-
assert_not_nil explaination['cursor']
|
31
|
-
assert_kind_of Numeric, explaination['n']
|
32
|
-
assert_kind_of Numeric, explaination['millis']
|
33
|
-
assert_kind_of Numeric, explaination['nscanned']
|
34
|
-
end
|
35
|
-
|
36
|
-
def test_close_no_query_sent
|
37
|
-
begin
|
38
|
-
cursor = @coll.find('a' => 1)
|
39
|
-
cursor.close
|
40
|
-
assert cursor.closed?
|
41
|
-
rescue => ex
|
42
|
-
fail ex.to_s
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_close_after_query_sent
|
47
|
-
begin
|
48
|
-
cursor = @coll.find('a' => 1)
|
49
|
-
cursor.next_object
|
50
|
-
cursor.close
|
51
|
-
assert cursor.closed?
|
52
|
-
rescue => ex
|
53
|
-
fail ex.to_s
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
def test_hint
|
58
|
-
begin
|
59
|
-
cursor = @coll.find('a' => 1).hint('a')
|
60
|
-
assert_equal 1, cursor.to_a.size
|
61
|
-
rescue => ex
|
62
|
-
fail ex.to_s
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
end
|
data/tests/test_db.rb
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
$LOAD_PATH[0,0] = File.join(File.dirname(__FILE__), '..', 'lib')
|
2
|
-
require 'mongo'
|
3
|
-
require 'test/unit'
|
4
|
-
|
5
|
-
# NOTE: assumes Mongo is running
|
6
|
-
class DBAPITest < Test::Unit::TestCase
|
7
|
-
|
8
|
-
include XGen::Mongo::Driver
|
9
|
-
|
10
|
-
def setup
|
11
|
-
@host = ENV['MONGO_RUBY_DRIVER_HOST'] || 'localhost'
|
12
|
-
@port = ENV['MONGO_RUBY_DRIVER_PORT'] || Mongo::DEFAULT_PORT
|
13
|
-
@db = Mongo.new(@host, @port).db('ruby-mongo-test')
|
14
|
-
end
|
15
|
-
|
16
|
-
def teardown
|
17
|
-
if @db.connected?
|
18
|
-
@db.close
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def test_close
|
23
|
-
@db.close
|
24
|
-
assert !@db.connected?
|
25
|
-
begin
|
26
|
-
@db.collection('test').insert('a' => 1)
|
27
|
-
fail "expected 'NilClass' exception"
|
28
|
-
rescue => ex
|
29
|
-
assert_match /NilClass/, ex.to_s
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_full_coll_name
|
34
|
-
coll = @db.collection('test')
|
35
|
-
assert_equal 'ruby-mongo-test.test', @db.full_coll_name(coll.name)
|
36
|
-
end
|
37
|
-
|
38
|
-
def test_master
|
39
|
-
# Doesn't really test anything since we probably only have one database
|
40
|
-
# during this test.
|
41
|
-
@db.switch_to_master
|
42
|
-
assert @db.connected?
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_array
|
46
|
-
@db.close
|
47
|
-
@db = Mongo.new([["nosuch.example.com"], [@host, @port]]).db('ruby-mongo-test')
|
48
|
-
assert @db.connected?
|
49
|
-
end
|
50
|
-
|
51
|
-
end
|
data/tests/test_db_api.rb
DELETED
@@ -1,349 +0,0 @@
|
|
1
|
-
$LOAD_PATH[0,0] = File.join(File.dirname(__FILE__), '..', 'lib')
|
2
|
-
require 'mongo'
|
3
|
-
require 'test/unit'
|
4
|
-
|
5
|
-
# NOTE: assumes Mongo is running
|
6
|
-
class DBAPITest < Test::Unit::TestCase
|
7
|
-
|
8
|
-
include XGen::Mongo::Driver
|
9
|
-
|
10
|
-
def setup
|
11
|
-
host = ENV['MONGO_RUBY_DRIVER_HOST'] || 'localhost'
|
12
|
-
port = ENV['MONGO_RUBY_DRIVER_PORT'] || Mongo::DEFAULT_PORT
|
13
|
-
@db = Mongo.new(host, port).db('ruby-mongo-test')
|
14
|
-
@coll = @db.collection('test')
|
15
|
-
@coll.clear
|
16
|
-
@r1 = @coll.insert('a' => 1) # collection not created until it's used
|
17
|
-
@coll_full_name = 'ruby-mongo-test.test'
|
18
|
-
end
|
19
|
-
|
20
|
-
def teardown
|
21
|
-
if @db.connected?
|
22
|
-
@coll.clear unless @coll == nil
|
23
|
-
@db.close
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_clear
|
28
|
-
assert_equal 1, @coll.count
|
29
|
-
@coll.clear
|
30
|
-
assert_equal 0, @coll.count
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_insert
|
34
|
-
@coll.insert('a' => 2)
|
35
|
-
@coll.insert('b' => 3)
|
36
|
-
|
37
|
-
assert_equal 3, @coll.count
|
38
|
-
docs = @coll.find().to_a
|
39
|
-
assert_equal 3, docs.length
|
40
|
-
assert docs.detect { |row| row['a'] == 1 }
|
41
|
-
assert docs.detect { |row| row['a'] == 2 }
|
42
|
-
assert docs.detect { |row| row['b'] == 3 }
|
43
|
-
|
44
|
-
@coll << {'b' => 4}
|
45
|
-
docs = @coll.find().to_a
|
46
|
-
assert_equal 4, docs.length
|
47
|
-
assert docs.detect { |row| row['b'] == 4 }
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_find_simple
|
51
|
-
@r2 = @coll.insert('a' => 2)
|
52
|
-
@r3 = @coll.insert('b' => 3)
|
53
|
-
# Check sizes
|
54
|
-
docs = @coll.find().to_a
|
55
|
-
assert_equal 3, docs.size
|
56
|
-
assert_equal 3, @coll.count
|
57
|
-
|
58
|
-
# Find by other value
|
59
|
-
docs = @coll.find('a' => @r1['a']).to_a
|
60
|
-
assert_equal 1, docs.size
|
61
|
-
doc = docs.first
|
62
|
-
assert_equal doc['_id'], @r1['_id']
|
63
|
-
assert_equal doc['a'], @r1['a']
|
64
|
-
end
|
65
|
-
|
66
|
-
def test_find_advanced
|
67
|
-
@coll.insert('a' => 2)
|
68
|
-
@coll.insert('b' => 3)
|
69
|
-
|
70
|
-
# Find by advanced query (less than)
|
71
|
-
docs = @coll.find('a' => { '$lt' => 10 }).to_a
|
72
|
-
assert_equal 2, docs.size
|
73
|
-
assert docs.detect { |row| row['a'] == 1 }
|
74
|
-
assert docs.detect { |row| row['a'] == 2 }
|
75
|
-
|
76
|
-
# Find by advanced query (greater than)
|
77
|
-
docs = @coll.find('a' => { '$gt' => 1 }).to_a
|
78
|
-
assert_equal 1, docs.size
|
79
|
-
assert docs.detect { |row| row['a'] == 2 }
|
80
|
-
|
81
|
-
# Find by advanced query (less than or equal to)
|
82
|
-
docs = @coll.find('a' => { '$lte' => 1 }).to_a
|
83
|
-
assert_equal 1, docs.size
|
84
|
-
assert docs.detect { |row| row['a'] == 1 }
|
85
|
-
|
86
|
-
# Find by advanced query (greater than or equal to)
|
87
|
-
docs = @coll.find('a' => { '$gte' => 1 }).to_a
|
88
|
-
assert_equal 2, docs.size
|
89
|
-
assert docs.detect { |row| row['a'] == 1 }
|
90
|
-
assert docs.detect { |row| row['a'] == 2 }
|
91
|
-
|
92
|
-
# Find by advanced query (between)
|
93
|
-
docs = @coll.find('a' => { '$gt' => 1, '$lt' => 3 }).to_a
|
94
|
-
assert_equal 1, docs.size
|
95
|
-
assert docs.detect { |row| row['a'] == 2 }
|
96
|
-
|
97
|
-
# Find by advanced query (in clause)
|
98
|
-
docs = @coll.find('a' => {'$in' => [1,2]}).to_a
|
99
|
-
assert_equal 2, docs.size
|
100
|
-
assert docs.detect { |row| row['a'] == 1 }
|
101
|
-
assert docs.detect { |row| row['a'] == 2 }
|
102
|
-
|
103
|
-
# Find by advanced query (regexp)
|
104
|
-
docs = @coll.find('a' => /[1|2]/).to_a
|
105
|
-
assert_equal 2, docs.size
|
106
|
-
assert docs.detect { |row| row['a'] == 1 }
|
107
|
-
assert docs.detect { |row| row['a'] == 2 }
|
108
|
-
end
|
109
|
-
|
110
|
-
def test_find_sorting
|
111
|
-
@coll.clear
|
112
|
-
@coll.insert('a' => 1, 'b' => 2)
|
113
|
-
@coll.insert('a' => 2, 'b' => 1)
|
114
|
-
@coll.insert('a' => 3, 'b' => 2)
|
115
|
-
@coll.insert('a' => 4, 'b' => 1)
|
116
|
-
|
117
|
-
# Sorting (ascending)
|
118
|
-
docs = @coll.find({'a' => { '$lt' => 10 }}, :sort => {'a' => 1}).to_a
|
119
|
-
assert_equal 4, docs.size
|
120
|
-
assert_equal 1, docs[0]['a']
|
121
|
-
assert_equal 2, docs[1]['a']
|
122
|
-
assert_equal 3, docs[2]['a']
|
123
|
-
assert_equal 4, docs[3]['a']
|
124
|
-
|
125
|
-
# Sorting (descending)
|
126
|
-
docs = @coll.find({'a' => { '$lt' => 10 }}, :sort => {'a' => -1}).to_a
|
127
|
-
assert_equal 4, docs.size
|
128
|
-
assert_equal 4, docs[0]['a']
|
129
|
-
assert_equal 3, docs[1]['a']
|
130
|
-
assert_equal 2, docs[2]['a']
|
131
|
-
assert_equal 1, docs[3]['a']
|
132
|
-
|
133
|
-
# Sorting using array of names; assumes ascending order.
|
134
|
-
docs = @coll.find({'a' => { '$lt' => 10 }}, :sort => ['a']).to_a
|
135
|
-
assert_equal 4, docs.size
|
136
|
-
assert_equal 1, docs[0]['a']
|
137
|
-
assert_equal 2, docs[1]['a']
|
138
|
-
assert_equal 3, docs[2]['a']
|
139
|
-
assert_equal 4, docs[3]['a']
|
140
|
-
|
141
|
-
# Sorting using single name; assumes ascending order.
|
142
|
-
docs = @coll.find({'a' => { '$lt' => 10 }}, :sort => 'a').to_a
|
143
|
-
assert_equal 4, docs.size
|
144
|
-
assert_equal 1, docs[0]['a']
|
145
|
-
assert_equal 2, docs[1]['a']
|
146
|
-
assert_equal 3, docs[2]['a']
|
147
|
-
assert_equal 4, docs[3]['a']
|
148
|
-
|
149
|
-
docs = @coll.find({'a' => { '$lt' => 10 }}, :sort => ['b', 'a']).to_a
|
150
|
-
assert_equal 4, docs.size
|
151
|
-
assert_equal 2, docs[0]['a']
|
152
|
-
assert_equal 4, docs[1]['a']
|
153
|
-
assert_equal 1, docs[2]['a']
|
154
|
-
assert_equal 3, docs[3]['a']
|
155
|
-
|
156
|
-
# Sorting using empty array; no order guarantee but should not blow up.
|
157
|
-
docs = @coll.find({'a' => { '$lt' => 10 }}, :sort => []).to_a
|
158
|
-
assert_equal 4, docs.size
|
159
|
-
|
160
|
-
# Sorting using ordered hash. You can use an unordered one, but then the
|
161
|
-
# order of the keys won't be guaranteed thus your sort won't make sense.
|
162
|
-
oh = OrderedHash.new
|
163
|
-
oh['a'] = -1
|
164
|
-
docs = @coll.find({'a' => { '$lt' => 10 }}, :sort => oh).to_a
|
165
|
-
assert_equal 4, docs.size
|
166
|
-
assert_equal 4, docs[0]['a']
|
167
|
-
assert_equal 3, docs[1]['a']
|
168
|
-
assert_equal 2, docs[2]['a']
|
169
|
-
assert_equal 1, docs[3]['a']
|
170
|
-
|
171
|
-
# TODO this will not pass due to known Mongo bug #898
|
172
|
-
# oh = OrderedHash.new
|
173
|
-
# oh['b'] = -1
|
174
|
-
# oh['a'] = 1
|
175
|
-
# docs = @coll.find({'a' => { '$lt' => 10 }}, :sort => oh).to_a
|
176
|
-
# assert_equal 4, docs.size
|
177
|
-
# assert_equal 1, docs[0]['a']
|
178
|
-
# assert_equal 3, docs[1]['a']
|
179
|
-
# assert_equal 2, docs[2]['a']
|
180
|
-
# assert_equal 4, docs[3]['a']
|
181
|
-
end
|
182
|
-
|
183
|
-
def test_find_limits
|
184
|
-
@coll.insert('b' => 2)
|
185
|
-
@coll.insert('c' => 3)
|
186
|
-
@coll.insert('d' => 4)
|
187
|
-
|
188
|
-
docs = @coll.find({}, :limit => 1).to_a
|
189
|
-
assert_equal 1, docs.size
|
190
|
-
docs = @coll.find({}, :limit => 2).to_a
|
191
|
-
assert_equal 2, docs.size
|
192
|
-
docs = @coll.find({}, :limit => 3).to_a
|
193
|
-
assert_equal 3, docs.size
|
194
|
-
docs = @coll.find({}, :limit => 4).to_a
|
195
|
-
assert_equal 4, docs.size
|
196
|
-
docs = @coll.find({}).to_a
|
197
|
-
assert_equal 4, docs.size
|
198
|
-
docs = @coll.find({}, :limit => 99).to_a
|
199
|
-
assert_equal 4, docs.size
|
200
|
-
end
|
201
|
-
|
202
|
-
def test_drop_collection
|
203
|
-
assert @db.drop_collection(@coll.name), "drop of collection #{@coll.name} failed"
|
204
|
-
assert !@db.collection_names.include?(@coll_full_name)
|
205
|
-
@coll = nil
|
206
|
-
end
|
207
|
-
|
208
|
-
def test_collection_names
|
209
|
-
names = @db.collection_names
|
210
|
-
assert names.length >= 1
|
211
|
-
assert names.include?(@coll_full_name)
|
212
|
-
|
213
|
-
coll2 = @db.collection('test2')
|
214
|
-
coll2.insert('a' => 1) # collection not created until it's used
|
215
|
-
names = @db.collection_names
|
216
|
-
assert names.length >= 2
|
217
|
-
assert names.include?(@coll_full_name)
|
218
|
-
assert names.include?('ruby-mongo-test.test2')
|
219
|
-
ensure
|
220
|
-
@db.drop_collection('test2')
|
221
|
-
end
|
222
|
-
|
223
|
-
def test_collections_info
|
224
|
-
cursor = @db.collections_info
|
225
|
-
rows = cursor.to_a
|
226
|
-
assert rows.length >= 1
|
227
|
-
row = rows.detect { |r| r['name'] == @coll_full_name }
|
228
|
-
assert_not_nil row
|
229
|
-
assert_equal @coll.name, row['options']['create']
|
230
|
-
end
|
231
|
-
|
232
|
-
def test_collection_options
|
233
|
-
@db.drop_collection('foobar')
|
234
|
-
@db.strict = true
|
235
|
-
|
236
|
-
begin
|
237
|
-
coll = @db.create_collection('foobar', :capped => true, :size => 1024)
|
238
|
-
options = coll.options()
|
239
|
-
assert_equal 'foobar', options['create']
|
240
|
-
assert_equal true, options['capped']
|
241
|
-
assert_equal 1024, options['size']
|
242
|
-
rescue => ex
|
243
|
-
@db.drop_collection('foobar')
|
244
|
-
fail "did not expect exception \"#{ex}\""
|
245
|
-
end
|
246
|
-
end
|
247
|
-
|
248
|
-
def test_index_information
|
249
|
-
@db.create_index(@coll.name, 'index_name', ['a'])
|
250
|
-
list = @db.index_information(@coll.name)
|
251
|
-
assert_equal 1, list.length
|
252
|
-
|
253
|
-
info = list[0]
|
254
|
-
assert_equal 'index_name', info[:name]
|
255
|
-
assert_equal 1, info[:keys]['a']
|
256
|
-
end
|
257
|
-
|
258
|
-
def test_array
|
259
|
-
@coll << {'b' => [1, 2, 3]}
|
260
|
-
rows = @coll.find({}, {:fields => ['b']}).to_a
|
261
|
-
assert_equal 1, rows.length
|
262
|
-
assert_equal [1, 2, 3], rows[0]['b']
|
263
|
-
end
|
264
|
-
|
265
|
-
def test_regex
|
266
|
-
regex = /foobar/i
|
267
|
-
@coll << {'b' => regex}
|
268
|
-
rows = @coll.find({}, {:fields => ['b']}).to_a
|
269
|
-
assert_equal 1, rows.length
|
270
|
-
assert_equal regex, rows[0]['b']
|
271
|
-
end
|
272
|
-
|
273
|
-
def test_strict
|
274
|
-
assert !@db.strict?
|
275
|
-
@db.strict = true
|
276
|
-
assert @db.strict?
|
277
|
-
end
|
278
|
-
|
279
|
-
def test_strict_access_collection
|
280
|
-
@db.strict = true
|
281
|
-
begin
|
282
|
-
@db.collection('does-not-exist')
|
283
|
-
fail "expected exception"
|
284
|
-
rescue => ex
|
285
|
-
assert_equal "Collection does-not-exist doesn't exist. Currently in strict mode.", ex.to_s
|
286
|
-
ensure
|
287
|
-
@db.strict = false
|
288
|
-
@db.drop_collection('does-not-exist')
|
289
|
-
end
|
290
|
-
end
|
291
|
-
|
292
|
-
def test_strict_create_collection
|
293
|
-
@db.drop_collection('foobar')
|
294
|
-
@db.strict = true
|
295
|
-
|
296
|
-
begin
|
297
|
-
@db.create_collection('foobar')
|
298
|
-
assert true
|
299
|
-
rescue => ex
|
300
|
-
fail "did not expect exception \"#{ex}\""
|
301
|
-
end
|
302
|
-
|
303
|
-
# Now the collection exists. This time we should see an exception.
|
304
|
-
begin
|
305
|
-
@db.create_collection('foobar')
|
306
|
-
fail "expected exception"
|
307
|
-
rescue => ex
|
308
|
-
assert_equal "Collection foobar already exists. Currently in strict mode.", ex.to_s
|
309
|
-
ensure
|
310
|
-
@db.strict = false
|
311
|
-
@db.drop_collection('foobar')
|
312
|
-
end
|
313
|
-
end
|
314
|
-
|
315
|
-
def test_to_a
|
316
|
-
cursor = @coll.find()
|
317
|
-
rows = cursor.to_a
|
318
|
-
|
319
|
-
# Make sure we get back exactly the same array the next time we ask
|
320
|
-
rows2 = cursor.to_a
|
321
|
-
assert_same rows, rows2
|
322
|
-
|
323
|
-
# Make sure we can still iterate after calling to_a
|
324
|
-
rows_with_each = cursor.collect{|row| row}
|
325
|
-
assert_equal rows, rows_with_each
|
326
|
-
|
327
|
-
# Make sure we can iterate more than once after calling to_a
|
328
|
-
end
|
329
|
-
|
330
|
-
def test_to_a_after_each
|
331
|
-
cursor = @coll.find
|
332
|
-
cursor.each { |row| row }
|
333
|
-
begin
|
334
|
-
cursor.to_a
|
335
|
-
fail "expected \"can't call\" error"
|
336
|
-
rescue => ex
|
337
|
-
assert_equal "can't call Cursor#to_a after calling Cursor#each", ex.to_s
|
338
|
-
end
|
339
|
-
end
|
340
|
-
|
341
|
-
def test_ismaster
|
342
|
-
assert @db.master?
|
343
|
-
end
|
344
|
-
|
345
|
-
def test_master
|
346
|
-
assert_equal "#{@db.host}:#{@db.port}", @db.master
|
347
|
-
end
|
348
|
-
|
349
|
-
end
|