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
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Mongo::Operation::ReadPreferrable do
3
+ describe Mongo::Operation::ReadPreference do
4
4
 
5
5
  let(:selector) do
6
6
  { name: 'test' }
@@ -26,9 +26,9 @@ describe Mongo::Operation::ReadPreferrable do
26
26
  Mongo::ServerSelector.get
27
27
  end
28
28
 
29
- let(:read_preferrable) do
29
+ let(:read_preference) do
30
30
  Class.new do
31
- include Mongo::Operation::ReadPreferrable
31
+ include Mongo::Operation::ReadPreference
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)
@@ -55,7 +55,7 @@ describe Mongo::Operation::ReadPreferrable do
55
55
  end
56
56
 
57
57
  it 'returns a special selector' do
58
- expect(read_preferrable.send(:update_selector, context)).to eq(expected)
58
+ expect(read_preference.send(:update_selector, context)).to eq(expected)
59
59
  end
60
60
 
61
61
  context 'when the selector already has $query in it' do
@@ -70,7 +70,7 @@ describe Mongo::Operation::ReadPreferrable do
70
70
  end
71
71
 
72
72
  it 'returns an unaltered special selector' do
73
- expect(read_preferrable.send(:update_selector, context)).to eq(expected)
73
+ expect(read_preference.send(:update_selector, context)).to eq(expected)
74
74
  end
75
75
  end
76
76
  end
@@ -82,7 +82,7 @@ describe Mongo::Operation::ReadPreferrable do
82
82
  end
83
83
 
84
84
  it 'returns a selector' do
85
- expect(read_preferrable.send(:update_selector, context)).to eq(selector)
85
+ expect(read_preference.send(:update_selector, context)).to eq(selector)
86
86
  end
87
87
  end
88
88
 
@@ -168,7 +168,7 @@ describe Mongo::Operation::ReadPreferrable do
168
168
  end
169
169
 
170
170
  it 'does not set the slave_ok flag' do
171
- expect(read_preferrable.send(:update_options, context)).to eq(expected)
171
+ expect(read_preference.send(:update_options, context)).to eq(expected)
172
172
  end
173
173
  end
174
174
 
@@ -183,7 +183,7 @@ describe Mongo::Operation::ReadPreferrable do
183
183
  end
184
184
 
185
185
  it 'sets the slave_ok flag' do
186
- expect(read_preferrable.send(:update_options, context)).to eq(expected)
186
+ expect(read_preference.send(:update_options, context)).to eq(expected)
187
187
  end
188
188
  end
189
189
  end
@@ -205,7 +205,7 @@ describe Mongo::Operation::ReadPreferrable do
205
205
  end
206
206
 
207
207
  it 'does not set the slave_ok flag' do
208
- expect(read_preferrable.send(:update_options, context)).to eq(expected)
208
+ expect(read_preference.send(:update_options, context)).to eq(expected)
209
209
  end
210
210
  end
211
211
 
@@ -222,7 +222,7 @@ describe Mongo::Operation::ReadPreferrable do
222
222
  end
223
223
 
224
224
  it 'sets the slave_ok flag' do
225
- expect(read_preferrable.send(:update_options, context)).to eq(expected)
225
+ expect(read_preference.send(:update_options, context)).to eq(expected)
226
226
  end
227
227
  end
228
228
 
@@ -237,7 +237,7 @@ describe Mongo::Operation::ReadPreferrable do
237
237
  end
238
238
 
239
239
  it 'does not set the slave_ok flag' do
240
- expect(read_preferrable.send(:update_options, context)).to eq(expected)
240
+ expect(read_preference.send(:update_options, context)).to eq(expected)
241
241
  end
242
242
  end
243
243
  end
@@ -272,4 +272,23 @@ describe Mongo::Operation::Result do
272
272
  end
273
273
  end
274
274
  end
275
+
276
+ context 'when there is a top-level Result class defined' do
277
+
278
+ before do
279
+ class Result
280
+ def get_result
281
+ Mongo::Client.new([DEFAULT_ADDRESS], TEST_OPTIONS).database.command(:ping => 1)
282
+ end
283
+ end
284
+ end
285
+
286
+ let(:result) do
287
+ Result.new.get_result
288
+ end
289
+
290
+ it 'uses the Result class of the operation' do
291
+ expect(result).to be_a(Mongo::Operation::Result)
292
+ end
293
+ end
275
294
  end
@@ -1,10 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Mongo::Operation::Write::BulkDelete do
3
+ describe Mongo::Operation::Write::Bulk::Delete do
4
4
  include_context 'operation'
5
5
 
6
6
  let(:documents) do
7
- [ { q: { foo: 1 }, limit: 1 } ]
7
+ [ { 'q' => { foo: 1 }, 'limit' => 1 } ]
8
8
  end
9
9
 
10
10
  let(:spec) do
@@ -42,7 +42,7 @@ describe Mongo::Operation::Write::BulkDelete do
42
42
 
43
43
  context 'when two ops have different specs' do
44
44
  let(:other_docs) do
45
- [ { q: { bar: 1 }, limit: 1 } ]
45
+ [ { 'q' => { bar: 1 }, 'limit' => 1 } ]
46
46
  end
47
47
 
48
48
  let(:other_spec) do
@@ -62,17 +62,6 @@ describe Mongo::Operation::Write::BulkDelete do
62
62
  end
63
63
  end
64
64
 
65
- describe '#dup' do
66
-
67
- context 'deep copy' do
68
-
69
- it 'copies the list of deletes' do
70
- copy = op.dup
71
- expect(copy.spec[:deletes]).not_to be(op.spec[:deletes])
72
- end
73
- end
74
- end
75
-
76
65
  describe '#execute' do
77
66
 
78
67
  before do
@@ -100,7 +89,7 @@ describe Mongo::Operation::Write::BulkDelete do
100
89
  context 'when the delete succeeds' do
101
90
 
102
91
  let(:documents) do
103
- [{ q: { field: 'test' }, limit: 1 }]
92
+ [{ 'q' => { field: 'test' }, 'limit' => 1 }]
104
93
  end
105
94
 
106
95
  it 'deletes the document from the database' do
@@ -124,7 +113,7 @@ describe Mongo::Operation::Write::BulkDelete do
124
113
  context 'when the deletes succeed' do
125
114
 
126
115
  let(:documents) do
127
- [{ q: { field: 'test' }, limit: 0 }]
116
+ [{ 'q' => { field: 'test' }, 'limit' => 0 }]
128
117
  end
129
118
 
130
119
  it 'deletes the documents from the database' do
@@ -138,10 +127,10 @@ describe Mongo::Operation::Write::BulkDelete do
138
127
 
139
128
  let(:documents) do
140
129
  [ failing_delete_doc,
141
- { q: { field: 'test' }, limit: 1 }
130
+ { 'q' => { field: 'test' }, 'limit' => 1 }
142
131
  ]
143
132
  end
144
-
133
+
145
134
  let(:spec) do
146
135
  { :deletes => documents,
147
136
  :db_name => TEST_DB,
@@ -150,7 +139,7 @@ describe Mongo::Operation::Write::BulkDelete do
150
139
  :ordered => true
151
140
  }
152
141
  end
153
-
142
+
154
143
  let(:failing_delete) do
155
144
  described_class.new(spec)
156
145
  end
@@ -162,7 +151,7 @@ describe Mongo::Operation::Write::BulkDelete do
162
151
  let(:write_concern) do
163
152
  Mongo::WriteConcern.get(w: 1)
164
153
  end
165
-
154
+
166
155
  it 'aborts after first error' do
167
156
  failing_delete.execute(authorized_primary.context)
168
157
  expect(authorized_collection.find.count).to eq(2)
@@ -170,11 +159,11 @@ describe Mongo::Operation::Write::BulkDelete do
170
159
  end
171
160
 
172
161
  context 'when write concern is unacknowledged' do
173
-
162
+
174
163
  let(:write_concern) do
175
164
  Mongo::WriteConcern.get(w: 0)
176
165
  end
177
-
166
+
178
167
  it 'aborts after first error' do
179
168
  failing_delete.execute(authorized_primary.context)
180
169
  expect(authorized_collection.find.count).to eq(2)
@@ -187,10 +176,10 @@ describe Mongo::Operation::Write::BulkDelete do
187
176
 
188
177
  let(:documents) do
189
178
  [ failing_delete_doc,
190
- { q: { field: 'test' }, limit: 1 }
179
+ { 'q' => { field: 'test' }, 'limit' => 1 }
191
180
  ]
192
181
  end
193
-
182
+
194
183
  let(:spec) do
195
184
  { :deletes => documents,
196
185
  :db_name => TEST_DB,
@@ -199,7 +188,7 @@ describe Mongo::Operation::Write::BulkDelete do
199
188
  :ordered => false
200
189
  }
201
190
  end
202
-
191
+
203
192
  let(:failing_delete) do
204
193
  described_class.new(spec)
205
194
  end
@@ -211,7 +200,7 @@ describe Mongo::Operation::Write::BulkDelete do
211
200
  let(:write_concern) do
212
201
  Mongo::WriteConcern.get(w: 1)
213
202
  end
214
-
203
+
215
204
  it 'does not abort after first error' do
216
205
  failing_delete.execute(authorized_primary.context)
217
206
  expect(authorized_collection.find.count).to eq(1)
@@ -219,11 +208,11 @@ describe Mongo::Operation::Write::BulkDelete do
219
208
  end
220
209
 
221
210
  context 'when write concern is unacknowledged' do
222
-
211
+
223
212
  let(:write_concern) do
224
213
  Mongo::WriteConcern.get(w: 0)
225
214
  end
226
-
215
+
227
216
  it 'does not abort after first error' do
228
217
  failing_delete.execute(authorized_primary.context)
229
218
  sleep(1)
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Mongo::Operation::Write::BulkInsert do
3
+ describe Mongo::Operation::Write::Bulk::Insert do
4
4
  include_context 'operation'
5
5
 
6
6
  let(:documents) do
@@ -74,17 +74,6 @@ describe Mongo::Operation::Write::BulkInsert do
74
74
  end
75
75
  end
76
76
 
77
- describe '#dup' do
78
-
79
- context 'deep copy' do
80
-
81
- it 'copies the list of documents' do
82
- copy = op.dup
83
- expect(copy.spec[:documents]).to_not be(op.spec[:documents])
84
- end
85
- end
86
- end
87
-
88
77
  describe 'document ids' do
89
78
 
90
79
  context 'when documents do not contain an id' do
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Mongo::Operation::Write::BulkUpdate do
3
+ describe Mongo::Operation::Write::Bulk::Update do
4
4
  include_context 'operation'
5
5
 
6
6
  let(:documents) do
@@ -72,17 +72,6 @@ describe Mongo::Operation::Write::BulkUpdate do
72
72
  end
73
73
  end
74
74
 
75
- describe '#dup' do
76
-
77
- context 'deep copy' do
78
-
79
- it 'copies the list of updates' do
80
- copy = op.dup
81
- expect(copy.spec[:updates]).not_to be(op.spec[:updates])
82
- end
83
- end
84
- end
85
-
86
75
  describe '#execute' do
87
76
 
88
77
  before do
@@ -101,7 +90,7 @@ describe Mongo::Operation::Write::BulkUpdate do
101
90
  context 'when the update passes' do
102
91
 
103
92
  let(:documents) do
104
- [{ q: { other: 'test' }, u: { '$set' => { field: 'blah' }}, multi: false }]
93
+ [{ 'q' => { other: 'test' }, 'u' => { '$set' => { field: 'blah' }}, 'multi' => false }]
105
94
  end
106
95
 
107
96
  it 'updates the document' do
@@ -125,7 +114,7 @@ describe Mongo::Operation::Write::BulkUpdate do
125
114
  context 'when the updates succeed' do
126
115
 
127
116
  let(:documents) do
128
- [{ q: { other: 'test' }, u: { '$set' => { field: 'blah' }}, multi: true }]
117
+ [{ 'q' => { other: 'test' }, 'u' => { '$set' => { field: 'blah' }}, 'multi' => true }]
129
118
  end
130
119
 
131
120
  it 'updates the documents' do
@@ -138,8 +127,8 @@ describe Mongo::Operation::Write::BulkUpdate do
138
127
  context 'when the updates are ordered' do
139
128
 
140
129
  let(:documents) do
141
- [ { q: { name: 'test' }, u: { '$st' => { field: 'blah' }}, multi: true},
142
- { q: { field: 'test' }, u: { '$set' => { other: 'blah' }}, multi: true }
130
+ [ { 'q' => { name: 'test' }, 'u' => { '$st' => { field: 'blah' }}, 'multi' => true},
131
+ { 'q' => { field: 'test' }, 'u' => { '$set' => { other: 'blah' }}, 'multi' => true }
143
132
  ]
144
133
  end
145
134
 
@@ -187,8 +176,8 @@ describe Mongo::Operation::Write::BulkUpdate do
187
176
  context 'when the updates are unordered' do
188
177
 
189
178
  let(:documents) do
190
- [ { q: { name: 'test' }, u: { '$st' => { field: 'blah' }}, multi: true},
191
- { q: { field: 'test' }, u: { '$set' => { other: 'blah' }}, multi: false }
179
+ [ { 'q' => { name: 'test' }, 'u' => { '$st' => { field: 'blah' }}, 'multi' => true},
180
+ { 'q' => { field: 'test' }, 'u' => { '$set' => { other: 'blah' }}, 'multi' => false }
192
181
  ]
193
182
  end
194
183
 
@@ -56,19 +56,28 @@ describe Mongo::Operation::Write::Command::Delete do
56
56
  end
57
57
  end
58
58
 
59
- context '#merge' do
60
- let(:other_op) { described_class.new(spec) }
59
+ describe 'write concern' do
61
60
 
62
- it 'is not allowed' do
63
- expect{ op.merge(other_op) }.to raise_exception
61
+ context 'when write concern is not specified' do
62
+
63
+ let(:spec) do
64
+ { :deletes => deletes,
65
+ :db_name => db_name,
66
+ :coll_name => coll_name,
67
+ :ordered => true
68
+ }
69
+ end
70
+
71
+ it 'does not include write concern in the selector' do
72
+ expect(op.send(:selector)[:writeConcern]).to be_nil
73
+ end
64
74
  end
65
- end
66
75
 
67
- context '#merge!' do
68
- let(:other_op) { described_class.new(spec) }
76
+ context 'when write concern is specified' do
69
77
 
70
- it 'is not allowed' do
71
- expect{ op.merge!(other_op) }.to raise_exception
78
+ it 'includes write concern in the selector' do
79
+ expect(op.send(:selector)[:writeConcern]).to eq(write_concern.options)
80
+ end
72
81
  end
73
82
  end
74
83
 
@@ -56,19 +56,28 @@ describe Mongo::Operation::Write::Command::Insert do
56
56
  end
57
57
  end
58
58
 
59
- context '#merge' do
60
- let(:other_op) { described_class.new(spec) }
59
+ describe 'write concern' do
61
60
 
62
- it 'is not allowed' do
63
- expect{ op.merge(other_op) }.to raise_exception
61
+ context 'when write concern is not specified' do
62
+
63
+ let(:spec) do
64
+ { :documents => documents,
65
+ :db_name => db_name,
66
+ :coll_name => coll_name,
67
+ :ordered => true
68
+ }
69
+ end
70
+
71
+ it 'does not include write concern in the selector' do
72
+ expect(op.send(:selector)[:writeConcern]).to be_nil
73
+ end
64
74
  end
65
- end
66
75
 
67
- context '#merge!' do
68
- let(:other_op) { described_class.new(spec) }
76
+ context 'when write concern is specified' do
69
77
 
70
- it 'is not allowed' do
71
- expect{ op.merge!(other_op) }.to raise_exception
78
+ it 'includes write concern in the selector' do
79
+ expect(op.send(:selector)[:writeConcern]).to eq(write_concern.options)
80
+ end
72
81
  end
73
82
  end
74
83
 
@@ -62,19 +62,28 @@ describe Mongo::Operation::Write::Command::Update do
62
62
  end
63
63
  end
64
64
 
65
- context '#merge' do
66
- let(:other_op) { described_class.new(spec) }
65
+ describe 'write concern' do
67
66
 
68
- it 'is not allowed' do
69
- expect{ op.merge(other_op) }.to raise_exception
67
+ context 'when write concern is not specified' do
68
+
69
+ let(:spec) do
70
+ { :updates => updates,
71
+ :db_name => db_name,
72
+ :coll_name => coll_name,
73
+ :ordered => true
74
+ }
75
+ end
76
+
77
+ it 'does not include write concern in the selector' do
78
+ expect(op.send(:selector)[:writeConcern]).to be_nil
79
+ end
70
80
  end
71
- end
72
81
 
73
- context '#merge!' do
74
- let(:other_op) { described_class.new(spec) }
82
+ context 'when write concern is specified' do
75
83
 
76
- it 'is not allowed' do
77
- expect{ op.merge!(other_op) }.to raise_exception
84
+ it 'includes write concern in the selector' do
85
+ expect(op.send(:selector)[:writeConcern]).to eq(write_concern.options)
86
+ end
78
87
  end
79
88
  end
80
89
 
@@ -89,7 +89,7 @@ describe Mongo::Operation::Write::Delete do
89
89
  context 'when the delete succeeds' do
90
90
 
91
91
  let(:document) do
92
- { q: { field: 'test' }, limit: 1 }
92
+ { 'q' => { field: 'test' }, 'limit' => 1 }
93
93
  end
94
94
 
95
95
  let(:result) do
@@ -133,7 +133,7 @@ describe Mongo::Operation::Write::Delete do
133
133
  context 'when the deletes succeed' do
134
134
 
135
135
  let(:document) do
136
- { q: { field: 'test' }, limit: 0 }
136
+ { 'q' => { field: 'test' }, 'limit' => 0 }
137
137
  end
138
138
 
139
139
  let(:result) do
@@ -172,7 +172,7 @@ describe Mongo::Operation::Write::Delete do
172
172
  context 'when a document exceeds max bson size' do
173
173
 
174
174
  let(:document) do
175
- { q: { field: 't'*17000000 }, limit: 0 }
175
+ { 'q' => { field: 't'*17000000 }, 'limit' => 0 }
176
176
  end
177
177
 
178
178
  it 'raises an error' do
@@ -73,17 +73,6 @@ describe Mongo::Operation::Write::Insert do
73
73
  end
74
74
  end
75
75
 
76
- describe '#dup' do
77
-
78
- context 'deep copy' do
79
-
80
- it 'copies the list of documents' do
81
- copy = insert.dup
82
- expect(copy.spec[:documents]).to_not be(insert.spec[:documents])
83
- end
84
- end
85
- end
86
-
87
76
  describe 'document ids' do
88
77
 
89
78
  context 'when documents do not contain an id' do
@@ -95,7 +95,7 @@ describe Mongo::Operation::Write::Update do
95
95
  context 'when the update succeeds' do
96
96
 
97
97
  let(:document) do
98
- { q: { name: 'test' }, u: { '$set' => { field: 'blah' }}, limit: 1 }
98
+ { 'q' => { name: 'test' }, 'u' => { '$set' => { field: 'blah' }}, limit: 1 }
99
99
  end
100
100
 
101
101
  let(:result) do
@@ -122,7 +122,7 @@ describe Mongo::Operation::Write::Update do
122
122
  context 'when the update fails' do
123
123
 
124
124
  let(:document) do
125
- { q: { name: 'test' }, u: { '$st' => { field: 'blah' } } }
125
+ { 'q' => { name: 'test' }, 'u' => { '$st' => { field: 'blah' } } }
126
126
  end
127
127
 
128
128
  it 'raises an exception' do
@@ -147,7 +147,7 @@ describe Mongo::Operation::Write::Update do
147
147
  context 'when the updates succeed' do
148
148
 
149
149
  let(:document) do
150
- { q: { field: 'test' }, u: { '$set' => { other: 'blah' }}, multi: true }
150
+ { 'q' => { field: 'test' }, 'u' => { '$set' => { other: 'blah' }}, 'multi' => true }
151
151
  end
152
152
 
153
153
  let(:result) do
@@ -174,7 +174,7 @@ describe Mongo::Operation::Write::Update do
174
174
  context 'when an update fails' do
175
175
 
176
176
  let(:document) do
177
- { q: { name: 'test' }, u: { '$st' => { field: 'blah' } }, multi: true }
177
+ { 'q' => { name: 'test' }, 'u' => { '$st' => { field: 'blah' } }, 'multi' => true }
178
178
  end
179
179
 
180
180
  it 'raises an exception' do
@@ -187,7 +187,7 @@ describe Mongo::Operation::Write::Update do
187
187
  context 'when a document exceeds max bson size' do
188
188
 
189
189
  let(:document) do
190
- { q: { name: 't'*17000000}, u: { '$set' => { field: 'blah' } } }
190
+ { 'q' => { name: 't'*17000000}, 'u' => { '$set' => { field: 'blah' } } }
191
191
  end
192
192
 
193
193
  it 'raises an error' do
@@ -200,7 +200,7 @@ describe Mongo::Operation::Write::Update do
200
200
  context 'when upsert is true' do
201
201
 
202
202
  let(:document) do
203
- { q: { field: 'non-existent' }, u: { '$set' => { other: 'blah' }}, upsert: true }
203
+ { 'q' => { field: 'non-existent' }, 'u' => { '$set' => { other: 'blah' }}, 'upsert' => true }
204
204
  end
205
205
 
206
206
  let(:result) do