monga 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. data/.gitignore +1 -0
  2. data/.travis.yml +1 -0
  3. data/README.md +59 -3
  4. data/lib/monga/client.rb +51 -6
  5. data/lib/monga/clients/master_slave_client.rb +0 -5
  6. data/lib/monga/clients/replica_set_client.rb +32 -71
  7. data/lib/monga/clients/single_instance_client.rb +53 -0
  8. data/lib/monga/collection.rb +102 -41
  9. data/lib/monga/connection.rb +38 -13
  10. data/lib/monga/connection_pool.rb +6 -17
  11. data/lib/monga/connections/buffer.rb +33 -0
  12. data/lib/monga/connections/em_connection.rb +25 -56
  13. data/lib/monga/connections/em_proxy_connection.rb +80 -0
  14. data/lib/monga/connections/fibered_connection.rb +26 -0
  15. data/lib/monga/connections/fibered_proxy_connection.rb +23 -0
  16. data/lib/monga/connections/proxy_connection.rb +4 -0
  17. data/lib/monga/connections/tcp_connection.rb +57 -0
  18. data/lib/monga/cursor.rb +197 -95
  19. data/lib/monga/database.rb +175 -60
  20. data/lib/monga/{requests → protocol}/delete.rb +1 -2
  21. data/lib/monga/{requests → protocol}/get_more.rb +1 -1
  22. data/lib/monga/{requests → protocol}/insert.rb +1 -2
  23. data/lib/monga/{requests → protocol}/kill_cursors.rb +1 -1
  24. data/lib/monga/{requests → protocol}/query.rb +3 -3
  25. data/lib/monga/{requests → protocol}/update.rb +1 -1
  26. data/lib/monga/request.rb +27 -23
  27. data/lib/monga/utils/constants.rb +5 -0
  28. data/lib/monga/utils/exceptions.rb +11 -0
  29. data/lib/monga.rb +19 -11
  30. data/monga.gemspec +2 -2
  31. data/spec/helpers/mongodb.rb +115 -38
  32. data/spec/monga/block/collection_spec.rb +172 -0
  33. data/spec/monga/block/cursor_spec.rb +160 -0
  34. data/spec/monga/block/database_spec.rb +80 -0
  35. data/spec/monga/block/single_instance_client_spec.rb +31 -0
  36. data/spec/monga/em/collection_spec.rb +308 -0
  37. data/spec/monga/em/cursor_spec.rb +256 -0
  38. data/spec/monga/em/database_spec.rb +140 -0
  39. data/spec/monga/em/replica_set_client_spec.rb +86 -0
  40. data/spec/monga/em/single_instance_client_spec.rb +28 -0
  41. data/spec/monga/sync/collection_spec.rb +247 -0
  42. data/spec/monga/sync/cursor_spec.rb +211 -0
  43. data/spec/monga/sync/database_spec.rb +110 -0
  44. data/spec/monga/sync/replica_set_client_spec.rb +54 -0
  45. data/spec/monga/sync/single_instance_client_spec.rb +25 -0
  46. data/spec/spec_helper.rb +2 -20
  47. metadata +50 -38
  48. data/lib/monga/clients/client.rb +0 -24
  49. data/lib/monga/connections/primary.rb +0 -46
  50. data/lib/monga/connections/secondary.rb +0 -13
  51. data/lib/monga/exceptions.rb +0 -9
  52. data/lib/monga/miner.rb +0 -72
  53. data/lib/monga/response.rb +0 -11
  54. data/spec/helpers/truncate.rb +0 -15
  55. data/spec/monga/collection_spec.rb +0 -448
  56. data/spec/monga/connection_pool_spec.rb +0 -50
  57. data/spec/monga/connection_spec.rb +0 -64
  58. data/spec/monga/cursor_spec.rb +0 -186
  59. data/spec/monga/database_spec.rb +0 -67
  60. data/spec/monga/replica_set_client_spec.rb +0 -46
  61. data/spec/monga/requests/delete_spec.rb +0 -0
  62. data/spec/monga/requests/insert_spec.rb +0 -0
  63. data/spec/monga/requests/query_spec.rb +0 -28
data/lib/monga/cursor.rb CHANGED
@@ -1,69 +1,63 @@
1
1
  module Monga
2
- class Cursor < EM::DefaultDeferrable
2
+ class Cursor
3
3
  attr_reader :cursor_id
4
4
 
5
+ def self.create(connection, db_name, collection_name, options = {}, flags = {})
6
+ if connection.type == :em
7
+ CallbackCursor.new(connection, db_name, collection_name, options, flags)
8
+ else
9
+ BlockCursor.new(connection, db_name, collection_name, options, flags)
10
+ end
11
+ end
12
+
5
13
  CURSORS = {}
6
14
  CLOSED_CURSOR = 0
7
15
  # Batch kill cursors marked to be killed each CLOSE_TIMEOUT seconds
8
16
  CLOSE_TIMEOUT = 1
9
17
 
10
- def initialize(db, collection_name, options = {}, flags = {})
11
- @keep_alive = true if flags.delete :keep_alive
12
-
13
- @db = db
14
- @connection = @db.client.aquire_connection
18
+ def initialize(connection, db_name, collection_name, options = {}, flags = {})
19
+ @connection = connection
20
+ @db_name = db_name
15
21
  @collection_name = collection_name
16
22
  @options = options
17
23
  @options.merge!(flags)
18
24
 
19
25
  @fetched_docs = []
20
26
  @count = 0
21
- @total_count = 0
22
- @limit = @options[:limit] ||= 0
23
- @batch_size = @options[:batch_size]
27
+
28
+ @options[:limit] ||= 0
24
29
  end
25
30
 
26
- def next_document
27
- Monga::Response.surround do |resp|
28
- if doc = @fetched_docs.shift
29
- resp.succeed doc
30
- else
31
- req = next_batch
32
- req.callback do |docs|
33
- @fetched_docs = docs
34
- if doc = @fetched_docs.shift
35
- @count =+ 1
36
- resp.succeed doc
37
- end
38
- end
39
- req.errback{ |err| resp.fail err }
40
- end
41
- end
31
+ def flag(opt)
32
+ @options.merge!(opt) and self
42
33
  end
43
34
 
44
- def each_doc(&blk)
45
- if more?
46
- req = next_batch
47
- req.callback do |batch|
48
- if batch.any?
49
- batch.each do |doc|
50
- @count += 1
51
- blk.call(doc)
52
- end
53
- each_doc(&blk)
54
- else
55
- succeed
56
- end
57
- end
58
- req.errback{ |err| fail err }
59
- else
60
- succeed
61
- end
62
- self
35
+ def limit(val)
36
+ @options[:limit] = val and self
37
+ end
38
+
39
+ def skip(val)
40
+ @options[:skip] = val and self
41
+ end
42
+
43
+ def batch_size(val)
44
+ @options[:batch_size] = val and self
45
+ end
46
+
47
+ def explain
48
+ @options[:explain] = true and self
49
+ end
50
+
51
+ def hint
52
+ @options[:hint] = true and self
53
+ end
54
+
55
+ def sort(val)
56
+ @options[:sort] = val and self
63
57
  end
64
58
 
65
59
  def kill
66
- return unless @cursor_id > 0
60
+ return if @cursor_id == CLOSED_CURSOR
67
61
  self.class.kill_cursors(@connection, @cursor_id)
68
62
  CURSORS.delete @cursor_id
69
63
  @cursor_id = 0
@@ -75,7 +69,7 @@ module Monga
75
69
  if cursor_ids.any?
76
70
  Monga.logger.debug("Following cursors are going to be deleted: #{cursor_ids}")
77
71
  kill_cursors(conn, cursor_ids)
78
- CURSORS.delete_if{|k,v| cursor_ids.include?(k) }
72
+ cursor_ids.each{ |id| CURSORS.delete id }
79
73
  end
80
74
  end
81
75
 
@@ -85,56 +79,36 @@ module Monga
85
79
  @cursor_id = 0
86
80
  end
87
81
 
88
- # Cursor is alive and we need more minerals
89
- def more?
90
- alive? && !satisfied?
91
- end
92
-
93
82
  private
94
83
 
95
- def get_more(batch_size)
96
- Monga::Response.surround do |resp|
97
- req = if @cursor_id
98
- opts = { cursor_id: @cursor_id, batch_size: batch_size }
99
- Monga::Requests::GetMore.new(@db, @collection_name, opts).callback_perform
84
+ def get_more(batch_size, &block)
85
+ blk = proc do |err, data|
86
+ if err
87
+ mark_to_kill
88
+ block.call(err)
100
89
  else
101
- Monga::Requests::Query.new(@db, @collection_name, @options).callback_perform
102
- end
103
- req.callback do |data|
104
90
  @cursor_id = data[5]
105
91
  fetched_docs = data.last
106
- @total_count += fetched_docs.count
107
- mark_to_kill unless cursor_more?
108
-
109
- resp.succeed fetched_docs
110
- end
111
- req.errback do |err|
112
- mark_to_kill
113
- resp.fail err
92
+ @count += fetched_docs.count
93
+ mark_to_kill unless more?
94
+ block.call(nil, fetched_docs, more?)
114
95
  end
115
96
  end
116
- end
117
-
118
- def next_batch
119
- Monga::Response.surround do |resp|
120
- if more?
121
- batch_size = get_batch_size
122
- req = get_more(batch_size)
123
- req.callback{ |res| resp.succeed res }
124
- req.errback{ |err| resp.fail err }
97
+ if @cursor_id
98
+ if @cursor_id == CLOSED_CURSOR
99
+ err = Monga::Exceptions::ClosedCursor.new "You are trying to use closed cursor"
100
+ block.call(err)
125
101
  else
126
- mark_to_kill
127
- if !alive?
128
- resp.fail Monga::Exceptions::CursorIsClosed.new("Cursor is already closed. Check `cursor.more?` before calling cursor")
129
- elsif satisfied?
130
- resp.fail Monga::Exceptions::CursorLimit.new("You've already fetched #{@limit} docs you asked. Check `cursor.more?` before calling cursor")
131
- end
102
+ opts = @options.merge(cursor_id: @cursor_id, batch_size: batch_size)
103
+ Monga::Protocol::GetMore.new(@connection, @db_name, @collection_name, opts).callback_perform(&blk)
132
104
  end
105
+ else
106
+ Monga::Protocol::Query.new(@connection, @db_name, @collection_name, @options).callback_perform(&blk)
133
107
  end
134
108
  end
135
109
 
136
- def cursor_more?
137
- alive? && !cursor_satisfied?
110
+ def more?
111
+ alive? && !satisfied?
138
112
  end
139
113
 
140
114
  # If cursor_id is not setted, or if isn't CLOSED_CURSOR - cursor is alive
@@ -146,30 +120,158 @@ module Monga
146
120
  # we will be satisfied when we will get limit amount of documents.
147
121
  # Otherwise we are not satisfied untill crsor is alive
148
122
  def satisfied?
149
- @limit > 0 && @count >= @limit
150
- end
151
-
152
- def cursor_satisfied?
153
- @limit > 0 && @total_count >= @limit
123
+ @options[:limit] > 0 && @count >= @options[:limit]
154
124
  end
155
125
 
156
126
  # How many docs should be returned
157
127
  def rest
158
- @limit - @count if @limit > 0
128
+ @options[:limit] - @count if @options[:limit] > 0
159
129
  end
160
130
 
161
131
  # Cursor will get exact amount of docs as user passed with `limit` opr
162
132
  def get_batch_size
163
- if @limit > 0 && @batch_size
164
- rest < @batch_size ? rest : @batch_size
165
- else @batch_size
166
- @batch_size
133
+ if @options[:limit] > 0 && @options[:batch_size]
134
+ rest < @options[:batch_size] ? rest : @options[:batch_size]
135
+ else @options[:batch_size]
136
+ @options[:batch_size]
167
137
  end
168
138
  end
169
139
 
170
140
  def self.kill_cursors(connection, cursor_ids)
171
- Monga::Requests::KillCursors.new(connection, cursor_ids: [*cursor_ids]).perform
141
+ Monga::Protocol::KillCursors.new(connection, cursor_ids: [*cursor_ids]).perform
142
+ end
143
+ end
144
+
145
+ class CallbackCursor < Cursor
146
+ def next_batch
147
+ get_more(get_batch_size) do |err, batch, more|
148
+ if block_given?
149
+ yield(err, batch, more)
150
+ else
151
+ err ? raise(err) : [batch, more]
152
+ end
153
+ end
154
+ end
155
+
156
+ def each_batch(&blk)
157
+ iterator = Proc.new do
158
+ next_batch do |err, batch, more|
159
+ more ? blk.call(err, batch, iterator) : blk.call(err, batch)
160
+ end
161
+ end
162
+ class << iterator
163
+ alias :next :call
164
+ end
165
+ iterator.next
166
+ end
167
+
168
+ def next_doc
169
+ if doc = @fetched_docs.shift
170
+ block_given? ? yield(nil, doc, more?) : [doc, more?]
171
+ else
172
+ get_more(get_batch_size) do |err, batch, more|
173
+ if err
174
+ block_given? ? yield(err, nil, false) : raise(err)
175
+ else
176
+ @fetched_docs = batch
177
+ doc = @fetched_docs.shift
178
+ m = more || @fetched_docs.any?
179
+ block_given? ? yield(err, doc, m) : [doc, m]
180
+ end
181
+ end
182
+ end
183
+ end
184
+ alias :next_document :next_doc
185
+
186
+ def each_doc(&blk)
187
+ iterator = Proc.new do
188
+ next_doc do |err, doc, more|
189
+ more ? blk.call(err, doc, iterator) : blk.call(err, doc)
190
+ end
191
+ end
192
+ class << iterator
193
+ alias :next :call
194
+ end
195
+ iterator.next
196
+ end
197
+ alias :each_document :each_doc
198
+
199
+ def all
200
+ documents = []
201
+ each_batch do |err, batch, iter|
202
+ if err
203
+ block_given? ? yield(err) : raise(err)
204
+ else
205
+ documents += batch
206
+ if iter
207
+ iter.next
208
+ else
209
+ block_given? ? yield(nil, documents) : documents
210
+ end
211
+ end
212
+ end
172
213
  end
173
214
 
215
+ def first
216
+ limit(1).all do |err, resp|
217
+ if err
218
+ block_given? ? yield(err) : raise(err)
219
+ else
220
+ block_given? ? yield(nil, resp.first) : resp.first
221
+ end
222
+ end
223
+ end
224
+ end
225
+
226
+ class BlockCursor < Cursor
227
+ def next_batch
228
+ get_more(get_batch_size) do |err, batch, more|
229
+ raise(err) if err
230
+ return [batch, more]
231
+ end
232
+ end
233
+
234
+ def each_batch(&blk)
235
+ begin
236
+ batch, more = next_batch
237
+ yield batch
238
+ end while more
239
+ end
240
+
241
+ def next_doc
242
+ if doc = @fetched_docs.shift
243
+ [doc, more?]
244
+ else
245
+ get_more(get_batch_size) do |err, batch, more|
246
+ raise(err) if err
247
+ @fetched_docs = batch
248
+ doc = @fetched_docs.shift
249
+ m = more || @fetched_docs.any?
250
+ return [doc, m]
251
+ end
252
+ end
253
+ end
254
+ alias :next_document :next_doc
255
+
256
+ def each_doc
257
+ begin
258
+ doc, more = next_doc
259
+ yield doc
260
+ end while more
261
+ end
262
+ alias :each_document :each_doc
263
+
264
+ def all
265
+ documents = []
266
+ each_batch do |batch|
267
+ documents += batch
268
+ end
269
+ documents
270
+ end
271
+
272
+ def first
273
+ resp = limit(1).all
274
+ resp.first
275
+ end
174
276
  end
175
277
  end
@@ -7,90 +7,205 @@ module Monga
7
7
  @name = name
8
8
  end
9
9
 
10
- def [](collection_name)
10
+ # Choose collection to work
11
+ #
12
+ # client = Monga:::Client.new
13
+ # db = client.get_db("dbTest")
14
+ # collection = db.get_collection("testCollection")
15
+ # # same as
16
+ # collection = db["testCollection"]
17
+ #
18
+ def get_collection(collection_name)
11
19
  Monga::Collection.new(self, collection_name)
12
20
  end
21
+ alias :[] :get_collection
13
22
 
14
- def cmd(cmd, opts={})
15
- options = {}
16
- options[:query] = cmd
17
- options.merge! opts
18
- Monga::Miner.new(self, "$cmd", options).limit(1)
23
+ # Run some command
24
+ #
25
+ # cmd = { getLastError: 1 }
26
+ # db.cmd(cmd){ |err, resp| ... }
27
+ #
28
+ def cmd(cmd, resp_blk = nil, &ret_blk)
29
+ if resp_blk
30
+ run_cmd(cmd, ret_blk, &resp_blk)
31
+ else
32
+ run_cmd(cmd, ret_blk)
33
+ end
19
34
  end
20
35
 
21
- def eval(js)
22
- with_response do
23
- cmd(eval: js)
24
- end
36
+ # Evaluate some raw javascript
37
+ #
38
+ # db.eval("return('Hello World!')") do |err, resp|
39
+ # # processing
40
+ # end
41
+ #
42
+ def eval(js, &blk)
43
+ cmd = {}
44
+ cmd[:eval] = js
45
+ run_cmd(cmd, blk)
25
46
  end
26
47
 
27
- # Be carefull with using get_last_error with connection pool.
28
- # In most cases you need to use #safe methods
29
- # and don't access to #get_last_error directky
30
- def get_last_error
31
- with_response do
32
- cmd(getLastError: 1)
33
- end
48
+ # You should be cearfull with this method 'cause it is importaint to know
49
+ # in wich connection you are trying to get last error information.
50
+ # So be happy to use safe_* methods and it will choose right connection for you.
51
+ # Or, if you really want to do it mannually:
52
+ #
53
+ # request = collection.insert({ title: "Test" })
54
+ # conn = request.connection
55
+ # db.get_last_error(conn){ |err, resp| ... }
56
+ # db.get_last_error(conn){ |err, resp| ... }
57
+ # # you should pass following options:
58
+ # db.get_last_error(
59
+ # conn,
60
+ # j: true,
61
+ # w: 2,
62
+ # fsync: true,
63
+ # wtimout: 100){ |err, resp| ... }
64
+ #
65
+ def get_last_error(connection, opts = {}, &blk)
66
+ raise_last_error(connection, opts, &blk)
67
+ rescue => e
68
+ return e
34
69
  end
35
70
 
36
- def drop_collection(collection_name)
37
- with_response do
38
- cmd(drop: collection_name)
39
- end
71
+ # Instead of get_last_eror this one will actually raise it.
72
+ # It is usefull for safe_* methods who should raise an error if something goes wrong
73
+ #
74
+ def raise_last_error(connection, opts = {}, &blk)
75
+ cmd = {}
76
+ cmd[:getLastError] = 1
77
+ cmd[:connection] = connection
78
+ cmd.merge!(opts)
79
+ run_cmd(cmd, blk)
40
80
  end
41
81
 
42
- def create_collection(collection_name, opts = {})
43
- with_response do
44
- cmd({create: collection_name}.merge(opts))
45
- end
82
+ # Obviously dropping collection
83
+ # There is collection#drop helper exists
84
+ #
85
+ # db.drop_collection("testCollection"){ |err, resp| ... }
86
+ # # same as
87
+ # collection = db["testCollection"]
88
+ # collection.drop{ |err, resp| ... }
89
+ #
90
+ def drop_collection(collection_name, &blk)
91
+ cmd = {}
92
+ cmd[:drop] = collection_name
93
+ run_cmd(cmd, blk)
46
94
  end
47
95
 
48
- def count(collection_name)
49
- Monga::Response.surround do |resp|
50
- req = with_response do
51
- cmd(count: collection_name)
52
- end
53
- req.callback do |data|
54
- cnt = data.first["n"].to_i
55
- resp.succeed cnt
56
- end
57
- req.errback{ |err| resp.fail err }
96
+ # Create collection.
97
+ #
98
+ # db.create_collection("myCollection"){ |err, resp| ... }
99
+ # db.create_collection("myCappedCollection", capped: true, size: 1024*10){ |err, resp| ... }
100
+ #
101
+ def create_collection(collection_name, opts = {}, &blk)
102
+ cmd = {}
103
+ cmd[:create] = collection_name
104
+ cmd.merge!(opts)
105
+ run_cmd(cmd, blk)
106
+ end
107
+
108
+ # Counts amount of documents in collection
109
+ #
110
+ # db.count("myCollection"){ |err, cnt| ... }
111
+ # # same as
112
+ # collection = db["myCollection"]
113
+ # collection.count{ |err, cnt| ... }
114
+ #
115
+ def count(collection_name, opts = {}, &blk)
116
+ cmd = {}
117
+ cmd[:count] = collection_name
118
+ cmd.merge!(opts)
119
+ run_cmd(cmd, blk) do |resp|
120
+ resp["n"].to_i
58
121
  end
59
122
  end
60
123
 
61
- def drop_indexes(collection_name, indexes)
62
- with_response do
63
- cmd(dropIndexes: collection_name, index: indexes)
124
+ # Drop choosen indexes.
125
+ # There is collection#drop_index and collection#drop_indexes methods available
126
+ #
127
+ # db.drop_indexes("myCollection", { title: 1 })
128
+ # db.drop_indexes("myCollection", [{ title: 1 }, { author: 1 }])
129
+ # # drop all indexes
130
+ # db.drop_indexes("myCollection", "*")
131
+ # # same as
132
+ # collection = db["myCollection"]
133
+ # collection.drop_index(title: 1)
134
+ # # drop all indexes
135
+ # collection.drop_indexes
136
+ #
137
+ def drop_indexes(collection_name, indexes, &blk)
138
+ cmd = {}
139
+ cmd[:dropIndexes] = collection_name
140
+ cmd[:index] = indexes
141
+ run_cmd(cmd, blk)
142
+ end
143
+
144
+ def map_reduce
145
+
146
+ end
147
+
148
+ def aggregate
149
+
150
+ end
151
+
152
+ # Just helper to show all list of collections
153
+ #
154
+ # db.list_collections{ |err, list| ... }
155
+ #
156
+ def list_collections(&blk)
157
+ eval("db.getCollectionNames()", &blk)
158
+ end
159
+
160
+ private
161
+
162
+ # Underlying command sending
163
+ #
164
+ def run_cmd(cmd, ret_blk, &resp_blk)
165
+ connection = cmd.delete :connection
166
+ connection ||= @client.aquire_connection
167
+
168
+ options = {}
169
+ options[:query] = cmd
170
+
171
+ Monga::CallbackCursor.new(connection, name, "$cmd", options).first do |err, resp|
172
+ res = make_response(err, resp, ret_blk, resp_blk)
173
+ return res unless ret_blk
64
174
  end
65
175
  end
66
176
 
67
- # Just helper
68
- def list_collections
69
- Monga::Response.surround do |resp|
70
- req = eval("db.getCollectionNames()")
71
- req.callback do |data|
72
- resp.succeed(data.first["retval"])
177
+ # Helper to choose how to return result.
178
+ # If callback is provided it will be passed there.
179
+ # Otherwise error will be raised and result will be returned with a `return`
180
+ #
181
+ def make_response(err, resp, ret_blk, resp_blk)
182
+ err, resp = check_response(err, resp)
183
+ if err
184
+ if ret_blk
185
+ ret_blk.call(err, resp)
186
+ else
187
+ raise err
73
188
  end
74
- req.errback do |err|
75
- resp.fail(err)
189
+ else
190
+ resp = resp_blk.call(resp) if resp_blk
191
+ if ret_blk
192
+ ret_blk.call(err, resp)
193
+ else
194
+ resp
76
195
  end
77
196
  end
78
197
  end
79
198
 
80
- private
81
-
82
- def with_response
83
- Monga::Response.surround do |resp|
84
- req = yield(resp)
85
- req.callback do |data|
86
- if data.any?
87
- resp.succeed(data)
88
- else
89
- exception = Monga::Exceptions::QueryFailure.new("Nothing was returned for your query: #{req.options[:query]}")
90
- resp.fail(exception)
91
- end
92
- end
93
- req.errback{ |err| resp.fail err }
199
+ # Blank result should be interpreted as an error. Ok so.
200
+ #
201
+ def check_response(err, data)
202
+ if err
203
+ [err, data]
204
+ elsif data.nil? || data.empty?
205
+ error = Monga::Exceptions::QueryFailure.new("Empty Response is not a valid Response")
206
+ [error, data]
207
+ else
208
+ [nil, data]
94
209
  end
95
210
  end
96
211
  end
@@ -1,4 +1,4 @@
1
- module Monga::Requests
1
+ module Monga::Protocol
2
2
  class Delete < Monga::Request
3
3
  op_name :delete
4
4
 
@@ -18,6 +18,5 @@ module Monga::Requests
18
18
  b
19
19
  end
20
20
  end
21
-
22
21
  end
23
22
  end
@@ -1,4 +1,4 @@
1
- module Monga::Requests
1
+ module Monga::Protocol
2
2
  class GetMore < Monga::Request
3
3
  op_name :get_more
4
4
 
@@ -1,4 +1,4 @@
1
- module Monga::Requests
1
+ module Monga::Protocol
2
2
  class Insert < Monga::Request
3
3
  op_name :insert
4
4
 
@@ -24,6 +24,5 @@ module Monga::Requests
24
24
  b
25
25
  end
26
26
  end
27
-
28
27
  end
29
28
  end
@@ -1,4 +1,4 @@
1
- module Monga::Requests
1
+ module Monga::Protocol
2
2
  class KillCursors < Monga::Request
3
3
  op_name :kill_cursors
4
4
 
@@ -1,4 +1,4 @@
1
- module Monga::Requests
1
+ module Monga::Protocol
2
2
  class Query < Monga::Request
3
3
  op_name :query
4
4
 
@@ -15,7 +15,7 @@ module Monga::Requests
15
15
  @body ||= begin
16
16
  skip = @options[:skip] || 0
17
17
  limit = get_limit
18
- fields = @options[:fields] || {}
18
+ selector = @options[:selector] || {}
19
19
 
20
20
  query = {}
21
21
  query["$query"] = @options[:query] || {}
@@ -29,7 +29,7 @@ module Monga::Requests
29
29
  b.put_int(skip)
30
30
  b.put_int(limit)
31
31
  b.append!(BSON::BSON_C.serialize(query).to_s)
32
- b.append!(BSON::BSON_C.serialize(fields).to_s) if fields.any?
32
+ b.append!(BSON::BSON_C.serialize(selector).to_s) if selector.any?
33
33
  b
34
34
  end
35
35
  end