mongo 2.1.0.beta → 2.2.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 (342) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +10 -3
  4. data/Rakefile +1 -7
  5. data/lib/mongo/address/ipv4.rb +6 -1
  6. data/lib/mongo/address/unix.rb +2 -2
  7. data/lib/mongo/address.rb +32 -10
  8. data/lib/mongo/auth/cr/conversation.rb +1 -1
  9. data/lib/mongo/auth/ldap/conversation.rb +7 -3
  10. data/lib/mongo/auth/scram/conversation.rb +9 -3
  11. data/lib/mongo/auth/user/view.rb +23 -2
  12. data/lib/mongo/auth/x509/conversation.rb +1 -1
  13. data/lib/mongo/bulk_write/combineable.rb +51 -0
  14. data/lib/mongo/bulk_write/ordered_combiner.rb +55 -0
  15. data/lib/mongo/bulk_write/result.rb +61 -8
  16. data/lib/mongo/bulk_write/result_combiner.rb +117 -0
  17. data/lib/mongo/bulk_write/transformable.rb +132 -0
  18. data/lib/mongo/bulk_write/unordered_combiner.rb +52 -0
  19. data/lib/mongo/bulk_write/validatable.rb +62 -0
  20. data/lib/mongo/bulk_write.rb +164 -23
  21. data/lib/mongo/client.rb +75 -18
  22. data/lib/mongo/cluster/topology/replica_set.rb +8 -6
  23. data/lib/mongo/cluster/topology/unknown.rb +5 -2
  24. data/lib/mongo/cluster.rb +85 -5
  25. data/lib/mongo/collection/view/aggregation.rb +19 -45
  26. data/lib/mongo/collection/view/builder/aggregation.rb +98 -0
  27. data/lib/mongo/collection/view/builder/find_command.rb +111 -0
  28. data/lib/mongo/collection/view/builder/flags.rb +62 -0
  29. data/lib/mongo/collection/view/builder/map_reduce.rb +134 -0
  30. data/lib/mongo/collection/view/builder/modifiers.rb +80 -0
  31. data/lib/mongo/collection/view/builder/op_query.rb +83 -0
  32. data/lib/mongo/collection/view/builder.rb +20 -0
  33. data/lib/mongo/collection/view/explainable.rb +15 -0
  34. data/lib/mongo/collection/view/immutable.rb +4 -11
  35. data/lib/mongo/collection/view/iterable.rb +40 -5
  36. data/lib/mongo/collection/view/map_reduce.rb +67 -37
  37. data/lib/mongo/collection/view/readable.rb +114 -100
  38. data/lib/mongo/collection/view/writable.rb +46 -22
  39. data/lib/mongo/collection/view.rb +25 -22
  40. data/lib/mongo/collection.rb +130 -12
  41. data/lib/mongo/cursor/builder/get_more_command.rb +71 -0
  42. data/lib/mongo/cursor/builder/kill_cursors_command.rb +62 -0
  43. data/lib/mongo/cursor/builder/op_get_more.rb +61 -0
  44. data/lib/mongo/cursor/builder/op_kill_cursors.rb +56 -0
  45. data/lib/mongo/cursor/builder.rb +18 -0
  46. data/lib/mongo/cursor.rb +76 -21
  47. data/lib/mongo/database/view.rb +11 -6
  48. data/lib/mongo/database.rb +16 -6
  49. data/lib/mongo/dbref.rb +9 -9
  50. data/lib/mongo/{bulk_write/unordered_bulk_write.rb → error/closed_stream.rb} +12 -21
  51. data/lib/mongo/{bulk_write/ordered_bulk_write.rb → error/extra_file_chunk.rb} +13 -27
  52. data/lib/mongo/error/file_not_found.rb +37 -0
  53. data/lib/mongo/error/invalid_file.rb +2 -2
  54. data/lib/mongo/error/invalid_file_revision.rb +37 -0
  55. data/lib/mongo/error/invalid_uri.rb +5 -4
  56. data/lib/mongo/error/invalid_write_concern.rb +35 -0
  57. data/lib/mongo/error/missing_file_chunk.rb +38 -0
  58. data/lib/mongo/error/operation_failure.rb +33 -2
  59. data/lib/mongo/error/unchangeable_collection_option.rb +38 -0
  60. data/lib/mongo/error/unexpected_chunk_length.rb +39 -0
  61. data/lib/mongo/error.rb +8 -0
  62. data/lib/mongo/grid/file/chunk.rb +9 -9
  63. data/lib/mongo/grid/file/{metadata.rb → info.rb} +41 -39
  64. data/lib/mongo/grid/file.rb +12 -9
  65. data/lib/mongo/grid/fs_bucket.rb +448 -0
  66. data/lib/mongo/grid/stream/read.rb +208 -0
  67. data/lib/mongo/grid/stream/write.rb +187 -0
  68. data/lib/mongo/grid/stream.rb +64 -0
  69. data/lib/mongo/grid.rb +2 -1
  70. data/lib/mongo/index/view.rb +7 -4
  71. data/lib/mongo/index.rb +5 -0
  72. data/lib/mongo/loggable.rb +34 -57
  73. data/lib/mongo/logger.rb +16 -78
  74. data/lib/mongo/monitoring/command_log_subscriber.rb +38 -14
  75. data/lib/mongo/monitoring/event/command_started.rb +2 -1
  76. data/lib/mongo/monitoring/event/command_succeeded.rb +24 -2
  77. data/lib/mongo/monitoring/event/secure.rb +58 -0
  78. data/lib/mongo/monitoring/event.rb +1 -0
  79. data/lib/mongo/monitoring/publishable.rb +22 -12
  80. data/lib/mongo/monitoring.rb +1 -5
  81. data/lib/mongo/operation/commands/aggregate/result.rb +89 -0
  82. data/lib/mongo/operation/commands/aggregate.rb +64 -0
  83. data/lib/mongo/operation/commands/collections_info/result.rb +41 -0
  84. data/lib/mongo/operation/{read → commands}/collections_info.rb +5 -3
  85. data/lib/mongo/operation/commands/command.rb +47 -0
  86. data/lib/mongo/operation/commands/find/result.rb +62 -0
  87. data/lib/mongo/operation/commands/find.rb +27 -0
  88. data/lib/mongo/operation/commands/get_more/result.rb +62 -0
  89. data/lib/mongo/operation/commands/get_more.rb +27 -0
  90. data/lib/mongo/operation/{read → commands}/indexes.rb +9 -6
  91. data/lib/mongo/operation/{list_collections → commands/list_collections}/result.rb +1 -21
  92. data/lib/mongo/operation/{read → commands}/list_collections.rb +4 -32
  93. data/lib/mongo/operation/{list_indexes → commands/list_indexes}/result.rb +1 -21
  94. data/lib/mongo/operation/{read → commands}/list_indexes.rb +3 -33
  95. data/lib/mongo/operation/commands/map_reduce/result.rb +119 -0
  96. data/lib/mongo/operation/commands/map_reduce.rb +49 -0
  97. data/lib/mongo/operation/commands/parallel_scan/result.rb +64 -0
  98. data/lib/mongo/operation/commands/parallel_scan.rb +52 -0
  99. data/lib/mongo/operation/commands/user_query.rb +71 -0
  100. data/lib/mongo/operation/commands/users_info/result.rb +38 -0
  101. data/lib/mongo/operation/commands/users_info.rb +48 -0
  102. data/lib/mongo/operation/commands.rb +26 -0
  103. data/lib/mongo/operation/executable.rb +4 -68
  104. data/lib/mongo/operation/kill_cursors.rb +3 -3
  105. data/lib/mongo/operation/object_id_generator.rb +36 -0
  106. data/lib/mongo/operation/read/get_more.rb +2 -22
  107. data/lib/mongo/operation/read/query/result.rb +40 -0
  108. data/lib/mongo/operation/read/query.rb +4 -21
  109. data/lib/mongo/operation/read.rb +0 -4
  110. data/lib/mongo/operation/{read_preferrable.rb → read_preference.rb} +3 -2
  111. data/lib/mongo/operation/result.rb +43 -1
  112. data/lib/mongo/operation/specifiable.rb +59 -1
  113. data/lib/mongo/operation/write/bulk/bulkable.rb +83 -0
  114. data/lib/mongo/operation/write/bulk/delete/result.rb +67 -0
  115. data/lib/mongo/operation/write/bulk/delete.rb +71 -0
  116. data/lib/mongo/operation/write/bulk/insert/result.rb +129 -0
  117. data/lib/mongo/operation/write/bulk/insert.rb +96 -0
  118. data/lib/mongo/operation/write/bulk/legacy_mergable.rb +87 -0
  119. data/lib/mongo/operation/write/bulk/mergable.rb +71 -0
  120. data/lib/mongo/operation/write/bulk/update/result.rb +174 -0
  121. data/lib/mongo/operation/write/bulk/update.rb +81 -0
  122. data/lib/mongo/operation/write/bulk.rb +6 -3
  123. data/lib/mongo/operation/write/command/create_index.rb +0 -1
  124. data/lib/mongo/operation/write/command/create_user.rb +0 -1
  125. data/lib/mongo/operation/write/command/delete.rb +3 -3
  126. data/lib/mongo/operation/write/command/drop_index.rb +0 -1
  127. data/lib/mongo/operation/write/command/insert.rb +4 -3
  128. data/lib/mongo/operation/write/command/remove_user.rb +0 -1
  129. data/lib/mongo/operation/write/command/update.rb +6 -4
  130. data/lib/mongo/operation/write/command/update_user.rb +0 -1
  131. data/lib/mongo/operation/write/command/writable.rb +13 -18
  132. data/lib/mongo/operation/write/create_index.rb +4 -27
  133. data/lib/mongo/operation/write/create_user.rb +4 -30
  134. data/lib/mongo/operation/write/delete.rb +6 -29
  135. data/lib/mongo/operation/write/drop_index.rb +3 -3
  136. data/lib/mongo/operation/write/gle.rb +49 -0
  137. data/lib/mongo/operation/write/idable.rb +24 -2
  138. data/lib/mongo/operation/write/insert.rb +2 -24
  139. data/lib/mongo/operation/write/remove_user.rb +4 -27
  140. data/lib/mongo/operation/write/update.rb +13 -36
  141. data/lib/mongo/operation/write/update_user.rb +4 -30
  142. data/lib/mongo/operation/write/write_command_enabled.rb +53 -0
  143. data/lib/mongo/operation/write.rb +2 -0
  144. data/lib/mongo/operation.rb +33 -5
  145. data/lib/mongo/options/mapper.rb +26 -2
  146. data/lib/mongo/options/redacted.rb +156 -0
  147. data/lib/mongo/options.rb +1 -0
  148. data/lib/mongo/protocol/bit_vector.rb +11 -9
  149. data/lib/mongo/protocol/delete.rb +78 -3
  150. data/lib/mongo/protocol/get_more.rb +59 -2
  151. data/lib/mongo/protocol/insert.rb +73 -1
  152. data/lib/mongo/protocol/kill_cursors.rb +66 -4
  153. data/lib/mongo/protocol/message.rb +44 -20
  154. data/lib/mongo/protocol/query.rb +153 -65
  155. data/lib/mongo/protocol/reply.rb +92 -1
  156. data/lib/mongo/protocol/serializers.rb +49 -40
  157. data/lib/mongo/protocol/update.rb +93 -1
  158. data/lib/mongo/retryable.rb +101 -0
  159. data/lib/mongo/server/connectable.rb +28 -8
  160. data/lib/mongo/server/connection.rb +52 -10
  161. data/lib/mongo/server/connection_pool/queue.rb +15 -0
  162. data/lib/mongo/server/connection_pool.rb +12 -15
  163. data/lib/mongo/server/description/features.rb +4 -2
  164. data/lib/mongo/server/description.rb +39 -3
  165. data/lib/mongo/server/monitor/connection.rb +49 -28
  166. data/lib/mongo/server/monitor.rb +3 -14
  167. data/lib/mongo/server.rb +31 -4
  168. data/lib/mongo/server_selector/selectable.rb +58 -32
  169. data/lib/mongo/server_selector.rb +19 -10
  170. data/lib/mongo/socket/ssl.rb +4 -1
  171. data/lib/mongo/socket/tcp.rb +2 -2
  172. data/lib/mongo/socket/unix.rb +5 -8
  173. data/lib/mongo/socket.rb +11 -4
  174. data/lib/mongo/uri.rb +245 -139
  175. data/lib/mongo/version.rb +1 -1
  176. data/lib/mongo/write_concern.rb +21 -6
  177. data/lib/mongo.rb +4 -4
  178. data/mongo.gemspec +1 -2
  179. data/spec/mongo/address/unix_spec.rb +1 -1
  180. data/spec/mongo/address_spec.rb +25 -0
  181. data/spec/mongo/auth/ldap/conversation_spec.rb +43 -0
  182. data/spec/mongo/auth/user/view_spec.rb +26 -1
  183. data/spec/mongo/bulk_write/ordered_combiner_spec.rb +284 -0
  184. data/spec/mongo/bulk_write/unordered_combiner_spec.rb +239 -0
  185. data/spec/mongo/bulk_write_spec.rb +385 -161
  186. data/spec/mongo/client_spec.rb +193 -23
  187. data/spec/mongo/cluster/topology/replica_set_spec.rb +2 -0
  188. data/spec/mongo/collection/view/aggregation_spec.rb +65 -0
  189. data/spec/mongo/collection/view/builder/find_command_spec.rb +167 -0
  190. data/spec/mongo/collection/view/builder/flags_spec.rb +106 -0
  191. data/spec/mongo/collection/view/builder/modifiers_spec.rb +210 -0
  192. data/spec/mongo/collection/view/builder/op_query_spec.rb +154 -0
  193. data/spec/mongo/collection/view/explainable_spec.rb +1 -2
  194. data/spec/mongo/collection/view/immutable_spec.rb +54 -0
  195. data/spec/mongo/collection/view/map_reduce_spec.rb +104 -9
  196. data/spec/mongo/collection/view/readable_spec.rb +109 -112
  197. data/spec/mongo/collection/view_spec.rb +119 -487
  198. data/spec/mongo/collection_spec.rb +1002 -33
  199. data/spec/mongo/command_monitoring_spec.rb +64 -0
  200. data/spec/mongo/connection_string_spec.rb +115 -0
  201. data/spec/mongo/cursor/builder/get_more_command_spec.rb +160 -0
  202. data/spec/mongo/cursor/builder/op_get_more_spec.rb +52 -0
  203. data/spec/mongo/cursor_spec.rb +10 -60
  204. data/spec/mongo/database_spec.rb +81 -12
  205. data/spec/mongo/dbref_spec.rb +4 -4
  206. data/spec/mongo/grid/file/chunk_spec.rb +6 -6
  207. data/spec/mongo/grid/file/{metadata_spec.rb → info_spec.rb} +29 -17
  208. data/spec/mongo/grid/file_spec.rb +8 -8
  209. data/spec/mongo/grid/fs_bucket_spec.rb +1020 -0
  210. data/spec/mongo/grid/stream/read_spec.rb +275 -0
  211. data/spec/mongo/grid/stream/write_spec.rb +440 -0
  212. data/spec/mongo/grid/stream_spec.rb +48 -0
  213. data/spec/mongo/gridfs_spec.rb +50 -0
  214. data/spec/mongo/index/view_spec.rb +41 -0
  215. data/spec/mongo/logger_spec.rb +0 -40
  216. data/spec/mongo/monitoring/command_log_subscriber_spec.rb +76 -0
  217. data/spec/mongo/monitoring/event/command_started_spec.rb +26 -0
  218. data/spec/mongo/monitoring/event/command_succeeded_spec.rb +26 -0
  219. data/spec/mongo/monitoring/event/secure_spec.rb +57 -0
  220. data/spec/mongo/operation/{aggregate → commands/aggregate}/result_spec.rb +1 -1
  221. data/spec/mongo/operation/commands/aggregate_spec.rb +69 -0
  222. data/spec/mongo/operation/{read → commands}/collections_info_spec.rb +1 -1
  223. data/spec/mongo/operation/{command_spec.rb → commands/command_spec.rb} +1 -19
  224. data/spec/mongo/operation/{read → commands}/indexes_spec.rb +1 -1
  225. data/spec/mongo/operation/{map_reduce_spec.rb → commands/map_reduce_spec.rb} +1 -19
  226. data/spec/mongo/operation/kill_cursors_spec.rb +1 -17
  227. data/spec/mongo/operation/read/get_more_spec.rb +0 -16
  228. data/spec/mongo/operation/read/query_spec.rb +19 -16
  229. data/spec/mongo/operation/{read_preferrable_spec.rb → read_preference_spec.rb} +11 -11
  230. data/spec/mongo/operation/result_spec.rb +19 -0
  231. data/spec/mongo/operation/write/bulk/{bulk_delete_spec.rb → delete_spec.rb} +17 -28
  232. data/spec/mongo/operation/write/bulk/{bulk_insert_spec.rb → insert_spec.rb} +1 -12
  233. data/spec/mongo/operation/write/bulk/{bulk_update_spec.rb → update_spec.rb} +7 -18
  234. data/spec/mongo/operation/write/command/delete_spec.rb +18 -9
  235. data/spec/mongo/operation/write/command/insert_spec.rb +18 -9
  236. data/spec/mongo/operation/write/command/update_spec.rb +18 -9
  237. data/spec/mongo/operation/write/delete_spec.rb +3 -3
  238. data/spec/mongo/operation/write/insert_spec.rb +0 -11
  239. data/spec/mongo/operation/write/update_spec.rb +6 -6
  240. data/spec/mongo/options/redacted_spec.rb +350 -0
  241. data/spec/mongo/protocol/delete_spec.rb +4 -4
  242. data/spec/mongo/protocol/get_more_spec.rb +4 -4
  243. data/spec/mongo/protocol/insert_spec.rb +3 -3
  244. data/spec/mongo/protocol/kill_cursors_spec.rb +8 -6
  245. data/spec/mongo/protocol/query_spec.rb +21 -7
  246. data/spec/mongo/protocol/update_spec.rb +5 -5
  247. data/spec/mongo/retryable_spec.rb +221 -0
  248. data/spec/mongo/server/connection_pool/queue_spec.rb +16 -0
  249. data/spec/mongo/server/connection_pool_spec.rb +42 -6
  250. data/spec/mongo/server/connection_spec.rb +86 -1
  251. data/spec/mongo/server/description/features_spec.rb +25 -0
  252. data/spec/mongo/server/description_spec.rb +42 -0
  253. data/spec/mongo/server/monitor_spec.rb +44 -0
  254. data/spec/mongo/server_discovery_and_monitoring_spec.rb +25 -59
  255. data/spec/mongo/server_selection_rtt_spec.rb +37 -57
  256. data/spec/mongo/server_selection_spec.rb +5 -3
  257. data/spec/mongo/server_selector/nearest_spec.rb +35 -27
  258. data/spec/mongo/server_selector/primary_preferred_spec.rb +32 -30
  259. data/spec/mongo/server_selector/primary_spec.rb +21 -14
  260. data/spec/mongo/server_selector/secondary_preferred_spec.rb +28 -26
  261. data/spec/mongo/server_selector/secondary_spec.rb +24 -22
  262. data/spec/mongo/server_selector_spec.rb +87 -24
  263. data/spec/mongo/server_spec.rb +78 -15
  264. data/spec/mongo/socket/ssl_spec.rb +101 -57
  265. data/spec/mongo/socket/unix_spec.rb +52 -0
  266. data/spec/mongo/uri_spec.rb +271 -59
  267. data/spec/mongo/write_concern_spec.rb +126 -0
  268. data/spec/spec_helper.rb +29 -23
  269. data/spec/support/authorization.rb +4 -5
  270. data/spec/support/command_monitoring/bulkWrite.yml +73 -0
  271. data/spec/support/command_monitoring/command.yml +42 -0
  272. data/spec/support/command_monitoring/deleteMany.yml +55 -0
  273. data/spec/support/command_monitoring/deleteOne.yml +55 -0
  274. data/spec/support/command_monitoring/find.yml +268 -0
  275. data/spec/support/command_monitoring/insertMany.yml +81 -0
  276. data/spec/support/command_monitoring/insertOne.yml +51 -0
  277. data/spec/support/command_monitoring/updateMany.yml +67 -0
  278. data/spec/support/command_monitoring/updateOne.yml +95 -0
  279. data/spec/support/command_monitoring.rb +373 -0
  280. data/spec/support/connection_string.rb +228 -0
  281. data/spec/support/connection_string_tests/invalid-uris.yml +193 -0
  282. data/spec/support/connection_string_tests/valid-auth.yml +256 -0
  283. data/spec/support/connection_string_tests/valid-host_identifiers.yml +121 -0
  284. data/spec/support/connection_string_tests/valid-options.yml +30 -0
  285. data/spec/support/connection_string_tests/valid-unix_socket-absolute.yml +197 -0
  286. data/spec/support/connection_string_tests/valid-unix_socket-relative.yml +213 -0
  287. data/spec/support/connection_string_tests/valid-warnings.yml +55 -0
  288. data/spec/support/crud/read.rb +14 -10
  289. data/spec/support/crud/write.rb +36 -9
  290. data/spec/support/crud.rb +10 -2
  291. data/spec/support/gridfs.rb +637 -0
  292. data/spec/support/gridfs_tests/delete.yml +157 -0
  293. data/spec/support/gridfs_tests/download.yml +210 -0
  294. data/spec/support/gridfs_tests/download_by_name.yml +113 -0
  295. data/spec/support/gridfs_tests/upload.yml +158 -0
  296. data/spec/support/matchers.rb +2 -2
  297. data/spec/support/sdam/rs/equal_electionids.yml +1 -2
  298. data/spec/support/sdam/rs/new_primary_new_electionid.yml +0 -3
  299. data/spec/support/sdam/rs/primary_mismatched_me.yml +37 -0
  300. data/spec/support/sdam/rs/primary_to_no_primary_mismatched_me.yml +75 -0
  301. data/spec/support/sdam/rs/rsother_discovered.yml +24 -3
  302. data/spec/support/sdam/rs/secondary_mismatched_me.yml +37 -0
  303. data/spec/support/sdam/rs/stepdown_change_set_name.yml +59 -0
  304. data/spec/support/sdam/single/direct_connection_rsarbiter.yml +1 -1
  305. data/spec/support/sdam/single/direct_connection_rsprimary.yml +1 -1
  306. data/spec/support/sdam/single/direct_connection_rssecondary.yml +1 -1
  307. data/spec/support/sdam/single/direct_connection_slave.yml +1 -1
  308. data/spec/support/sdam/single/direct_connection_standalone.yml +1 -1
  309. data/spec/support/sdam/single/not_ok_response.yml +0 -1
  310. data/spec/support/server_discovery_and_monitoring.rb +3 -1
  311. data/spec/support/server_selection.rb +3 -1
  312. data/spec/support/shared/bulk_write.rb +192 -0
  313. data/spec/support/shared/protocol.rb +5 -5
  314. data/spec/support/shared/server_selector.rb +78 -13
  315. data/spec/support/travis.rb +1 -1
  316. data.tar.gz.sig +0 -0
  317. metadata +211 -72
  318. metadata.gz.sig +0 -0
  319. data/lib/mongo/bulk_write/bulk_writable.rb +0 -252
  320. data/lib/mongo/bulk_write/deletable.rb +0 -57
  321. data/lib/mongo/bulk_write/insertable.rb +0 -49
  322. data/lib/mongo/bulk_write/replacable.rb +0 -58
  323. data/lib/mongo/bulk_write/updatable.rb +0 -69
  324. data/lib/mongo/grid/fs.rb +0 -146
  325. data/lib/mongo/operation/aggregate/result.rb +0 -103
  326. data/lib/mongo/operation/aggregate.rb +0 -108
  327. data/lib/mongo/operation/command.rb +0 -61
  328. data/lib/mongo/operation/map_reduce/result.rb +0 -122
  329. data/lib/mongo/operation/map_reduce.rb +0 -95
  330. data/lib/mongo/operation/parallel_scan/result.rb +0 -72
  331. data/lib/mongo/operation/parallel_scan.rb +0 -76
  332. data/lib/mongo/operation/write/bulk/bulk_delete/result.rb +0 -75
  333. data/lib/mongo/operation/write/bulk/bulk_delete.rb +0 -145
  334. data/lib/mongo/operation/write/bulk/bulk_insert/result.rb +0 -130
  335. data/lib/mongo/operation/write/bulk/bulk_insert.rb +0 -132
  336. data/lib/mongo/operation/write/bulk/bulk_mergable.rb +0 -67
  337. data/lib/mongo/operation/write/bulk/bulk_update/result.rb +0 -174
  338. data/lib/mongo/operation/write/bulk/bulk_update.rb +0 -154
  339. data/lib/mongo/operation/write/bulk/legacy_bulk_mergable.rb +0 -83
  340. data/spec/mongo/grid/fs_spec.rb +0 -160
  341. data/spec/mongo/loggable_spec.rb +0 -63
  342. data/spec/mongo/operation/aggregate_spec.rb +0 -127
@@ -18,6 +18,40 @@ describe Mongo::Collection::View::Readable do
18
18
  authorized_collection.delete_many
19
19
  end
20
20
 
21
+ shared_examples_for 'a read concern aware operation' do
22
+
23
+ context 'when a read concern is provided', if: find_command_enabled? do
24
+
25
+ let(:new_view) do
26
+ Mongo::Collection::View.new(new_collection, selector, options)
27
+ end
28
+
29
+ context 'when the read concern is valid' do
30
+
31
+ let(:new_collection) do
32
+ authorized_collection.with(read_concern: { level: 'local' })
33
+ end
34
+
35
+ it 'sends the read concern' do
36
+ expect { result }.to_not raise_error
37
+ end
38
+ end
39
+
40
+ context 'when the read concern is not valid' do
41
+
42
+ let(:new_collection) do
43
+ authorized_collection.with(read_concern: { level: 'na' })
44
+ end
45
+
46
+ it 'raises an exception' do
47
+ expect {
48
+ result
49
+ }.to raise_error(Mongo::Error::OperationFailure)
50
+ end
51
+ end
52
+ end
53
+ end
54
+
21
55
  describe '#allow_partial_results' do
22
56
 
23
57
  let(:new_view) do
@@ -25,7 +59,7 @@ describe Mongo::Collection::View::Readable do
25
59
  end
26
60
 
27
61
  it 'sets the flag' do
28
- expect(new_view.send(:flags)).to include(:partial)
62
+ expect(new_view.options[:allow_partial_results]).to be true
29
63
  end
30
64
 
31
65
  it 'returns a new View' do
@@ -60,6 +94,15 @@ describe Mongo::Collection::View::Readable do
60
94
  view.aggregate(pipeline)
61
95
  end
62
96
 
97
+ context 'when incorporating read concern' do
98
+
99
+ let(:result) do
100
+ new_view.aggregate(pipeline, options).to_a
101
+ end
102
+
103
+ it_behaves_like 'a read concern aware operation'
104
+ end
105
+
63
106
  context 'when not iterating the aggregation' do
64
107
 
65
108
  it 'returns the aggregation object' do
@@ -127,6 +170,15 @@ describe Mongo::Collection::View::Readable do
127
170
  view.map_reduce(map, reduce)
128
171
  end
129
172
 
173
+ context 'when incorporating read concern' do
174
+
175
+ let(:result) do
176
+ new_view.map_reduce(map, reduce, options).to_a
177
+ end
178
+
179
+ it_behaves_like 'a read concern aware operation'
180
+ end
181
+
130
182
  context 'when not iterating the map/reduce' do
131
183
 
132
184
  it 'returns the map/reduce object' do
@@ -218,6 +270,19 @@ describe Mongo::Collection::View::Readable do
218
270
  authorized_collection.delete_many
219
271
  end
220
272
 
273
+ let(:result) do
274
+ view.count(options)
275
+ end
276
+
277
+ context 'when incorporating read concern' do
278
+
279
+ let(:result) do
280
+ new_view.count(options)
281
+ end
282
+
283
+ it_behaves_like 'a read concern aware operation'
284
+ end
285
+
221
286
  context 'when a selector is provided' do
222
287
 
223
288
  let(:selector) do
@@ -227,6 +292,10 @@ describe Mongo::Collection::View::Readable do
227
292
  it 'returns the count of matching documents' do
228
293
  expect(view.count).to eq(1)
229
294
  end
295
+
296
+ it 'returns an integer' do
297
+ expect(view.count).to be_a(Integer)
298
+ end
230
299
  end
231
300
 
232
301
  context 'when no selector is provided' do
@@ -253,6 +322,15 @@ describe Mongo::Collection::View::Readable do
253
322
 
254
323
  describe '#distinct' do
255
324
 
325
+ context 'when incorporating read concern' do
326
+
327
+ let(:result) do
328
+ new_view.distinct(:field, options)
329
+ end
330
+
331
+ it_behaves_like 'a read concern aware operation'
332
+ end
333
+
256
334
  context 'when a selector is provided' do
257
335
 
258
336
  let(:selector) do
@@ -318,7 +396,7 @@ describe Mongo::Collection::View::Readable do
318
396
  end
319
397
 
320
398
  it 'returns the distinct values' do
321
- expect(distinct).to eq([ 'test1', 'test2', 'test3' ])
399
+ expect(distinct.sort).to eq([ 'test1', 'test2', 'test3' ])
322
400
  end
323
401
  end
324
402
 
@@ -329,7 +407,7 @@ describe Mongo::Collection::View::Readable do
329
407
  end
330
408
 
331
409
  it 'returns the distinct values' do
332
- expect(distinct).to eq([ 'test1', 'test2', 'test3' ])
410
+ expect(distinct.sort).to eq([ 'test1', 'test2', 'test3' ])
333
411
  end
334
412
  end
335
413
 
@@ -360,7 +438,7 @@ describe Mongo::Collection::View::Readable do
360
438
  end
361
439
 
362
440
  it 'returns the distinct values' do
363
- expect(distinct).to eq([ 'test1', 'test2', 'test3' ])
441
+ expect(distinct.sort).to eq([ 'test1', 'test2', 'test3' ])
364
442
  end
365
443
  end
366
444
 
@@ -465,53 +543,40 @@ describe Mongo::Collection::View::Readable do
465
543
  end
466
544
  end
467
545
 
468
- describe '#no_cursor_timeout' do
546
+ describe '#max_value' do
469
547
 
470
548
  let(:new_view) do
471
- view.no_cursor_timeout
549
+ view.max_value(_id: 1)
472
550
  end
473
551
 
474
- it 'sets the flag' do
475
- expect(new_view.send(:flags)).to include(:no_cursor_timeout)
476
- end
477
-
478
- it 'returns a new View' do
479
- expect(new_view).not_to be(view)
552
+ it 'sets the value in the options' do
553
+ expect(new_view.max_value).to eq('_id' => 1)
480
554
  end
481
555
  end
482
556
 
483
- describe '#parallel_scan', unless: sharded? do
557
+ describe '#min_value' do
484
558
 
485
- let(:documents) do
486
- (1..200).map do |i|
487
- { name: "testing-scan-#{i}" }
488
- end
559
+ let(:new_view) do
560
+ view.min_value(_id: 1)
489
561
  end
490
562
 
491
- before do
492
- authorized_collection.insert_many(documents)
563
+ it 'sets the value in the options' do
564
+ expect(new_view.min_value).to eq('_id' => 1)
493
565
  end
566
+ end
494
567
 
495
- let(:cursors) do
496
- view.parallel_scan(2)
497
- end
568
+ describe '#no_cursor_timeout' do
498
569
 
499
- it 'returns an array of cursors', if: write_command_enabled? do
500
- cursors.each do |cursor|
501
- expect(cursor.class).to be(Mongo::Cursor)
502
- end
570
+ let(:new_view) do
571
+ view.no_cursor_timeout
503
572
  end
504
573
 
505
- it 'returns the correct number of documents', if: write_command_enabled? do
506
- expect(
507
- cursors.reduce(0) { |total, cursor| total + cursor.to_a.size }
508
- ).to eq(200)
574
+ it 'sets the flag' do
575
+ expect(new_view.options[:no_cursor_timeout]).to be true
509
576
  end
510
577
 
511
- it 'raises an error', unless: write_command_enabled? do
512
- expect {
513
- cursors
514
- }.to raise_error(Mongo::Error::OperationFailure)
578
+ it 'returns a new View' do
579
+ expect(new_view).not_to be(view)
515
580
  end
516
581
  end
517
582
 
@@ -527,6 +592,10 @@ describe Mongo::Collection::View::Readable do
527
592
  { 'y' => 1 }
528
593
  end
529
594
 
595
+ before do
596
+ authorized_collection.insert_one(y: 'value', a: 'other_value')
597
+ end
598
+
530
599
  it 'sets the projection' do
531
600
  new_view = view.projection(new_projection)
532
601
  expect(new_view.projection).to eq(new_projection)
@@ -535,6 +604,10 @@ describe Mongo::Collection::View::Readable do
535
604
  it 'returns a new View' do
536
605
  expect(view.projection(new_projection)).not_to be(view)
537
606
  end
607
+
608
+ it 'returns only that field on the collection' do
609
+ expect(view.projection(new_projection).first.keys).to match_array(['_id', 'y'])
610
+ end
538
611
  end
539
612
 
540
613
  context 'when projection is not specified' do
@@ -645,13 +718,13 @@ describe Mongo::Collection::View::Readable do
645
718
  describe '#modifiers' do
646
719
 
647
720
  let(:options) do
648
- { :modifiers => { :$orderby => Mongo::Index::ASCENDING } }
721
+ { :modifiers => { '$orderby' => 1 } }
649
722
  end
650
723
 
651
724
  context 'when a modifiers document is specified' do
652
725
 
653
726
  let(:new_modifiers) do
654
- { :modifiers => { :$orderby => Mongo::Index::DESCENDING } }
727
+ { '$orderby' => -1 }
655
728
  end
656
729
 
657
730
  it 'sets the new_modifiers document' do
@@ -779,81 +852,5 @@ describe Mongo::Collection::View::Readable do
779
852
  expect(view.sort).to eq(options[:sort])
780
853
  end
781
854
  end
782
-
783
- context 'when an option is a cursor flag' do
784
-
785
- let(:query_spec_options) do
786
- view.send(:query_spec)[:options]
787
- end
788
-
789
- context 'when allow_partial_results is set as an option' do
790
-
791
- let(:options) do
792
- { :allow_partial_results => true }
793
- end
794
-
795
- it 'sets the cursor flag' do
796
- expect(query_spec_options[:flags]).to eq([:partial])
797
- end
798
-
799
- context 'when allow_partial_results is also called as a method' do
800
-
801
- before do
802
- view.allow_partial_results
803
- end
804
-
805
- it 'sets only one cursor flag' do
806
- expect(query_spec_options[:flags]).to eq([:partial])
807
- end
808
- end
809
- end
810
-
811
- context 'when oplog_replay is set as an option' do
812
-
813
- let(:options) do
814
- { :oplog_replay => true }
815
- end
816
-
817
- it 'sets the cursor flag' do
818
- expect(query_spec_options[:flags]).to eq([:oplog_replay])
819
- end
820
- end
821
-
822
- context 'when no_cursor_timeout is set as an option' do
823
-
824
- let(:options) do
825
- { :no_cursor_timeout => true }
826
- end
827
-
828
- it 'sets the cursor flag' do
829
- expect(query_spec_options[:flags]).to eq([:no_cursor_timeout])
830
- end
831
- end
832
-
833
- context 'when cursor_type is set as an option' do
834
-
835
- context 'when :tailable is the cursor type' do
836
-
837
- let(:options) do
838
- { :cursor_type => :tailable }
839
- end
840
-
841
- it 'sets the cursor flag' do
842
- expect(query_spec_options[:flags]).to eq([:tailable_cursor])
843
- end
844
- end
845
-
846
- context 'when :tailable_await is the cursor type' do
847
-
848
- let(:options) do
849
- { :cursor_type => :tailable_await }
850
- end
851
-
852
- it 'sets the cursor flags' do
853
- expect(query_spec_options[:flags]).to eq([:await_data, :tailable_cursor])
854
- end
855
- end
856
- end
857
- end
858
855
  end
859
856
  end