mongo 2.5.1 → 2.5.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (275) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +3 -2
  3. data.tar.gz.sig +0 -0
  4. data/Rakefile +1 -1
  5. data/lib/mongo/auth/user/view.rb +4 -4
  6. data/lib/mongo/bulk_write.rb +14 -19
  7. data/lib/mongo/cluster.rb +4 -2
  8. data/lib/mongo/cluster/app_metadata.rb +1 -1
  9. data/lib/mongo/cluster/reapers/cursor_reaper.rb +1 -1
  10. data/lib/mongo/collection.rb +13 -13
  11. data/lib/mongo/collection/view.rb +2 -1
  12. data/lib/mongo/collection/view/aggregation.rb +1 -1
  13. data/lib/mongo/collection/view/change_stream.rb +1 -1
  14. data/lib/mongo/collection/view/iterable.rb +4 -4
  15. data/lib/mongo/collection/view/map_reduce.rb +3 -3
  16. data/lib/mongo/collection/view/readable.rb +26 -20
  17. data/lib/mongo/collection/view/writable.rb +12 -12
  18. data/lib/mongo/cursor.rb +4 -7
  19. data/lib/mongo/database.rb +2 -2
  20. data/lib/mongo/database/view.rb +1 -1
  21. data/lib/mongo/grid/stream/write.rb +1 -1
  22. data/lib/mongo/index/view.rb +3 -3
  23. data/lib/mongo/operation.rb +38 -24
  24. data/lib/mongo/operation/aggregate.rb +53 -0
  25. data/lib/mongo/operation/aggregate/command.rb +59 -0
  26. data/lib/mongo/operation/aggregate/op_msg.rb +54 -0
  27. data/lib/mongo/operation/aggregate/result.rb +87 -0
  28. data/lib/mongo/operation/collections_info.rb +62 -0
  29. data/lib/mongo/operation/collections_info/result.rb +39 -0
  30. data/lib/mongo/operation/{executable.rb → command.rb} +16 -13
  31. data/lib/mongo/operation/command/command.rb +38 -0
  32. data/lib/mongo/operation/command/op_msg.rb +53 -0
  33. data/lib/mongo/operation/count.rb +48 -0
  34. data/lib/mongo/operation/count/command.rb +38 -0
  35. data/lib/mongo/operation/count/op_msg.rb +38 -0
  36. data/lib/mongo/operation/create.rb +48 -0
  37. data/lib/mongo/operation/create/command.rb +38 -0
  38. data/lib/mongo/operation/create/op_msg.rb +37 -0
  39. data/lib/mongo/operation/create_index.rb +48 -0
  40. data/lib/mongo/operation/create_index/command.rb +42 -0
  41. data/lib/mongo/operation/create_index/op_msg.rb +41 -0
  42. data/lib/mongo/operation/create_user.rb +48 -0
  43. data/lib/mongo/operation/{commands → create_user}/command.rb +13 -19
  44. data/lib/mongo/operation/create_user/op_msg.rb +41 -0
  45. data/lib/mongo/operation/delete.rb +38 -0
  46. data/lib/mongo/operation/delete/bulk_result.rb +46 -0
  47. data/lib/mongo/operation/delete/command.rb +59 -0
  48. data/lib/mongo/operation/delete/legacy.rb +69 -0
  49. data/lib/mongo/operation/delete/op_msg.rb +60 -0
  50. data/lib/mongo/operation/{write/delete → delete}/result.rb +18 -16
  51. data/lib/mongo/operation/distinct.rb +48 -0
  52. data/lib/mongo/operation/distinct/command.rb +38 -0
  53. data/lib/mongo/operation/distinct/op_msg.rb +38 -0
  54. data/lib/mongo/operation/drop.rb +48 -0
  55. data/lib/mongo/operation/drop/command.rb +38 -0
  56. data/lib/mongo/operation/{commands/count.rb → drop/op_msg.rb} +16 -6
  57. data/lib/mongo/operation/drop_database.rb +48 -0
  58. data/lib/mongo/operation/drop_database/command.rb +38 -0
  59. data/lib/mongo/operation/drop_database/op_msg.rb +37 -0
  60. data/lib/mongo/operation/drop_index.rb +48 -0
  61. data/lib/mongo/operation/drop_index/command.rb +42 -0
  62. data/lib/mongo/operation/{limited.rb → drop_index/op_msg.rb} +19 -15
  63. data/lib/mongo/operation/explain.rb +52 -0
  64. data/lib/mongo/operation/explain/command.rb +54 -0
  65. data/lib/mongo/operation/explain/legacy.rb +53 -0
  66. data/lib/mongo/operation/explain/op_msg.rb +54 -0
  67. data/lib/mongo/operation/explain/result.rb +50 -0
  68. data/lib/mongo/operation/find.rb +52 -0
  69. data/lib/mongo/operation/find/command.rb +54 -0
  70. data/lib/mongo/operation/find/legacy.rb +55 -0
  71. data/lib/mongo/operation/{read/query → find/legacy}/result.rb +3 -3
  72. data/lib/mongo/operation/find/op_msg.rb +59 -0
  73. data/lib/mongo/operation/find/result.rb +60 -0
  74. data/lib/mongo/operation/{commands/users_info/result.rb → get_more.rb} +20 -22
  75. data/lib/mongo/operation/get_more/command.rb +54 -0
  76. data/lib/mongo/operation/{commands/find.rb → get_more/legacy.rb} +15 -8
  77. data/lib/mongo/operation/get_more/op_msg.rb +58 -0
  78. data/lib/mongo/operation/get_more/result.rb +60 -0
  79. data/lib/mongo/operation/indexes.rb +52 -0
  80. data/lib/mongo/operation/indexes/command.rb +54 -0
  81. data/lib/mongo/operation/indexes/legacy.rb +57 -0
  82. data/lib/mongo/operation/indexes/op_msg.rb +54 -0
  83. data/lib/mongo/operation/indexes/result.rb +97 -0
  84. data/lib/mongo/operation/insert.rb +40 -0
  85. data/lib/mongo/operation/insert/bulk_result.rb +70 -0
  86. data/lib/mongo/operation/insert/command.rb +65 -0
  87. data/lib/mongo/operation/insert/legacy.rb +72 -0
  88. data/lib/mongo/operation/insert/op_msg.rb +61 -0
  89. data/lib/mongo/operation/insert/result.rb +64 -0
  90. data/lib/mongo/operation/kill_cursors.rb +25 -14
  91. data/lib/mongo/operation/{takes_write_concern.rb → kill_cursors/command.rb} +14 -12
  92. data/lib/mongo/operation/kill_cursors/legacy.rb +37 -0
  93. data/lib/mongo/operation/kill_cursors/op_msg.rb +37 -0
  94. data/lib/mongo/operation/list_collections.rb +49 -0
  95. data/lib/mongo/operation/list_collections/command.rb +60 -0
  96. data/lib/mongo/operation/list_collections/op_msg.rb +53 -0
  97. data/lib/mongo/operation/list_collections/result.rb +92 -0
  98. data/lib/mongo/operation/map_reduce.rb +49 -0
  99. data/lib/mongo/operation/map_reduce/command.rb +55 -0
  100. data/lib/mongo/operation/map_reduce/op_msg.rb +54 -0
  101. data/lib/mongo/operation/map_reduce/result.rb +129 -0
  102. data/lib/mongo/operation/parallel_scan.rb +49 -0
  103. data/lib/mongo/operation/parallel_scan/command.rb +67 -0
  104. data/lib/mongo/operation/parallel_scan/op_msg.rb +61 -0
  105. data/lib/mongo/operation/parallel_scan/result.rb +61 -0
  106. data/lib/mongo/operation/remove_user.rb +48 -0
  107. data/lib/mongo/operation/remove_user/command.rb +42 -0
  108. data/lib/mongo/operation/remove_user/op_msg.rb +41 -0
  109. data/lib/mongo/operation/result.rb +3 -1
  110. data/lib/mongo/operation/shared/bypass_document_validation.rb +36 -0
  111. data/lib/mongo/operation/{causally_consistent.rb → shared/causal_consistency_supported.rb} +5 -5
  112. data/lib/mongo/operation/shared/executable.rb +45 -0
  113. data/lib/mongo/operation/shared/idable.rb +64 -0
  114. data/lib/mongo/operation/{commands/distinct.rb → shared/limited.rb} +10 -7
  115. data/lib/mongo/operation/{object_id_generator.rb → shared/object_id_generator.rb} +2 -2
  116. data/lib/mongo/operation/{read_preference.rb → shared/read_preference_supported.rb} +14 -24
  117. data/lib/mongo/operation/shared/result/aggregatable.rb +75 -0
  118. data/lib/mongo/operation/shared/sessions_supported.rb +79 -0
  119. data/lib/mongo/operation/{specifiable.rb → shared/specifiable.rb} +40 -4
  120. data/lib/mongo/operation/shared/write.rb +81 -0
  121. data/lib/mongo/operation/shared/write_concern_supported.rb +39 -0
  122. data/lib/mongo/operation/update.rb +38 -0
  123. data/lib/mongo/operation/update/bulk_result.rb +126 -0
  124. data/lib/mongo/operation/update/command.rb +60 -0
  125. data/lib/mongo/operation/update/legacy.rb +80 -0
  126. data/lib/mongo/operation/{write/update → update/legacy}/result.rb +4 -82
  127. data/lib/mongo/operation/update/op_msg.rb +60 -0
  128. data/lib/mongo/operation/update/result.rb +102 -0
  129. data/lib/mongo/operation/update_user.rb +48 -0
  130. data/lib/mongo/operation/update_user/command.rb +41 -0
  131. data/lib/mongo/operation/update_user/op_msg.rb +41 -0
  132. data/lib/mongo/operation/users_info.rb +49 -0
  133. data/lib/mongo/operation/users_info/command.rb +58 -0
  134. data/lib/mongo/operation/users_info/op_msg.rb +57 -0
  135. data/lib/mongo/operation/{commands/collections_info → users_info}/result.rb +18 -17
  136. data/lib/mongo/server.rb +3 -5
  137. data/lib/mongo/server/connectable.rb +3 -3
  138. data/lib/mongo/server/connection.rb +14 -0
  139. data/lib/mongo/server_selector.rb +1 -1
  140. data/lib/mongo/server_selector/selectable.rb +3 -12
  141. data/lib/mongo/session.rb +13 -1
  142. data/lib/mongo/session/session_pool.rb +1 -1
  143. data/lib/mongo/version.rb +1 -1
  144. data/spec/mongo/client_spec.rb +15 -22
  145. data/spec/mongo/cluster/app_metadata_spec.rb +19 -3
  146. data/spec/mongo/cluster/cursor_reaper_spec.rb +37 -0
  147. data/spec/mongo/cluster_spec.rb +2 -2
  148. data/spec/mongo/collection/view/change_stream_spec.rb +2 -2
  149. data/spec/mongo/collection_spec.rb +105 -14
  150. data/spec/mongo/cursor_spec.rb +11 -11
  151. data/spec/mongo/grid/fs_bucket_spec.rb +5 -0
  152. data/spec/mongo/max_staleness_spec.rb +3 -1
  153. data/spec/mongo/operation/{commands/aggregate → aggregate}/result_spec.rb +1 -1
  154. data/spec/mongo/operation/{commands/aggregate_spec.rb → aggregate_spec.rb} +1 -1
  155. data/spec/mongo/operation/{commands/collections_info_spec.rb → collections_info_spec.rb} +4 -2
  156. data/spec/mongo/operation/{commands/command_spec.rb → command_spec.rb} +1 -1
  157. data/spec/mongo/operation/{write/command/create_index_spec.rb → create_index_spec.rb} +1 -1
  158. data/spec/mongo/operation/{write/create_user_spec.rb → create_user_spec.rb} +1 -1
  159. data/spec/mongo/operation/{write/bulk/delete_spec.rb → delete/bulk_spec.rb} +8 -8
  160. data/spec/mongo/operation/delete/command_spec.rb +111 -0
  161. data/spec/mongo/operation/{write/command/delete_spec.rb → delete/op_msg_spec.rb} +40 -34
  162. data/spec/mongo/operation/{write/delete_spec.rb → delete_spec.rb} +7 -7
  163. data/spec/mongo/operation/{write/command/drop_index_spec.rb → drop_index_spec.rb} +1 -1
  164. data/spec/mongo/operation/{read/query_spec.rb → find/legacy_spec.rb} +2 -2
  165. data/spec/mongo/operation/{read/get_more_spec.rb → get_more_spec.rb} +3 -3
  166. data/spec/mongo/operation/{commands/indexes_spec.rb → indexes_spec.rb} +6 -4
  167. data/spec/mongo/operation/{write/bulk/insert_spec.rb → insert/bulk_spec.rb} +9 -9
  168. data/spec/mongo/operation/insert/command_spec.rb +110 -0
  169. data/spec/mongo/operation/{write/command/insert_spec.rb → insert/op_msg_spec.rb} +51 -41
  170. data/spec/mongo/operation/{write/insert_spec.rb → insert_spec.rb} +2 -2
  171. data/spec/mongo/operation/kill_cursors_spec.rb +2 -2
  172. data/spec/mongo/operation/limited_spec.rb +3 -3
  173. data/spec/mongo/operation/{commands/map_reduce_spec.rb → map_reduce_spec.rb} +1 -1
  174. data/spec/mongo/operation/read_preference_spec.rb +2 -2
  175. data/spec/mongo/operation/{write/command/remove_user_spec.rb → remove_user_spec.rb} +1 -1
  176. data/spec/mongo/operation/{write/bulk/update_spec.rb → update/bulk_spec.rb} +8 -8
  177. data/spec/mongo/operation/update/command_spec.rb +114 -0
  178. data/spec/mongo/operation/{write/command/update_spec.rb → update/op_msg_spec.rb} +49 -40
  179. data/spec/mongo/operation/{write/update_spec.rb → update_spec.rb} +6 -6
  180. data/spec/mongo/operation/{write/command/update_user_spec.rb → update_user_spec.rb} +1 -1
  181. data/spec/mongo/server/connection_spec.rb +0 -22
  182. data/spec/mongo/server_selector_spec.rb +55 -0
  183. data/spec/mongo/server_spec.rb +0 -42
  184. data/spec/mongo/session/session_pool_spec.rb +1 -1
  185. data/spec/mongo/uri/srv_protocol_spec.rb +2 -2
  186. data/spec/mongo/uri_spec.rb +2 -2
  187. data/spec/support/gridfs_tests/delete.yml +4 -38
  188. data/spec/support/gridfs_tests/download.yml +12 -30
  189. data/spec/support/server_selection.rb +1 -1
  190. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest.yml +0 -1
  191. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest_multiple.yml +0 -1
  192. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest_non_matching.yml +0 -1
  193. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PossiblePrimary.yml +15 -0
  194. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PossiblePrimaryNearest.yml +15 -0
  195. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Primary.yml +0 -3
  196. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred.yml +0 -1
  197. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.yml +0 -1
  198. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary.yml +0 -1
  199. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred.yml +0 -1
  200. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.yml +0 -1
  201. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary_non_matching.yml +0 -1
  202. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest.yml +0 -1
  203. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest_multiple.yml +0 -1
  204. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest_non_matching.yml +0 -1
  205. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Primary.yml +0 -3
  206. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred.yml +0 -1
  207. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.yml +0 -1
  208. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary.yml +0 -1
  209. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred.yml +0 -1
  210. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred_non_matching.yml +0 -1
  211. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary_non_matching.yml +0 -1
  212. data/spec/support/server_selection/selection/Sharded/read/Nearest.yml +21 -0
  213. data/spec/support/server_selection/selection/Sharded/read/Primary.yml +19 -0
  214. data/spec/support/server_selection/selection/Sharded/read/PrimaryPreferred.yml +21 -0
  215. data/spec/support/server_selection/selection/Sharded/read/Secondary.yml +21 -0
  216. data/spec/support/server_selection/selection/Sharded/read/SecondaryPreferred.yml +0 -5
  217. data/spec/support/server_selection/selection/Single/read/SecondaryPreferred.yml +0 -1
  218. data/spec/support/server_selection/selection/Unknown/read/SecondaryPreferred.yml +0 -1
  219. data/spec/support/shared/session.rb +46 -5
  220. metadata +174 -116
  221. metadata.gz.sig +1 -2
  222. data/lib/mongo/operation/commands.rb +0 -31
  223. data/lib/mongo/operation/commands/aggregate.rb +0 -63
  224. data/lib/mongo/operation/commands/aggregate/result.rb +0 -89
  225. data/lib/mongo/operation/commands/collections_info.rb +0 -71
  226. data/lib/mongo/operation/commands/create.rb +0 -49
  227. data/lib/mongo/operation/commands/drop.rb +0 -49
  228. data/lib/mongo/operation/commands/drop_database.rb +0 -49
  229. data/lib/mongo/operation/commands/explain.rb +0 -27
  230. data/lib/mongo/operation/commands/explain/result.rb +0 -52
  231. data/lib/mongo/operation/commands/find/result.rb +0 -62
  232. data/lib/mongo/operation/commands/get_more.rb +0 -27
  233. data/lib/mongo/operation/commands/get_more/result.rb +0 -62
  234. data/lib/mongo/operation/commands/indexes.rb +0 -73
  235. data/lib/mongo/operation/commands/list_collections.rb +0 -48
  236. data/lib/mongo/operation/commands/list_collections/result.rb +0 -94
  237. data/lib/mongo/operation/commands/list_indexes.rb +0 -48
  238. data/lib/mongo/operation/commands/list_indexes/result.rb +0 -98
  239. data/lib/mongo/operation/commands/map_reduce.rb +0 -65
  240. data/lib/mongo/operation/commands/map_reduce/result.rb +0 -131
  241. data/lib/mongo/operation/commands/parallel_scan.rb +0 -54
  242. data/lib/mongo/operation/commands/parallel_scan/result.rb +0 -64
  243. data/lib/mongo/operation/commands/users_info.rb +0 -52
  244. data/lib/mongo/operation/read.rb +0 -16
  245. data/lib/mongo/operation/read/get_more.rb +0 -52
  246. data/lib/mongo/operation/read/query.rb +0 -55
  247. data/lib/mongo/operation/uses_command_op_msg.rb +0 -78
  248. data/lib/mongo/operation/write.rb +0 -22
  249. data/lib/mongo/operation/write/bulk.rb +0 -20
  250. data/lib/mongo/operation/write/bulk/bulkable.rb +0 -82
  251. data/lib/mongo/operation/write/bulk/delete.rb +0 -71
  252. data/lib/mongo/operation/write/bulk/delete/result.rb +0 -71
  253. data/lib/mongo/operation/write/bulk/insert.rb +0 -96
  254. data/lib/mongo/operation/write/bulk/insert/result.rb +0 -129
  255. data/lib/mongo/operation/write/bulk/legacy_mergable.rb +0 -87
  256. data/lib/mongo/operation/write/bulk/mergable.rb +0 -73
  257. data/lib/mongo/operation/write/bulk/update.rb +0 -81
  258. data/lib/mongo/operation/write/bulk/update/result.rb +0 -196
  259. data/lib/mongo/operation/write/command.rb +0 -23
  260. data/lib/mongo/operation/write/command/create_index.rb +0 -79
  261. data/lib/mongo/operation/write/command/create_user.rb +0 -61
  262. data/lib/mongo/operation/write/command/delete.rb +0 -79
  263. data/lib/mongo/operation/write/command/drop_index.rb +0 -80
  264. data/lib/mongo/operation/write/command/insert.rb +0 -69
  265. data/lib/mongo/operation/write/command/remove_user.rb +0 -60
  266. data/lib/mongo/operation/write/command/update.rb +0 -77
  267. data/lib/mongo/operation/write/command/update_user.rb +0 -61
  268. data/lib/mongo/operation/write/command/writable.rb +0 -70
  269. data/lib/mongo/operation/write/delete.rb +0 -75
  270. data/lib/mongo/operation/write/gle.rb +0 -49
  271. data/lib/mongo/operation/write/idable.rb +0 -63
  272. data/lib/mongo/operation/write/insert.rb +0 -74
  273. data/lib/mongo/operation/write/insert/result.rb +0 -62
  274. data/lib/mongo/operation/write/update.rb +0 -91
  275. data/lib/mongo/operation/write/write_command_enabled.rb +0 -77
@@ -18,7 +18,7 @@ describe Mongo::Operation::Limited do
18
18
  end
19
19
 
20
20
  it 'returns a limit of -1' do
21
- expect(limited.options).to eq({ :skip => 5, :limit => -1 })
21
+ expect(limited.send(:options)).to eq({ :skip => 5, :limit => -1 })
22
22
  end
23
23
  end
24
24
 
@@ -31,7 +31,7 @@ describe Mongo::Operation::Limited do
31
31
  end
32
32
 
33
33
  it 'returns a limit of -1' do
34
- expect(limited.options).to eq({ :skip => 5, :limit => -1 })
34
+ expect(limited.send(:options)).to eq({ :skip => 5, :limit => -1 })
35
35
  end
36
36
  end
37
37
 
@@ -42,7 +42,7 @@ describe Mongo::Operation::Limited do
42
42
  end
43
43
 
44
44
  it 'returns a limit of -1' do
45
- expect(limited.options).to eq({ :skip => 5, :limit => -1 })
45
+ expect(limited.send(:options)).to eq({ :skip => 5, :limit => -1 })
46
46
  end
47
47
  end
48
48
  end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Mongo::Operation::Commands::MapReduce do
3
+ describe Mongo::Operation::MapReduce do
4
4
 
5
5
  let(:map) do
6
6
  %Q{
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Mongo::Operation::ReadPreference do
3
+ describe Mongo::Operation::ReadPreferenceSupported do
4
4
 
5
5
  let(:selector) do
6
6
  { name: 'test' }
@@ -28,7 +28,7 @@ describe Mongo::Operation::ReadPreference do
28
28
 
29
29
  let(:operation) do
30
30
  Class.new do
31
- include Mongo::Operation::ReadPreference
31
+ include Mongo::Operation::ReadPreferenceSupported
32
32
  end.new.tap do |rp|
33
33
  allow(rp).to receive(:read).and_return(read_pref)
34
34
  allow(rp).to receive(:selector).and_return(selector)
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Mongo::Operation::Write::Command::RemoveUser do
3
+ describe Mongo::Operation::RemoveUser do
4
4
 
5
5
  describe '#execute' do
6
6
 
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Mongo::Operation::Write::Bulk::Update do
3
+ describe Mongo::Operation::Update do
4
4
 
5
5
  let(:documents) do
6
6
  [{ :q => { :foo => 1 },
@@ -75,7 +75,7 @@ describe Mongo::Operation::Write::Bulk::Update do
75
75
  end
76
76
  end
77
77
 
78
- describe '#execute' do
78
+ describe '#bulk_execute' do
79
79
 
80
80
  before do
81
81
  authorized_collection.insert_many([
@@ -97,7 +97,7 @@ describe Mongo::Operation::Write::Bulk::Update do
97
97
  end
98
98
 
99
99
  it 'updates the document' do
100
- op.execute(authorized_primary)
100
+ op.bulk_execute(authorized_primary)
101
101
  expect(authorized_collection.find(field: 'blah').count).to eq(1)
102
102
  end
103
103
  end
@@ -121,7 +121,7 @@ describe Mongo::Operation::Write::Bulk::Update do
121
121
  end
122
122
 
123
123
  it 'updates the documents' do
124
- op.execute(authorized_primary)
124
+ op.bulk_execute(authorized_primary)
125
125
  expect(authorized_collection.find(field: 'blah').count).to eq(2)
126
126
  end
127
127
  end
@@ -153,7 +153,7 @@ describe Mongo::Operation::Write::Bulk::Update do
153
153
  context 'when write concern is acknowledged' do
154
154
 
155
155
  it 'aborts after first error' do
156
- failing_update.execute(authorized_primary)
156
+ failing_update.bulk_execute(authorized_primary)
157
157
  expect(authorized_collection.find(other: 'blah').count).to eq(0)
158
158
  end
159
159
  end
@@ -165,7 +165,7 @@ describe Mongo::Operation::Write::Bulk::Update do
165
165
  end
166
166
 
167
167
  it 'aborts after first error' do
168
- failing_update.execute(authorized_primary)
168
+ failing_update.bulk_execute(authorized_primary)
169
169
  expect(authorized_collection.find(other: 'blah').count).to eq(0)
170
170
  end
171
171
  end
@@ -198,7 +198,7 @@ describe Mongo::Operation::Write::Bulk::Update do
198
198
  context 'when write concern is acknowledged' do
199
199
 
200
200
  it 'does not abort after first error' do
201
- failing_update.execute(authorized_primary)
201
+ failing_update.bulk_execute(authorized_primary)
202
202
  expect(authorized_collection.find(other: 'blah').count).to eq(1)
203
203
  end
204
204
  end
@@ -210,7 +210,7 @@ describe Mongo::Operation::Write::Bulk::Update do
210
210
  end
211
211
 
212
212
  it 'does not abort after first error' do
213
- failing_update.execute(authorized_primary)
213
+ failing_update.bulk_execute(authorized_primary)
214
214
  expect(authorized_collection.find(other: 'blah').count).to eq(1)
215
215
  end
216
216
  end
@@ -0,0 +1,114 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mongo::Operation::Update::Command do
4
+
5
+ let(:updates) { [{:q => { :foo => 1 },
6
+ :u => { :$set => { :bar => 1 } },
7
+ :multi => true,
8
+ :upsert => false }] }
9
+
10
+ let(:write_concern) do
11
+ Mongo::WriteConcern.get(WRITE_CONCERN)
12
+ end
13
+ let(:session) { nil }
14
+ let(:spec) do
15
+ { :updates => updates,
16
+ :db_name => TEST_DB,
17
+ :coll_name => TEST_COLL,
18
+ :write_concern => write_concern,
19
+ :ordered => true,
20
+ :session => session
21
+ }
22
+ end
23
+
24
+ let(:op) { described_class.new(spec) }
25
+
26
+ describe '#initialize' do
27
+
28
+ context 'spec' do
29
+
30
+ it 'sets the spec' do
31
+ expect(op.spec).to eq(spec)
32
+ end
33
+ end
34
+ end
35
+
36
+ describe '#==' do
37
+
38
+ context 'spec' do
39
+
40
+ context 'when two ops have the same specs' do
41
+ let(:other) { described_class.new(spec) }
42
+
43
+ it 'returns true' do
44
+ expect(op).to eq(other)
45
+ end
46
+ end
47
+
48
+ context 'when two ops have different specs' do
49
+ let(:other_updates) { [{:q => { :bar => 1 },
50
+ :u => { :$set => { :bar => 2 } },
51
+ :multi => true,
52
+ :upsert => false }] }
53
+ let(:other_spec) do
54
+ { :updates => other_updates,
55
+ :db_name => TEST_DB,
56
+ :coll_name => TEST_COLL,
57
+ :write_concern => Mongo::WriteConcern.get(WRITE_CONCERN),
58
+ :ordered => true
59
+ }
60
+ end
61
+ let(:other) { described_class.new(other_spec) }
62
+
63
+ it 'returns false' do
64
+ expect(op).not_to eq(other)
65
+ end
66
+ end
67
+ end
68
+ end
69
+
70
+ describe 'write concern' do
71
+
72
+ context 'when write concern is not specified' do
73
+
74
+ let(:spec) do
75
+ { :updates => updates,
76
+ :db_name => TEST_DB,
77
+ :coll_name => TEST_COLL,
78
+ :ordered => true
79
+ }
80
+ end
81
+
82
+ it 'does not include write concern in the selector' do
83
+ expect(op.send(:command, double('server'))[:writeConcern]).to be_nil
84
+ end
85
+ end
86
+
87
+ context 'when write concern is specified' do
88
+
89
+ it 'includes write concern in the selector' do
90
+ expect(op.send(:command, double('server'))[:writeConcern]).to eq(write_concern.options)
91
+ end
92
+ end
93
+ end
94
+
95
+ describe '#message' do
96
+
97
+ context 'when the server does not support OP_MSG' do
98
+
99
+ let(:expected_selector) do
100
+ {
101
+ :update => TEST_COLL,
102
+ :updates => updates,
103
+ :ordered => true,
104
+ :writeConcern => write_concern.options
105
+ }
106
+ end
107
+
108
+ it 'creates the correct Command message', unless: op_msg_enabled? do
109
+ expect(Mongo::Protocol::Query).to receive(:new).with(TEST_DB, '$cmd', expected_selector, { limit: -1 })
110
+ op.send(:message, authorized_primary)
111
+ end
112
+ end
113
+ end
114
+ end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Mongo::Operation::Write::Command::Update do
3
+ describe Mongo::Operation::Update::OpMsg do
4
4
 
5
5
  let(:updates) { [{:q => { :foo => 1 },
6
6
  :u => { :$set => { :bar => 1 } },
@@ -47,9 +47,9 @@ describe Mongo::Operation::Write::Command::Update do
47
47
 
48
48
  context 'when two ops have different specs' do
49
49
  let(:other_updates) { [{:q => { :bar => 1 },
50
- :u => { :$set => { :bar => 2 } },
51
- :multi => true,
52
- :upsert => false }] }
50
+ :u => { :$set => { :bar => 2 } },
51
+ :multi => true,
52
+ :upsert => false }] }
53
53
  let(:other_spec) do
54
54
  { :updates => other_updates,
55
55
  :db_name => TEST_DB,
@@ -80,14 +80,14 @@ describe Mongo::Operation::Write::Command::Update do
80
80
  end
81
81
 
82
82
  it 'does not include write concern in the selector' do
83
- expect(op.send(:selector)[:writeConcern]).to be_nil
83
+ expect(op.send(:command, authorized_primary)[:writeConcern]).to be_nil
84
84
  end
85
85
  end
86
86
 
87
87
  context 'when write concern is specified' do
88
88
 
89
89
  it 'includes write concern in the selector' do
90
- expect(op.send(:selector)[:writeConcern]).to eq(write_concern.options)
90
+ expect(op.send(:command, authorized_primary)[:writeConcern]).to eq(write_concern.options)
91
91
  end
92
92
  end
93
93
  end
@@ -108,10 +108,10 @@ describe Mongo::Operation::Write::Command::Update do
108
108
 
109
109
  let(:expected_payload_1) do
110
110
  {
111
- type: 1,
112
- payload: { identifier: 'updates',
113
- sequence: updates
114
- }
111
+ type: 1,
112
+ payload: { identifier: 'updates',
113
+ sequence: updates
114
+ }
115
115
  }
116
116
  end
117
117
 
@@ -119,7 +119,7 @@ describe Mongo::Operation::Write::Command::Update do
119
119
  authorized_client.start_session
120
120
  end
121
121
 
122
- context 'when the topology is replica set or sharded', if: (replica_set? || sharded?) && op_msg_enabled? do
122
+ context 'when the topology is replica set or sharded', if: test_sessions? do
123
123
 
124
124
  let(:expected_global_args) do
125
125
  global_args.merge(Mongo::Operation::CLUSTER_TIME => authorized_client.cluster.cluster_time)
@@ -132,7 +132,7 @@ describe Mongo::Operation::Write::Command::Update do
132
132
  end
133
133
  end
134
134
 
135
- context 'when the topology is standalone', if: standalone? && op_msg_enabled? do
135
+ context 'when the topology is standalone', if: standalone? && sessions_enabled? do
136
136
 
137
137
  let(:expected_global_args) do
138
138
  global_args
@@ -170,28 +170,54 @@ describe Mongo::Operation::Write::Command::Update do
170
170
  Mongo::WriteConcern.get(w: 0)
171
171
  end
172
172
 
173
- context 'when the topology is replica set or sharded', if: (replica_set? || sharded?) && op_msg_enabled? do
173
+ context 'when the session is implicit' do
174
174
 
175
- let(:expected_global_args) do
176
- global_args.delete(:lsid)
177
- global_args.merge(Mongo::Operation::CLUSTER_TIME => authorized_client.cluster.cluster_time)
175
+ let(:session) do
176
+ # Use client#get_session so the session is implicit
177
+ authorized_client.send(:get_session)
178
178
  end
179
179
 
180
- it 'creates the correct OP_MSG message' do
181
- authorized_client.command(ping:1)
182
- expect(Mongo::Protocol::Msg).to receive(:new).with([:more_to_come], {}, expected_global_args, expected_payload_1)
183
- op.send(:message, authorized_primary)
180
+ context 'when the topology is replica set or sharded', if: test_sessions? do
181
+
182
+ let(:expected_global_args) do
183
+ global_args.delete(:lsid)
184
+ global_args.merge(Mongo::Operation::CLUSTER_TIME => authorized_client.cluster.cluster_time)
185
+ end
186
+
187
+ it 'does not send a session id in the command' do
188
+ authorized_client.command(ping:1)
189
+ expect(Mongo::Protocol::Msg).to receive(:new).with([:more_to_come], {}, expected_global_args, expected_payload_1)
190
+ op.send(:message, authorized_primary)
191
+ end
192
+ end
193
+
194
+ context 'when the topology is standalone', if: standalone? && sessions_enabled? do
195
+
196
+ let(:expected_global_args) do
197
+ global_args.delete(:lsid)
198
+ global_args
199
+ end
200
+
201
+ it 'creates the correct OP_MSG message' do
202
+ authorized_client.command(ping:1)
203
+ expect(Mongo::Protocol::Msg).to receive(:new).with([:more_to_come], {}, expected_global_args, expected_payload_1)
204
+ op.send(:message, authorized_primary)
205
+ end
184
206
  end
185
207
  end
186
208
 
187
- context 'when the topology is standalone', if: standalone? && op_msg_enabled? do
209
+ context 'when the session is explicit', if: test_sessions? do
210
+
211
+ let(:session) do
212
+ authorized_client.start_session
213
+ end
188
214
 
189
215
  let(:expected_global_args) do
190
216
  global_args.delete(:lsid)
191
- global_args
217
+ global_args.merge(Mongo::Operation::CLUSTER_TIME => authorized_client.cluster.cluster_time)
192
218
  end
193
219
 
194
- it 'creates the correct OP_MSG message' do
220
+ it 'does not send a session id in the command' do
195
221
  authorized_client.command(ping:1)
196
222
  expect(Mongo::Protocol::Msg).to receive(:new).with([:more_to_come], {}, expected_global_args, expected_payload_1)
197
223
  op.send(:message, authorized_primary)
@@ -199,22 +225,5 @@ describe Mongo::Operation::Write::Command::Update do
199
225
  end
200
226
  end
201
227
  end
202
-
203
- context 'when the server does not support OP_MSG' do
204
-
205
- let(:expected_selector) do
206
- {
207
- :update => TEST_COLL,
208
- :updates => updates,
209
- :ordered => true,
210
- :writeConcern => write_concern.options
211
- }
212
- end
213
-
214
- it 'creates the correct Command message', unless: op_msg_enabled? do
215
- expect(Mongo::Protocol::Query).to receive(:new).with(TEST_DB, '$cmd', expected_selector, { limit: -1 })
216
- op.send(:message, authorized_primary)
217
- end
218
- end
219
228
  end
220
229
  end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Mongo::Operation::Write::Update do
3
+ describe Mongo::Operation::Update do
4
4
 
5
5
  let(:document) do
6
6
  { :q => { :foo => 1 },
@@ -10,7 +10,7 @@ describe Mongo::Operation::Write::Update do
10
10
  end
11
11
 
12
12
  let(:spec) do
13
- { :update => document,
13
+ { :updates => [ document ],
14
14
  :db_name => TEST_DB,
15
15
  :coll_name => TEST_COLL,
16
16
  :write_concern => Mongo::WriteConcern.get(:w => 1),
@@ -85,7 +85,7 @@ describe Mongo::Operation::Write::Update do
85
85
 
86
86
  let(:update) do
87
87
  described_class.new({
88
- update: document,
88
+ updates: [ document ],
89
89
  db_name: TEST_DB,
90
90
  coll_name: TEST_COLL,
91
91
  write_concern: Mongo::WriteConcern.get(:w => 1)
@@ -137,7 +137,7 @@ describe Mongo::Operation::Write::Update do
137
137
 
138
138
  let(:update) do
139
139
  described_class.new({
140
- update: document,
140
+ updates: [ document ],
141
141
  db_name: TEST_DB,
142
142
  coll_name: TEST_COLL,
143
143
  write_concern: Mongo::WriteConcern.get(:w => 1)
@@ -229,7 +229,7 @@ describe Mongo::Operation::Write::Update do
229
229
 
230
230
  let(:update) do
231
231
  described_class.new({
232
- update: document,
232
+ updates: [ document ],
233
233
  db_name: TEST_DB,
234
234
  coll_name: TEST_COLL,
235
235
  write_concern: Mongo::WriteConcern.get(:w => 0)
@@ -245,7 +245,7 @@ describe Mongo::Operation::Write::Update do
245
245
  end
246
246
 
247
247
  before do
248
- expect(update).to receive(:execute_message).and_call_original
248
+ expect(Mongo::Operation::Update::Legacy).to receive(:new).and_call_original
249
249
  end
250
250
 
251
251
  it 'uses op codes instead of write commands' do