mongo 2.2.7 → 2.3.0

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.
Files changed (266) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/LICENSE +1 -1
  5. data/README.md +1 -1
  6. data/Rakefile +1 -1
  7. data/lib/mongo.rb +1 -1
  8. data/lib/mongo/address.rb +1 -1
  9. data/lib/mongo/address/ipv4.rb +1 -1
  10. data/lib/mongo/address/ipv6.rb +1 -1
  11. data/lib/mongo/address/unix.rb +1 -1
  12. data/lib/mongo/auth.rb +1 -1
  13. data/lib/mongo/auth/cr.rb +1 -1
  14. data/lib/mongo/auth/ldap.rb +1 -1
  15. data/lib/mongo/auth/roles.rb +1 -1
  16. data/lib/mongo/auth/user.rb +1 -1
  17. data/lib/mongo/auth/user/view.rb +5 -5
  18. data/lib/mongo/auth/x509.rb +1 -1
  19. data/lib/mongo/bson.rb +1 -1
  20. data/lib/mongo/bulk_write.rb +4 -4
  21. data/lib/mongo/bulk_write/combineable.rb +1 -1
  22. data/lib/mongo/bulk_write/ordered_combiner.rb +1 -1
  23. data/lib/mongo/bulk_write/result.rb +1 -1
  24. data/lib/mongo/bulk_write/result_combiner.rb +1 -1
  25. data/lib/mongo/bulk_write/transformable.rb +1 -1
  26. data/lib/mongo/bulk_write/unordered_combiner.rb +1 -1
  27. data/lib/mongo/bulk_write/validatable.rb +1 -1
  28. data/lib/mongo/client.rb +2 -2
  29. data/lib/mongo/cluster.rb +15 -3
  30. data/lib/mongo/cluster/cursor_reaper.rb +174 -0
  31. data/lib/mongo/cluster/topology.rb +1 -1
  32. data/lib/mongo/cluster/topology/replica_set.rb +1 -1
  33. data/lib/mongo/cluster/topology/sharded.rb +1 -1
  34. data/lib/mongo/cluster/topology/single.rb +1 -1
  35. data/lib/mongo/cluster/topology/unknown.rb +1 -1
  36. data/lib/mongo/collection.rb +5 -4
  37. data/lib/mongo/collection/view.rb +4 -4
  38. data/lib/mongo/collection/view/aggregation.rb +2 -2
  39. data/lib/mongo/collection/view/builder.rb +1 -1
  40. data/lib/mongo/collection/view/builder/aggregation.rb +1 -1
  41. data/lib/mongo/collection/view/builder/find_command.rb +1 -1
  42. data/lib/mongo/collection/view/builder/flags.rb +1 -1
  43. data/lib/mongo/collection/view/builder/map_reduce.rb +1 -1
  44. data/lib/mongo/collection/view/builder/modifiers.rb +1 -1
  45. data/lib/mongo/collection/view/builder/op_query.rb +1 -1
  46. data/lib/mongo/collection/view/explainable.rb +1 -1
  47. data/lib/mongo/collection/view/immutable.rb +1 -1
  48. data/lib/mongo/collection/view/iterable.rb +2 -2
  49. data/lib/mongo/collection/view/map_reduce.rb +3 -3
  50. data/lib/mongo/collection/view/readable.rb +23 -6
  51. data/lib/mongo/collection/view/writable.rb +3 -3
  52. data/lib/mongo/cursor.rb +50 -7
  53. data/lib/mongo/cursor/builder.rb +1 -1
  54. data/lib/mongo/cursor/builder/get_more_command.rb +1 -1
  55. data/lib/mongo/cursor/builder/kill_cursors_command.rb +29 -1
  56. data/lib/mongo/cursor/builder/op_get_more.rb +1 -1
  57. data/lib/mongo/cursor/builder/op_kill_cursors.rb +29 -1
  58. data/lib/mongo/database.rb +4 -4
  59. data/lib/mongo/database/view.rb +2 -2
  60. data/lib/mongo/dbref.rb +4 -3
  61. data/lib/mongo/error.rb +1 -1
  62. data/lib/mongo/error/bulk_write_error.rb +1 -1
  63. data/lib/mongo/error/closed_stream.rb +1 -1
  64. data/lib/mongo/error/extra_file_chunk.rb +1 -1
  65. data/lib/mongo/error/file_not_found.rb +1 -1
  66. data/lib/mongo/error/invalid_bulk_operation.rb +1 -1
  67. data/lib/mongo/error/invalid_bulk_operation_type.rb +1 -1
  68. data/lib/mongo/error/invalid_collection_name.rb +1 -1
  69. data/lib/mongo/error/invalid_database_name.rb +1 -1
  70. data/lib/mongo/error/invalid_document.rb +1 -1
  71. data/lib/mongo/error/invalid_file.rb +1 -1
  72. data/lib/mongo/error/invalid_file_revision.rb +1 -1
  73. data/lib/mongo/error/invalid_nonce.rb +1 -1
  74. data/lib/mongo/error/invalid_replacement_document.rb +1 -1
  75. data/lib/mongo/error/invalid_server_preference.rb +1 -1
  76. data/lib/mongo/error/invalid_signature.rb +1 -1
  77. data/lib/mongo/error/invalid_update_document.rb +1 -1
  78. data/lib/mongo/error/invalid_uri.rb +1 -1
  79. data/lib/mongo/error/invalid_write_concern.rb +1 -1
  80. data/lib/mongo/error/max_bson_size.rb +1 -1
  81. data/lib/mongo/error/max_message_size.rb +1 -1
  82. data/lib/mongo/error/missing_file_chunk.rb +1 -1
  83. data/lib/mongo/error/multi_index_drop.rb +1 -1
  84. data/lib/mongo/error/need_primary_server.rb +1 -1
  85. data/lib/mongo/error/no_server_available.rb +4 -2
  86. data/lib/mongo/error/operation_failure.rb +1 -1
  87. data/lib/mongo/error/parser.rb +1 -1
  88. data/lib/mongo/error/socket_error.rb +1 -1
  89. data/lib/mongo/error/socket_timeout_error.rb +1 -1
  90. data/lib/mongo/error/unchangeable_collection_option.rb +1 -1
  91. data/lib/mongo/error/unexpected_chunk_length.rb +1 -1
  92. data/lib/mongo/error/unexpected_response.rb +1 -1
  93. data/lib/mongo/error/unsupported_features.rb +1 -1
  94. data/lib/mongo/event.rb +1 -1
  95. data/lib/mongo/event/description_changed.rb +1 -1
  96. data/lib/mongo/event/publisher.rb +1 -1
  97. data/lib/mongo/event/subscriber.rb +1 -1
  98. data/lib/mongo/grid.rb +1 -1
  99. data/lib/mongo/grid/file.rb +6 -2
  100. data/lib/mongo/grid/file/chunk.rb +6 -4
  101. data/lib/mongo/grid/file/info.rb +7 -3
  102. data/lib/mongo/grid/fs_bucket.rb +12 -6
  103. data/lib/mongo/grid/stream.rb +1 -1
  104. data/lib/mongo/grid/stream/read.rb +2 -4
  105. data/lib/mongo/grid/stream/write.rb +4 -3
  106. data/lib/mongo/index.rb +1 -1
  107. data/lib/mongo/index/view.rb +5 -4
  108. data/lib/mongo/loggable.rb +1 -1
  109. data/lib/mongo/logger.rb +1 -1
  110. data/lib/mongo/monitoring.rb +1 -1
  111. data/lib/mongo/operation.rb +1 -1
  112. data/lib/mongo/operation/commands.rb +1 -1
  113. data/lib/mongo/operation/commands/aggregate.rb +7 -7
  114. data/lib/mongo/operation/commands/aggregate/result.rb +1 -1
  115. data/lib/mongo/operation/commands/collections_info.rb +10 -9
  116. data/lib/mongo/operation/commands/collections_info/result.rb +1 -1
  117. data/lib/mongo/operation/commands/command.rb +1 -1
  118. data/lib/mongo/operation/commands/indexes.rb +12 -11
  119. data/lib/mongo/operation/commands/list_collections.rb +1 -1
  120. data/lib/mongo/operation/commands/list_collections/result.rb +1 -1
  121. data/lib/mongo/operation/commands/list_indexes.rb +1 -1
  122. data/lib/mongo/operation/commands/list_indexes/result.rb +1 -1
  123. data/lib/mongo/operation/commands/map_reduce.rb +1 -1
  124. data/lib/mongo/operation/commands/map_reduce/result.rb +1 -1
  125. data/lib/mongo/operation/commands/user_query.rb +11 -10
  126. data/lib/mongo/operation/commands/users_info.rb +2 -2
  127. data/lib/mongo/operation/commands/users_info/result.rb +1 -1
  128. data/lib/mongo/operation/executable.rb +8 -7
  129. data/lib/mongo/operation/kill_cursors.rb +2 -2
  130. data/lib/mongo/operation/limited.rb +1 -1
  131. data/lib/mongo/operation/read.rb +1 -1
  132. data/lib/mongo/operation/read/get_more.rb +2 -2
  133. data/lib/mongo/operation/read/query.rb +1 -1
  134. data/lib/mongo/operation/read/query/result.rb +1 -1
  135. data/lib/mongo/operation/read_preference.rb +10 -10
  136. data/lib/mongo/operation/result.rb +1 -1
  137. data/lib/mongo/operation/specifiable.rb +2 -2
  138. data/lib/mongo/operation/write.rb +1 -1
  139. data/lib/mongo/operation/write/bulk.rb +1 -1
  140. data/lib/mongo/operation/write/bulk/bulkable.rb +9 -9
  141. data/lib/mongo/operation/write/bulk/delete.rb +3 -3
  142. data/lib/mongo/operation/write/bulk/delete/result.rb +1 -1
  143. data/lib/mongo/operation/write/bulk/insert.rb +5 -5
  144. data/lib/mongo/operation/write/bulk/insert/result.rb +1 -1
  145. data/lib/mongo/operation/write/bulk/legacy_mergable.rb +1 -1
  146. data/lib/mongo/operation/write/bulk/mergable.rb +1 -1
  147. data/lib/mongo/operation/write/bulk/update.rb +3 -3
  148. data/lib/mongo/operation/write/bulk/update/result.rb +1 -1
  149. data/lib/mongo/operation/write/command.rb +1 -1
  150. data/lib/mongo/operation/write/command/create_index.rb +1 -1
  151. data/lib/mongo/operation/write/command/create_user.rb +1 -1
  152. data/lib/mongo/operation/write/command/delete.rb +1 -1
  153. data/lib/mongo/operation/write/command/drop_index.rb +1 -1
  154. data/lib/mongo/operation/write/command/insert.rb +11 -1
  155. data/lib/mongo/operation/write/command/remove_user.rb +1 -1
  156. data/lib/mongo/operation/write/command/update.rb +1 -1
  157. data/lib/mongo/operation/write/command/update_user.rb +1 -1
  158. data/lib/mongo/operation/write/command/writable.rb +7 -6
  159. data/lib/mongo/operation/write/create_index.rb +1 -1
  160. data/lib/mongo/operation/write/create_user.rb +1 -1
  161. data/lib/mongo/operation/write/delete.rb +1 -1
  162. data/lib/mongo/operation/write/delete/result.rb +1 -1
  163. data/lib/mongo/operation/write/drop_index.rb +5 -5
  164. data/lib/mongo/operation/write/gle.rb +3 -3
  165. data/lib/mongo/operation/write/idable.rb +1 -1
  166. data/lib/mongo/operation/write/insert.rb +5 -5
  167. data/lib/mongo/operation/write/insert/result.rb +1 -1
  168. data/lib/mongo/operation/write/remove_user.rb +1 -1
  169. data/lib/mongo/operation/write/update.rb +1 -1
  170. data/lib/mongo/operation/write/update/result.rb +1 -1
  171. data/lib/mongo/operation/write/update_user.rb +1 -1
  172. data/lib/mongo/operation/write/write_command_enabled.rb +10 -9
  173. data/lib/mongo/protocol/bit_vector.rb +2 -2
  174. data/lib/mongo/protocol/delete.rb +1 -1
  175. data/lib/mongo/protocol/get_more.rb +1 -1
  176. data/lib/mongo/protocol/insert.rb +5 -1
  177. data/lib/mongo/protocol/kill_cursors.rb +1 -1
  178. data/lib/mongo/protocol/message.rb +9 -5
  179. data/lib/mongo/protocol/query.rb +1 -1
  180. data/lib/mongo/protocol/reply.rb +1 -1
  181. data/lib/mongo/protocol/serializers.rb +8 -8
  182. data/lib/mongo/protocol/update.rb +1 -1
  183. data/lib/mongo/server.rb +40 -3
  184. data/lib/mongo/server/connectable.rb +1 -1
  185. data/lib/mongo/server/connection.rb +4 -2
  186. data/lib/mongo/server/connection_pool.rb +1 -1
  187. data/lib/mongo/server/connection_pool/queue.rb +1 -1
  188. data/lib/mongo/server/context.rb +3 -1
  189. data/lib/mongo/server/description.rb +1 -1
  190. data/lib/mongo/server/description/inspector/description_changed.rb +1 -1
  191. data/lib/mongo/server/monitor.rb +1 -1
  192. data/lib/mongo/server_selector.rb +2 -1
  193. data/lib/mongo/server_selector/nearest.rb +1 -1
  194. data/lib/mongo/server_selector/primary.rb +1 -1
  195. data/lib/mongo/server_selector/primary_preferred.rb +1 -1
  196. data/lib/mongo/server_selector/secondary.rb +1 -1
  197. data/lib/mongo/server_selector/secondary_preferred.rb +1 -1
  198. data/lib/mongo/server_selector/selectable.rb +12 -7
  199. data/lib/mongo/socket.rb +1 -1
  200. data/lib/mongo/socket/ssl.rb +1 -1
  201. data/lib/mongo/socket/tcp.rb +1 -1
  202. data/lib/mongo/socket/unix.rb +1 -1
  203. data/lib/mongo/uri.rb +1 -1
  204. data/lib/mongo/version.rb +2 -2
  205. data/lib/mongo/write_concern/acknowledged.rb +1 -1
  206. data/lib/mongo/write_concern/normalizable.rb +1 -1
  207. data/lib/mongo/write_concern/unacknowledged.rb +1 -1
  208. data/mongo.gemspec +1 -1
  209. data/spec/mongo/client_spec.rb +2 -2
  210. data/spec/mongo/cluster/cursor_reaper_spec.rb +216 -0
  211. data/spec/mongo/cluster_spec.rb +36 -5
  212. data/spec/mongo/collection/view/aggregation_spec.rb +2 -2
  213. data/spec/mongo/collection/view/map_reduce_spec.rb +2 -2
  214. data/spec/mongo/collection/view/readable_spec.rb +203 -5
  215. data/spec/mongo/collection/view_spec.rb +10 -0
  216. data/spec/mongo/collection_spec.rb +64 -18
  217. data/spec/mongo/cursor_spec.rb +89 -0
  218. data/spec/mongo/database_spec.rb +79 -13
  219. data/spec/mongo/grid/fs_bucket_spec.rb +119 -1
  220. data/spec/mongo/grid/stream/write_spec.rb +63 -12
  221. data/spec/mongo/index/view_spec.rb +19 -0
  222. data/spec/mongo/operation/commands/aggregate_spec.rb +10 -7
  223. data/spec/mongo/operation/commands/collections_info_spec.rb +1 -1
  224. data/spec/mongo/operation/commands/command_spec.rb +3 -3
  225. data/spec/mongo/operation/commands/indexes_spec.rb +1 -1
  226. data/spec/mongo/operation/commands/map_reduce_spec.rb +2 -2
  227. data/spec/mongo/operation/kill_cursors_spec.rb +10 -19
  228. data/spec/mongo/operation/read/get_more_spec.rb +13 -25
  229. data/spec/mongo/operation/read/query_spec.rb +26 -30
  230. data/spec/mongo/operation/read_preference_spec.rb +11 -11
  231. data/spec/mongo/operation/specifiable_spec.rb +31 -0
  232. data/spec/mongo/operation/write/bulk/delete_spec.rb +16 -18
  233. data/spec/mongo/operation/write/bulk/insert_spec.rb +17 -18
  234. data/spec/mongo/operation/write/bulk/update_spec.rb +20 -25
  235. data/spec/mongo/operation/write/command/delete_spec.rb +26 -32
  236. data/spec/mongo/operation/write/command/insert_spec.rb +24 -31
  237. data/spec/mongo/operation/write/command/update_spec.rb +24 -32
  238. data/spec/mongo/operation/write/create_index_spec.rb +4 -4
  239. data/spec/mongo/operation/write/create_user_spec.rb +3 -3
  240. data/spec/mongo/operation/write/delete_spec.rb +51 -22
  241. data/spec/mongo/operation/write/drop_index_spec.rb +2 -2
  242. data/spec/mongo/operation/write/insert_spec.rb +42 -11
  243. data/spec/mongo/operation/write/remove_user_spec.rb +4 -4
  244. data/spec/mongo/operation/write/update_spec.rb +34 -6
  245. data/spec/mongo/operation/write/update_user_spec.rb +1 -1
  246. data/spec/mongo/server/connection_spec.rb +22 -14
  247. data/spec/mongo/server_selection_spec.rb +2 -2
  248. data/spec/mongo/server_selector/nearest_spec.rb +4 -4
  249. data/spec/mongo/server_selector/primary_preferred_spec.rb +4 -4
  250. data/spec/mongo/server_selector/primary_spec.rb +2 -2
  251. data/spec/mongo/server_selector/secondary_preferred_spec.rb +4 -4
  252. data/spec/mongo/server_selector/secondary_spec.rb +3 -3
  253. data/spec/mongo/server_selector_spec.rb +82 -3
  254. data/spec/mongo/server_spec.rb +0 -20
  255. data/spec/support/command_monitoring.rb +1 -1
  256. data/spec/support/connection_string.rb +1 -1
  257. data/spec/support/crud.rb +1 -1
  258. data/spec/support/crud/read.rb +1 -1
  259. data/spec/support/crud/write.rb +1 -1
  260. data/spec/support/gridfs.rb +1 -1
  261. data/spec/support/shared/server_selector.rb +3 -3
  262. metadata +7 -10
  263. metadata.gz.sig +0 -0
  264. data/lib/csasl/csasl.bundle +0 -0
  265. data/spec/mongo/operation/write/response_spec.rb +0 -85
  266. data/spec/support/shared/operation.rb +0 -100
@@ -15,7 +15,7 @@ describe Mongo::Operation::Write::CreateIndex do
15
15
  end
16
16
 
17
17
  let(:response) do
18
- operation.execute(authorized_primary.context)
18
+ operation.execute(authorized_primary)
19
19
  end
20
20
 
21
21
  after do
@@ -42,7 +42,7 @@ describe Mongo::Operation::Write::CreateIndex do
42
42
  end
43
43
 
44
44
  before do
45
- operation.execute(authorized_primary.context)
45
+ operation.execute(authorized_primary)
46
46
  end
47
47
 
48
48
  after do
@@ -51,12 +51,12 @@ describe Mongo::Operation::Write::CreateIndex do
51
51
 
52
52
  it 'raises an exception', if: write_command_enabled? do
53
53
  expect {
54
- second_operation.execute(authorized_primary.context)
54
+ second_operation.execute(authorized_primary)
55
55
  }.to raise_error(Mongo::Error::OperationFailure)
56
56
  end
57
57
 
58
58
  it 'does not raise an exception', unless: write_command_enabled? do
59
- expect(second_operation.execute(authorized_primary.context)).to be_successful
59
+ expect(second_operation.execute(authorized_primary)).to be_successful
60
60
  end
61
61
  end
62
62
  end
@@ -23,7 +23,7 @@ describe Mongo::Operation::Write::CreateUser do
23
23
  context 'when user creation was successful' do
24
24
 
25
25
  let!(:response) do
26
- operation.execute(root_authorized_primary.context)
26
+ operation.execute(root_authorized_primary)
27
27
  end
28
28
 
29
29
  it 'saves the user in the database' do
@@ -35,8 +35,8 @@ describe Mongo::Operation::Write::CreateUser do
35
35
 
36
36
  it 'raises an exception' do
37
37
  expect {
38
- operation.execute(root_authorized_primary.context)
39
- operation.execute(root_authorized_primary.context)
38
+ operation.execute(root_authorized_primary)
39
+ operation.execute(root_authorized_primary)
40
40
  }.to raise_error(Mongo::Error::OperationFailure)
41
41
  end
42
42
  end
@@ -1,24 +1,23 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mongo::Operation::Write::Delete do
4
- include_context 'operation'
5
4
 
6
- let(:document) { { :q => { :foo => 1 }, :limit => 1 } }
5
+ let(:document) do
6
+ {
7
+ :q => { :foo => 1 },
8
+ :limit => 1
9
+ }
10
+ end
11
+
7
12
  let(:spec) do
8
13
  { :delete => document,
9
- :db_name => db_name,
10
- :coll_name => coll_name,
11
- :write_concern => write_concern,
14
+ :db_name => TEST_DB,
15
+ :coll_name => TEST_COLL,
16
+ :write_concern => Mongo::WriteConcern.get(WRITE_CONCERN),
12
17
  :ordered => true
13
18
  }
14
19
  end
15
20
 
16
- let(:delete_write_cmd) do
17
- double('delete_write_cmd').tap do |d|
18
- allow(d).to receive(:execute) { [] }
19
- end
20
- end
21
-
22
21
  let(:op) { described_class.new(spec) }
23
22
 
24
23
  describe '#initialize' do
@@ -45,11 +44,12 @@ describe Mongo::Operation::Write::Delete do
45
44
 
46
45
  context 'when two ops have different specs' do
47
46
  let(:other_doc) { { :q => { :bar => 1 }, :limit => 1 } }
47
+
48
48
  let(:other_spec) do
49
49
  { :delete => other_doc,
50
- :db_name => db_name,
51
- :coll_name => coll_name,
52
- :write_concern => write_concern,
50
+ :db_name => TEST_DB,
51
+ :coll_name => TEST_COLL,
52
+ :write_concern => Mongo::WriteConcern.get(WRITE_CONCERN),
53
53
  :ordered => true
54
54
  }
55
55
  end
@@ -82,7 +82,7 @@ describe Mongo::Operation::Write::Delete do
82
82
  delete: document,
83
83
  db_name: TEST_DB,
84
84
  coll_name: TEST_COLL,
85
- write_concern: Mongo::WriteConcern.get(:w => 1)
85
+ write_concern: Mongo::WriteConcern.get(WRITE_CONCERN)
86
86
  })
87
87
  end
88
88
 
@@ -93,7 +93,7 @@ describe Mongo::Operation::Write::Delete do
93
93
  end
94
94
 
95
95
  let(:result) do
96
- delete.execute(authorized_primary.context)
96
+ delete.execute(authorized_primary)
97
97
  end
98
98
 
99
99
  it 'deletes the documents from the database' do
@@ -113,7 +113,7 @@ describe Mongo::Operation::Write::Delete do
113
113
 
114
114
  it 'raises an exception' do
115
115
  expect {
116
- delete.execute(authorized_primary.context)
116
+ delete.execute(authorized_primary)
117
117
  }.to raise_error(Mongo::Error::OperationFailure)
118
118
  end
119
119
  end
@@ -126,7 +126,7 @@ describe Mongo::Operation::Write::Delete do
126
126
  delete: document,
127
127
  db_name: TEST_DB,
128
128
  coll_name: TEST_COLL,
129
- write_concern: Mongo::WriteConcern.get(:w => 1)
129
+ write_concern: Mongo::WriteConcern.get(WRITE_CONCERN)
130
130
  })
131
131
  end
132
132
 
@@ -137,7 +137,7 @@ describe Mongo::Operation::Write::Delete do
137
137
  end
138
138
 
139
139
  let(:result) do
140
- delete.execute(authorized_primary.context)
140
+ delete.execute(authorized_primary)
141
141
  end
142
142
 
143
143
  it 'deletes the documents from the database' do
@@ -156,13 +156,13 @@ describe Mongo::Operation::Write::Delete do
156
156
  end
157
157
 
158
158
  let(:result) do
159
- delete.execute(authorized_primary.context)
159
+ delete.execute(authorized_primary)
160
160
  end
161
161
 
162
162
  it 'does not delete any documents' do
163
163
 
164
164
  expect {
165
- op.execute(authorized_primary.context)
165
+ op.execute(authorized_primary)
166
166
  }.to raise_error(Mongo::Error::OperationFailure)
167
167
 
168
168
  expect(authorized_collection.find.count).to eq(2)
@@ -177,10 +177,39 @@ describe Mongo::Operation::Write::Delete do
177
177
 
178
178
  it 'raises an error' do
179
179
  expect {
180
- op.execute(authorized_primary.context)
180
+ op.execute(authorized_primary)
181
181
  }.to raise_error(Mongo::Error::MaxBSONSize)
182
182
  end
183
183
  end
184
184
  end
185
+
186
+ context 'when write concern { w: 0 } is used' do
187
+
188
+ let(:delete) do
189
+ described_class.new({
190
+ delete: document,
191
+ db_name: TEST_DB,
192
+ coll_name: TEST_COLL,
193
+ write_concern: Mongo::WriteConcern.get(:w => 0)
194
+ })
195
+ end
196
+
197
+
198
+ let(:document) do
199
+ { 'q' => { field: 'test' }, 'limit' => 1 }
200
+ end
201
+
202
+ let(:result) do
203
+ delete.execute(authorized_primary)
204
+ end
205
+
206
+ before do
207
+ expect(delete).to receive(:execute_message).and_call_original
208
+ end
209
+
210
+ it 'uses op codes instead of write commands' do
211
+ expect(result.written_count).to eq(0)
212
+ end
213
+ end
185
214
  end
186
215
  end
@@ -23,7 +23,7 @@ describe Mongo::Operation::Write::DropIndex do
23
23
  end
24
24
 
25
25
  let(:response) do
26
- operation.execute(authorized_primary.context)
26
+ operation.execute(authorized_primary)
27
27
  end
28
28
 
29
29
  it 'removes the index' do
@@ -43,7 +43,7 @@ describe Mongo::Operation::Write::DropIndex do
43
43
 
44
44
  it 'raises an exception' do
45
45
  expect {
46
- operation.execute(authorized_primary.context)
46
+ operation.execute(authorized_primary)
47
47
  }.to raise_error(Mongo::Error::OperationFailure)
48
48
  end
49
49
  end
@@ -83,7 +83,7 @@ describe Mongo::Operation::Write::Insert do
83
83
  end
84
84
 
85
85
  let(:inserted_ids) do
86
- insert.execute(authorized_primary.context).inserted_ids
86
+ insert.execute(authorized_primary).inserted_ids
87
87
  end
88
88
 
89
89
  let(:collection_ids) do
@@ -112,7 +112,7 @@ describe Mongo::Operation::Write::Insert do
112
112
  context 'when the insert succeeds' do
113
113
 
114
114
  let!(:response) do
115
- insert.execute(authorized_primary.context)
115
+ insert.execute(authorized_primary)
116
116
  end
117
117
 
118
118
  it 'reports the correct written count', if: write_command_enabled? do
@@ -148,8 +148,8 @@ describe Mongo::Operation::Write::Insert do
148
148
 
149
149
  it 'raises an error' do
150
150
  expect {
151
- failing_insert.execute(authorized_primary.context)
152
- failing_insert.execute(authorized_primary.context)
151
+ failing_insert.execute(authorized_primary)
152
+ failing_insert.execute(authorized_primary)
153
153
  }.to raise_error(Mongo::Error::OperationFailure)
154
154
  end
155
155
  end
@@ -167,7 +167,7 @@ describe Mongo::Operation::Write::Insert do
167
167
  end
168
168
 
169
169
  let!(:response) do
170
- insert.execute(authorized_primary.context)
170
+ insert.execute(authorized_primary)
171
171
  end
172
172
 
173
173
  it 'reports the correct written count', if: write_command_enabled? do
@@ -203,8 +203,8 @@ describe Mongo::Operation::Write::Insert do
203
203
 
204
204
  it 'raises an error' do
205
205
  expect {
206
- failing_insert.execute(authorized_primary.context)
207
- failing_insert.execute(authorized_primary.context)
206
+ failing_insert.execute(authorized_primary)
207
+ failing_insert.execute(authorized_primary)
208
208
  }.to raise_error(Mongo::Error::OperationFailure)
209
209
  end
210
210
  end
@@ -229,8 +229,8 @@ describe Mongo::Operation::Write::Insert do
229
229
 
230
230
  it 'raises an error' do
231
231
  expect {
232
- failing_insert.execute(authorized_primary.context)
233
- failing_insert.execute(authorized_primary.context)
232
+ failing_insert.execute(authorized_primary)
233
+ failing_insert.execute(authorized_primary)
234
234
  }.to raise_error(Mongo::Error::OperationFailure)
235
235
  end
236
236
 
@@ -244,17 +244,48 @@ describe Mongo::Operation::Write::Insert do
244
244
 
245
245
  it 'raises an error' do
246
246
  expect {
247
- insert.execute(authorized_primary.context)
247
+ insert.execute(authorized_primary)
248
248
  }.to raise_error(Mongo::Error::MaxBSONSize)
249
249
  end
250
250
 
251
251
  it 'does not insert the document' do
252
252
  expect {
253
- insert.execute(authorized_primary.context)
253
+ insert.execute(authorized_primary)
254
254
  }.to raise_error(Mongo::Error::MaxBSONSize)
255
255
  expect(authorized_collection.find.count).to eq(0)
256
256
  end
257
257
  end
258
258
  end
259
+
260
+ context 'when write concern { w: 0 } is used' do
261
+
262
+ let(:spec) do
263
+ { :documents => documents,
264
+ :db_name => TEST_DB,
265
+ :coll_name => TEST_COLL,
266
+ :write_concern => Mongo::WriteConcern.get(:w => 0)
267
+ }
268
+ end
269
+
270
+ let(:documents) do
271
+ [{ '_id' => 1 }]
272
+ end
273
+
274
+ let(:op) do
275
+ described_class.new(spec)
276
+ end
277
+
278
+ before do
279
+ expect(op).to receive(:execute_message).and_call_original
280
+ end
281
+
282
+ let(:response) do
283
+ op.execute(authorized_primary)
284
+ end
285
+
286
+ it 'uses op codes instead of write commands' do
287
+ expect(response.written_count).to eq(0)
288
+ end
289
+ end
259
290
  end
260
291
  end
@@ -18,7 +18,7 @@ describe Mongo::Operation::Write::RemoveUser do
18
18
  context 'when user removal was successful' do
19
19
 
20
20
  let!(:response) do
21
- operation.execute(root_authorized_primary.context)
21
+ operation.execute(root_authorized_primary)
22
22
  end
23
23
 
24
24
  it 'removes the user from the database' do
@@ -29,17 +29,17 @@ describe Mongo::Operation::Write::RemoveUser do
29
29
  context 'when removal was not successful' do
30
30
 
31
31
  before do
32
- operation.execute(root_authorized_primary.context)
32
+ operation.execute(root_authorized_primary)
33
33
  end
34
34
 
35
35
  it 'raises an exception', if: write_command_enabled? do
36
36
  expect {
37
- operation.execute(root_authorized_primary.context)
37
+ operation.execute(root_authorized_primary)
38
38
  }.to raise_error(Mongo::Error::OperationFailure)
39
39
  end
40
40
 
41
41
  it 'does not raise an exception', unless: write_command_enabled? do
42
- expect(operation.execute(root_authorized_primary.context).written_count).to eq(0)
42
+ expect(operation.execute(root_authorized_primary).written_count).to eq(0)
43
43
  end
44
44
  end
45
45
  end
@@ -99,7 +99,7 @@ describe Mongo::Operation::Write::Update do
99
99
  end
100
100
 
101
101
  let(:result) do
102
- update.execute(authorized_primary.context)
102
+ update.execute(authorized_primary)
103
103
  end
104
104
 
105
105
  it 'updates the document' do
@@ -127,7 +127,7 @@ describe Mongo::Operation::Write::Update do
127
127
 
128
128
  it 'raises an exception' do
129
129
  expect {
130
- update.execute(authorized_primary.context)
130
+ update.execute(authorized_primary)
131
131
  }.to raise_error(Mongo::Error::OperationFailure)
132
132
  end
133
133
  end
@@ -151,7 +151,7 @@ describe Mongo::Operation::Write::Update do
151
151
  end
152
152
 
153
153
  let(:result) do
154
- update.execute(authorized_primary.context)
154
+ update.execute(authorized_primary)
155
155
  end
156
156
 
157
157
  it 'updates the documents' do
@@ -179,7 +179,7 @@ describe Mongo::Operation::Write::Update do
179
179
 
180
180
  it 'raises an exception' do
181
181
  expect {
182
- update.execute(authorized_primary.context)
182
+ update.execute(authorized_primary)
183
183
  }.to raise_error(Mongo::Error::OperationFailure)
184
184
  end
185
185
  end
@@ -192,7 +192,7 @@ describe Mongo::Operation::Write::Update do
192
192
 
193
193
  it 'raises an error' do
194
194
  expect {
195
- update.execute(authorized_primary.context)
195
+ update.execute(authorized_primary)
196
196
  }.to raise_error(Mongo::Error::MaxBSONSize)
197
197
  end
198
198
  end
@@ -204,7 +204,7 @@ describe Mongo::Operation::Write::Update do
204
204
  end
205
205
 
206
206
  let(:result) do
207
- update.execute(authorized_primary.context)
207
+ update.execute(authorized_primary)
208
208
  end
209
209
 
210
210
  it 'inserts the document' do
@@ -224,5 +224,33 @@ describe Mongo::Operation::Write::Update do
224
224
  end
225
225
  end
226
226
  end
227
+
228
+ context 'when write concern { w: 0 } is used' do
229
+
230
+ let(:update) do
231
+ described_class.new({
232
+ update: document,
233
+ db_name: TEST_DB,
234
+ coll_name: TEST_COLL,
235
+ write_concern: Mongo::WriteConcern.get(:w => 0)
236
+ })
237
+ end
238
+
239
+ let(:document) do
240
+ { 'q' => { name: 'test' }, 'u' => { '$set' => { field: 'blah' }}, limit: 1 }
241
+ end
242
+
243
+ let(:result) do
244
+ update.execute(authorized_primary)
245
+ end
246
+
247
+ before do
248
+ expect(update).to receive(:execute_message).and_call_original
249
+ end
250
+
251
+ it 'uses op codes instead of write commands' do
252
+ expect(result.written_count).to eq(0)
253
+ end
254
+ end
227
255
  end
228
256
  end
@@ -35,7 +35,7 @@ describe Mongo::Operation::Write::UpdateUser do
35
35
  context 'when user update was successful' do
36
36
 
37
37
  let!(:response) do
38
- operation.execute(root_authorized_primary.context)
38
+ operation.execute(root_authorized_primary)
39
39
  end
40
40
 
41
41
  it 'updates the user in the database' do