em-mongo 0.4.1 → 0.4.2
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/em-mongo/connection.rb +2 -2
- data/lib/em-mongo/cursor.rb +5 -2
- data/lib/em-mongo/database.rb +2 -2
- data/lib/em-mongo/prev.rb +3 -3
- data/lib/em-mongo/server_response.rb +7 -4
- data/spec/integration/collection_spec.rb +16 -16
- data/spec/integration/cursor_spec.rb +8 -8
- metadata +4 -43
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.2
|
data/lib/em-mongo/connection.rb
CHANGED
@@ -154,7 +154,7 @@ module EM::Mongo
|
|
154
154
|
|
155
155
|
def receive_data(data)
|
156
156
|
|
157
|
-
@buffer.append!(
|
157
|
+
@buffer.append!(data)
|
158
158
|
|
159
159
|
@buffer.rewind
|
160
160
|
while message_received?(@buffer)
|
@@ -165,7 +165,7 @@ module EM::Mongo
|
|
165
165
|
|
166
166
|
if @buffer.more?
|
167
167
|
remaining_bytes= @buffer.size-@buffer.position
|
168
|
-
@buffer = BSON::ByteBuffer.new(@buffer.
|
168
|
+
@buffer = BSON::ByteBuffer.new(@buffer.to_s[@buffer.position,remaining_bytes])
|
169
169
|
@buffer.rewind
|
170
170
|
else
|
171
171
|
@buffer.clear
|
data/lib/em-mongo/cursor.rb
CHANGED
@@ -299,7 +299,7 @@ module EM::Mongo
|
|
299
299
|
# efficient to retrieve documents as you need them by iterating over the cursor.
|
300
300
|
#
|
301
301
|
# @return [EM::Mongo::RequestResponse] Calls back with an array of documents.
|
302
|
-
def
|
302
|
+
def defer_as_a
|
303
303
|
response = RequestResponse.new
|
304
304
|
items = []
|
305
305
|
self.each do |doc,err|
|
@@ -314,6 +314,9 @@ module EM::Mongo
|
|
314
314
|
response
|
315
315
|
end
|
316
316
|
|
317
|
+
# XXX to_a is confusing but we will leave it for now
|
318
|
+
alias to_a defer_as_a
|
319
|
+
|
317
320
|
# Get the explain plan for this cursor.
|
318
321
|
#
|
319
322
|
# @return [EM::Mongo::RequestResponse] Calls back with a document containing the explain plan for this cursor.
|
@@ -534,4 +537,4 @@ module EM::Mongo
|
|
534
537
|
end
|
535
538
|
end
|
536
539
|
end
|
537
|
-
end
|
540
|
+
end
|
data/lib/em-mongo/database.rb
CHANGED
@@ -52,7 +52,7 @@ module EM::Mongo
|
|
52
52
|
# @return [EM::Mongo::RequestResponse]
|
53
53
|
def collection_names
|
54
54
|
response = RequestResponse.new
|
55
|
-
name_resp = collections_info.
|
55
|
+
name_resp = collections_info.defer_as_a
|
56
56
|
name_resp.callback do |docs|
|
57
57
|
names = docs.collect{ |doc| doc['name'] || '' }
|
58
58
|
names = names.delete_if {|name| name.index(self.name).nil? || name.index('$')}
|
@@ -200,7 +200,7 @@ module EM::Mongo
|
|
200
200
|
def index_information(collection_name)
|
201
201
|
response = RequestResponse.new
|
202
202
|
sel = {:ns => full_collection_name(collection_name)}
|
203
|
-
idx_resp = Cursor.new(self.collection(SYSTEM_INDEX_COLLECTION), :selector => sel).
|
203
|
+
idx_resp = Cursor.new(self.collection(SYSTEM_INDEX_COLLECTION), :selector => sel).defer_as_a
|
204
204
|
idx_resp.callback do |indexes|
|
205
205
|
info = indexes.inject({}) do |info, index|
|
206
206
|
info[index['name']] = index
|
data/lib/em-mongo/prev.rb
CHANGED
@@ -6,7 +6,7 @@ module EM
|
|
6
6
|
def find(selector={}, opts={}, &blk)
|
7
7
|
raise "find requires a block" if not block_given?
|
8
8
|
|
9
|
-
new_find(selector, opts).
|
9
|
+
new_find(selector, opts).defer_as_a.callback do |docs|
|
10
10
|
blk.call(docs)
|
11
11
|
end
|
12
12
|
end
|
@@ -38,7 +38,7 @@ module EM
|
|
38
38
|
|
39
39
|
def find(collection_name, skip, limit, order, query, fields, &blk)
|
40
40
|
db_name, col_name = db_and_col_name(collection_name)
|
41
|
-
db(db_name).collection(col_name).find(query, :skip=>skip,:limit=>limit,:order=>order,:fields=>fields).
|
41
|
+
db(db_name).collection(col_name).find(query, :skip=>skip,:limit=>limit,:order=>order,:fields=>fields).defer_as_a.callback do |docs|
|
42
42
|
yield docs if block_given?
|
43
43
|
end
|
44
44
|
end
|
@@ -50,4 +50,4 @@ module EM
|
|
50
50
|
|
51
51
|
end
|
52
52
|
end
|
53
|
-
end
|
53
|
+
end
|
@@ -21,12 +21,15 @@ module EM::Mongo
|
|
21
21
|
@number_returned = buffer.get_int
|
22
22
|
|
23
23
|
# Documents
|
24
|
-
|
24
|
+
pos = buffer.position
|
25
|
+
@docs = (1..@number_returned).map do
|
25
26
|
size= @connection.peek_size(buffer)
|
26
|
-
|
27
|
-
|
27
|
+
doc = BSON::BSON_CODER.deserialize(buffer.to_s[pos,size])
|
28
|
+
pos += size
|
29
|
+
buffer.position = pos
|
30
|
+
doc
|
28
31
|
end
|
29
32
|
end
|
30
33
|
|
31
34
|
end
|
32
|
-
end
|
35
|
+
end
|
@@ -32,7 +32,7 @@ describe EMMongo::Collection do
|
|
32
32
|
@conn, @coll = connection_and_collection
|
33
33
|
|
34
34
|
@coll.insert("hello" => 'world')
|
35
|
-
@coll.find({"hello" => "world"},{}).
|
35
|
+
@coll.find({"hello" => "world"},{}).defer_as_a.callback do |res|
|
36
36
|
res.size.should >= 1
|
37
37
|
res[0]["hello"].should == "world"
|
38
38
|
done
|
@@ -54,7 +54,7 @@ describe EMMongo::Collection do
|
|
54
54
|
@conn, @coll = connection_and_collection
|
55
55
|
|
56
56
|
@coll.insert('hello' => 'world')
|
57
|
-
@coll.find({:hello => "world"},{}).
|
57
|
+
@coll.find({:hello => "world"},{}).defer_as_a.callback do |res|
|
58
58
|
res.size.should >= 1
|
59
59
|
res[0]["hello"].should == "world"
|
60
60
|
done
|
@@ -65,7 +65,7 @@ describe EMMongo::Collection do
|
|
65
65
|
@conn, @coll = connection_and_collection
|
66
66
|
|
67
67
|
id = @coll.insert('hello' => 'world')
|
68
|
-
@coll.find({:_id => id},{}).
|
68
|
+
@coll.find({:_id => id},{}).defer_as_a.callback do |res|
|
69
69
|
res.size.should >= 1
|
70
70
|
res[0]['hello'].should == "world"
|
71
71
|
done
|
@@ -77,7 +77,7 @@ describe EMMongo::Collection do
|
|
77
77
|
|
78
78
|
@coll.insert('one' => 'one')
|
79
79
|
@coll.insert('two' => 'two')
|
80
|
-
@coll.find.
|
80
|
+
@coll.find.defer_as_a.callback do |res|
|
81
81
|
res.size.should >= 2
|
82
82
|
done
|
83
83
|
end
|
@@ -90,14 +90,14 @@ describe EMMongo::Collection do
|
|
90
90
|
@coll.insert(:name => 'three', :position => 2)
|
91
91
|
@coll.insert(:name => 'two', :position => 1)
|
92
92
|
|
93
|
-
@coll.find({}, {:order => 'position'}).
|
93
|
+
@coll.find({}, {:order => 'position'}).defer_as_a.callback do |res|
|
94
94
|
res[0]["name"].should == 'one'
|
95
95
|
res[1]["name"].should == 'two'
|
96
96
|
res[2]["name"].should == 'three'
|
97
97
|
done
|
98
98
|
end
|
99
99
|
|
100
|
-
@coll.find({}, {:order => [:position, :desc]}).
|
100
|
+
@coll.find({}, {:order => [:position, :desc]}).defer_as_a.callback do |res|
|
101
101
|
res[0]["name"].should == 'three'
|
102
102
|
res[1]["name"].should == 'two'
|
103
103
|
res[2]["name"].should == 'one'
|
@@ -141,7 +141,7 @@ describe EMMongo::Collection do
|
|
141
141
|
@coll.insert({'num' => num, 'word' => word})
|
142
142
|
end
|
143
143
|
|
144
|
-
@coll.find({'num' => {'$in' => [1,3,5]}}).
|
144
|
+
@coll.find({'num' => {'$in' => [1,3,5]}}).defer_as_a.callback do |res|
|
145
145
|
res.size.should == 3
|
146
146
|
res.map{|r| r['num'] }.sort.should == [1,3,5]
|
147
147
|
done
|
@@ -155,7 +155,7 @@ describe EMMongo::Collection do
|
|
155
155
|
@coll.insert('num' => num, 'word' => word)
|
156
156
|
end
|
157
157
|
|
158
|
-
@coll.find({'num' => {'$gt' => 3}}).
|
158
|
+
@coll.find({'num' => {'$gt' => 3}}).defer_as_a.callback do |res|
|
159
159
|
res.size.should == 6
|
160
160
|
res.map{|r| r['num'] }.sort.should == [4,5,6,7,8,9]
|
161
161
|
done
|
@@ -202,7 +202,7 @@ describe EMMongo::Collection do
|
|
202
202
|
|
203
203
|
t = Time.now.utc.freeze
|
204
204
|
@coll.insert('date' => t)
|
205
|
-
@coll.find.
|
205
|
+
@coll.find.defer_as_a.callback do |res|
|
206
206
|
res[0]['date'].to_s.should == t.to_s
|
207
207
|
done
|
208
208
|
end
|
@@ -222,7 +222,7 @@ describe EMMongo::Collection do
|
|
222
222
|
'regex' => /abc$/ix
|
223
223
|
}
|
224
224
|
retobj = @coll.insert(obj)
|
225
|
-
@coll.find({:_id => obj[:_id]}).
|
225
|
+
@coll.find({:_id => obj[:_id]}).defer_as_a.callback do |ret|
|
226
226
|
ret.size.should == 1
|
227
227
|
ret[0].each_key do |key|
|
228
228
|
next if key == '_id'
|
@@ -262,7 +262,7 @@ describe EMMongo::Collection do
|
|
262
262
|
|
263
263
|
id = @coll.insert('hello' => 'world')
|
264
264
|
@coll.update({'hello' => 'world'}, {'hello' => 'newworld'})
|
265
|
-
@coll.find({:_id => id},{}).
|
265
|
+
@coll.find({:_id => id},{}).defer_as_a.callback do |res|
|
266
266
|
res[0]['hello'].should == 'newworld'
|
267
267
|
done
|
268
268
|
end
|
@@ -273,7 +273,7 @@ describe EMMongo::Collection do
|
|
273
273
|
|
274
274
|
id = @coll.insert('hello' => 'world')
|
275
275
|
@coll.update({'hello' => 'world'}, {'$inc' => {'count' => 1}})
|
276
|
-
@coll.find({:_id => id},{}).
|
276
|
+
@coll.find({:_id => id},{}).defer_as_a.callback do |res|
|
277
277
|
res.first['hello'].should == 'world'
|
278
278
|
res.first['count'].should == 1
|
279
279
|
done
|
@@ -301,7 +301,7 @@ describe EMMongo::Collection do
|
|
301
301
|
it "should insert a record when no id is present" do
|
302
302
|
@conn, @coll = connection_and_collection
|
303
303
|
id = @coll.save("x" => 1)
|
304
|
-
@coll.find("x" => 1).
|
304
|
+
@coll.find("x" => 1).defer_as_a.callback do |result|
|
305
305
|
result[0]["_id"].should == id
|
306
306
|
done
|
307
307
|
end
|
@@ -313,7 +313,7 @@ describe EMMongo::Collection do
|
|
313
313
|
id = @coll.save(doc)
|
314
314
|
doc["x"] = 2
|
315
315
|
@coll.save(doc).should be_true
|
316
|
-
@coll.find().
|
316
|
+
@coll.find().defer_as_a.callback do |result|
|
317
317
|
result.count.should == 1
|
318
318
|
result[0]["x"].should == 2
|
319
319
|
done
|
@@ -342,7 +342,7 @@ describe EMMongo::Collection do
|
|
342
342
|
|
343
343
|
id = @coll.insert('hello' => 'world')
|
344
344
|
@coll.remove(:_id => id)
|
345
|
-
@coll.find({'hello' => "world"}).
|
345
|
+
@coll.find({'hello' => "world"}).defer_as_a.callback do |res|
|
346
346
|
res.size.should == 0
|
347
347
|
done
|
348
348
|
end
|
@@ -354,7 +354,7 @@ describe EMMongo::Collection do
|
|
354
354
|
@coll.insert('one' => 'one')
|
355
355
|
@coll.insert('two' => 'two')
|
356
356
|
@coll.remove
|
357
|
-
@coll.find.
|
357
|
+
@coll.find.defer_as_a.callback do |res|
|
358
358
|
res.size.should == 0
|
359
359
|
done
|
360
360
|
end
|
@@ -34,7 +34,7 @@ describe EMMongo::Cursor do
|
|
34
34
|
@coll.save(all[-1])
|
35
35
|
end
|
36
36
|
|
37
|
-
cursor.limit(5).skip(3).sort("x",1).
|
37
|
+
cursor.limit(5).skip(3).sort("x",1).defer_as_a.callback do |results|
|
38
38
|
all.slice(3...8).each_with_index do |item,idx|
|
39
39
|
results[idx]["x"].should == item["x"]
|
40
40
|
end
|
@@ -49,7 +49,7 @@ describe EMMongo::Cursor do
|
|
49
49
|
1501.times do |i|
|
50
50
|
@coll.insert(i.to_s => i.to_s)
|
51
51
|
end
|
52
|
-
cursor.limit(1500).
|
52
|
+
cursor.limit(1500).defer_as_a.callback do |docs|
|
53
53
|
docs.length.should == 1500
|
54
54
|
done
|
55
55
|
end
|
@@ -80,12 +80,12 @@ describe EMMongo::Cursor do
|
|
80
80
|
100.times do |i|
|
81
81
|
@coll.save("x" => 1)
|
82
82
|
end
|
83
|
-
cursor.
|
83
|
+
cursor.defer_as_a.callback do |r1|
|
84
84
|
r1.length.should == 100
|
85
|
-
cursor.
|
85
|
+
cursor.defer_as_a.callback do |r2|
|
86
86
|
r2.length.should == 0
|
87
87
|
cursor.rewind!
|
88
|
-
cursor.
|
88
|
+
cursor.defer_as_a.callback do |r3|
|
89
89
|
r3.length.should == 100
|
90
90
|
done
|
91
91
|
end
|
@@ -101,7 +101,7 @@ describe EMMongo::Cursor do
|
|
101
101
|
1000.times do |i|
|
102
102
|
@coll.save("x" => 1)
|
103
103
|
end
|
104
|
-
cursor.
|
104
|
+
cursor.defer_as_a.callback do |results|
|
105
105
|
results.length.should == 1000
|
106
106
|
done
|
107
107
|
end
|
@@ -290,14 +290,14 @@ describe EMMongo::Cursor do
|
|
290
290
|
end
|
291
291
|
end
|
292
292
|
|
293
|
-
describe "
|
293
|
+
describe "defer_as_a" do
|
294
294
|
it "should return an array of all documents in a query" do
|
295
295
|
@conn, @coll = connection_and_collection
|
296
296
|
5.times do |i|
|
297
297
|
@coll.insert("x" => i)
|
298
298
|
end
|
299
299
|
cursor = EM::Mongo::Cursor.new(@coll).sort("x",1)
|
300
|
-
cursor.
|
300
|
+
cursor.defer_as_a.callback do |docs|
|
301
301
|
docs.length.should == 5
|
302
302
|
5.times do |i|
|
303
303
|
docs[i]["x"].should == i
|
metadata
CHANGED
@@ -1,13 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: em-mongo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 4
|
9
|
-
- 1
|
10
|
-
version: 0.4.1
|
4
|
+
prerelease:
|
5
|
+
version: 0.4.2
|
11
6
|
platform: ruby
|
12
7
|
authors:
|
13
8
|
- bcg
|
@@ -16,8 +11,7 @@ autorequire:
|
|
16
11
|
bindir: bin
|
17
12
|
cert_chain: []
|
18
13
|
|
19
|
-
date: 2010-12-01 00:00:00
|
20
|
-
default_executable:
|
14
|
+
date: 2010-12-01 00:00:00 Z
|
21
15
|
dependencies:
|
22
16
|
- !ruby/object:Gem::Dependency
|
23
17
|
name: eventmachine
|
@@ -27,11 +21,6 @@ dependencies:
|
|
27
21
|
requirements:
|
28
22
|
- - ">="
|
29
23
|
- !ruby/object:Gem::Version
|
30
|
-
hash: 59
|
31
|
-
segments:
|
32
|
-
- 0
|
33
|
-
- 12
|
34
|
-
- 10
|
35
24
|
version: 0.12.10
|
36
25
|
type: :runtime
|
37
26
|
version_requirements: *id001
|
@@ -43,30 +32,9 @@ dependencies:
|
|
43
32
|
requirements:
|
44
33
|
- - ">="
|
45
34
|
- !ruby/object:Gem::Version
|
46
|
-
hash: 21
|
47
|
-
segments:
|
48
|
-
- 1
|
49
|
-
- 1
|
50
|
-
- 3
|
51
35
|
version: 1.1.3
|
52
36
|
type: :runtime
|
53
37
|
version_requirements: *id002
|
54
|
-
- !ruby/object:Gem::Dependency
|
55
|
-
name: bson_ext
|
56
|
-
prerelease: false
|
57
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
58
|
-
none: false
|
59
|
-
requirements:
|
60
|
-
- - ">="
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
hash: 21
|
63
|
-
segments:
|
64
|
-
- 1
|
65
|
-
- 1
|
66
|
-
- 3
|
67
|
-
version: 1.1.3
|
68
|
-
type: :runtime
|
69
|
-
version_requirements: *id003
|
70
38
|
description: EventMachine driver for MongoDB.
|
71
39
|
email: brenden.grace@gmail.com
|
72
40
|
executables: []
|
@@ -94,7 +62,6 @@ files:
|
|
94
62
|
- spec/integration/cursor_spec.rb
|
95
63
|
- spec/integration/database_spec.rb
|
96
64
|
- spec/integration/request_response_spec.rb
|
97
|
-
has_rdoc: true
|
98
65
|
homepage: http://github.com/bcg/em-mongo
|
99
66
|
licenses: []
|
100
67
|
|
@@ -108,23 +75,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
108
75
|
requirements:
|
109
76
|
- - ">="
|
110
77
|
- !ruby/object:Gem::Version
|
111
|
-
hash: 3
|
112
|
-
segments:
|
113
|
-
- 0
|
114
78
|
version: "0"
|
115
79
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
116
80
|
none: false
|
117
81
|
requirements:
|
118
82
|
- - ">="
|
119
83
|
- !ruby/object:Gem::Version
|
120
|
-
hash: 3
|
121
|
-
segments:
|
122
|
-
- 0
|
123
84
|
version: "0"
|
124
85
|
requirements: []
|
125
86
|
|
126
87
|
rubyforge_project: em-mongo
|
127
|
-
rubygems_version: 1.
|
88
|
+
rubygems_version: 1.8.11
|
128
89
|
signing_key:
|
129
90
|
specification_version: 3
|
130
91
|
summary: An EventMachine driver for MongoDB.
|