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,75 +0,0 @@
1
- # Copyright (C) 2014-2015 MongoDB, Inc.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- require 'mongo/operation/write/bulk/bulk_mergable'
16
- require 'mongo/operation/write/bulk/legacy_bulk_mergable'
17
-
18
- module Mongo
19
- module Operation
20
- module Write
21
- class BulkDelete
22
-
23
- # Defines custom behaviour of results when deleting.
24
- #
25
- # @since 2.0.0
26
- class Result < Operation::Result
27
- include BulkMergable
28
-
29
- # The aggregate number of deleted docs reported in the replies.
30
- #
31
- # @since 2.0.0
32
- REMOVED = 'nRemoved'.freeze
33
-
34
- # Gets the number of documents deleted.
35
- #
36
- # @example Get the deleted count.
37
- # result.n_removed
38
- #
39
- # @return [ Integer ] The number of documents deleted.
40
- #
41
- # @since 2.0.0
42
- def n_removed
43
- return 0 unless acknowledged?
44
- @replies.reduce(0) do |n, reply|
45
- n += reply.documents.first[N]
46
- end
47
- end
48
- end
49
-
50
- # Defines custom behaviour of results when deleting.
51
- # For server versions < 2.5.5 (that don't use write commands).
52
- #
53
- # @since 2.0.0
54
- class LegacyResult < Operation::Result
55
- include LegacyBulkMergable
56
-
57
- # Gets the number of documents deleted.
58
- #
59
- # @example Get the deleted count.
60
- # result.n_removed
61
- #
62
- # @return [ Integer ] The number of documents deleted.
63
- #
64
- # @since 2.0.0
65
- def n_removed
66
- return 0 unless acknowledged?
67
- @replies.reduce(0) do |n, reply|
68
- n += reply.documents.first[N]
69
- end
70
- end
71
- end
72
- end
73
- end
74
- end
75
- end
@@ -1,145 +0,0 @@
1
- # Copyright (C) 2014-2015 MongoDB, Inc.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- require 'mongo/operation/write/bulk/bulk_delete/result'
16
-
17
- module Mongo
18
- module Operation
19
- module Write
20
-
21
- # A MongoDB bulk delete operation.
22
- #
23
- # @note If a server with version >= 2.5.5 is selected, a write command
24
- # operation will be created and sent instead.
25
- #
26
- # @example Create the delete operation.
27
- # Write::BulkDelete.new({
28
- # :deletes => [{ :q => { :foo => 1 }, :limit => 1 }],
29
- # :db_name => 'test',
30
- # :coll_name => 'test_coll',
31
- # :write_concern => write_concern
32
- # })
33
- #
34
- # Initialization:
35
- # param [ Hash ] spec The specifications for the delete.
36
- #
37
- # option spec :deletes [ Array ] The delete documents.
38
- # option spec :db_name [ String ] The name of the database on which
39
- # the delete should be executed.
40
- # option spec :coll_name [ String ] The name of the collection on which
41
- # the delete should be executed.
42
- # option spec :write_concern [ Mongo::WriteConcern ] The write concern
43
- # for this operation.
44
- # option spec :ordered [ true, false ] Whether the operations should be
45
- # executed in order.
46
- # option spec :options [Hash] Options for the command, if it ends up being a
47
- # write command.
48
- #
49
- # @since 2.0.0
50
- class BulkDelete
51
- include Executable
52
- include Specifiable
53
-
54
- # Execute the delete operation.
55
- #
56
- # @example Execute the operation.
57
- # operation.execute(context)
58
- #
59
- # @param [ Mongo::Server::Context ] context The context for this operation.
60
- #
61
- # @return [ Result ] The result.
62
- #
63
- # @since 2.0.0
64
- def execute(context)
65
- if context.features.write_command_enabled?
66
- execute_write_command(context)
67
- else
68
- execute_message(context)
69
- end
70
- end
71
-
72
- # Set the write concern on this operation.
73
- #
74
- # @example Set a write concern.
75
- # new_op = operation.write_concern(:w => 2)
76
- #
77
- # @param [ Hash ] wc The write concern.
78
- #
79
- # @since 2.0.0
80
- def write_concern(wc = nil)
81
- if wc
82
- self.class.new(spec.merge(write_concern: WriteConcern.get(wc)))
83
- else
84
- spec[WRITE_CONCERN]
85
- end
86
- end
87
-
88
- private
89
-
90
- def execute_write_command(context)
91
- Result.new(Command::Delete.new(spec).execute(context))
92
- end
93
-
94
- def execute_message(context)
95
- replies = messages.map do |m|
96
- context.with_connection do |connection|
97
- result = LegacyResult.new(connection.dispatch([ m, gle ].compact, operation_id))
98
- if stop_sending?(result)
99
- return result
100
- else
101
- result.reply
102
- end
103
- end
104
- end
105
- LegacyResult.new(replies.compact.empty? ? nil : replies)
106
- end
107
-
108
- def stop_sending?(result)
109
- ordered? && !result.successful?
110
- end
111
-
112
- # @todo put this somewhere else
113
- def ordered?
114
- @spec.fetch(:ordered, true)
115
- end
116
-
117
- def gle
118
- gle_message = ( ordered? && write_concern.get_last_error.nil? ) ?
119
- Mongo::WriteConcern.get(:w => 1).get_last_error :
120
- write_concern.get_last_error
121
- if gle_message
122
- Protocol::Query.new(
123
- db_name,
124
- Database::COMMAND,
125
- gle_message,
126
- options.merge(limit: -1)
127
- )
128
- end
129
- end
130
-
131
- def initialize_copy(original)
132
- @spec = original.spec.dup
133
- @spec[DELETES] = original.spec[DELETES].clone
134
- end
135
-
136
- def messages
137
- deletes.collect do |del|
138
- opts = ( del[:limit] || 0 ) <= 0 ? {} : { :flags => [ :single_remove ] }
139
- Protocol::Delete.new(db_name, coll_name, del[:q], opts)
140
- end
141
- end
142
- end
143
- end
144
- end
145
- end
@@ -1,130 +0,0 @@
1
- # Copyright (C) 2014-2015 MongoDB, Inc.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- require 'mongo/operation/write/bulk/bulk_mergable'
16
- require 'mongo/operation/write/bulk/legacy_bulk_mergable'
17
-
18
- module Mongo
19
- module Operation
20
- module Write
21
- class BulkInsert
22
-
23
- # Defines custom behaviour of results when inserting.
24
- #
25
- # @since 2.0.0
26
- class Result < Operation::Result
27
- include BulkMergable
28
-
29
- # Get the ids of the inserted documents.
30
- #
31
- # @since 2.0.0
32
- attr_reader :inserted_ids
33
-
34
- # Initialize a new result.
35
- #
36
- # @example Instantiate the result.
37
- # Result.new(replies, inserted_ids)
38
- #
39
- # @param [ Protocol::Reply ] replies The wire protocol replies.
40
- # @param [ Array<Object> ] ids The ids of the inserted documents.
41
- #
42
- # @since 2.0.0
43
- def initialize(replies, ids)
44
- @replies = replies.is_a?(Protocol::Reply) ? [ replies ] : replies
45
- @inserted_ids = ids
46
- end
47
-
48
- # Gets the number of documents inserted.
49
- #
50
- # @example Get the number of documents inserted.
51
- # result.n_inserted
52
- #
53
- # @return [ Integer ] The number of documents inserted.
54
- #
55
- # @since 2.0.0
56
- def n_inserted
57
- written_count
58
- end
59
-
60
- # Gets the id of the document inserted.
61
- #
62
- # @example Get id of the document inserted.
63
- # result.inserted_id
64
- #
65
- # @return [ Object ] The id of the document inserted.
66
- #
67
- # @since 2.0.0
68
- def inserted_id
69
- inserted_ids.first
70
- end
71
- end
72
-
73
- # Defines custom behaviour of results when inserting.
74
- # For server versions < 2.5.5 (that don't use write commands).
75
- #
76
- # @since 2.0.0
77
- class LegacyResult < Operation::Result
78
- include LegacyBulkMergable
79
-
80
- # Get the ids of the inserted documents.
81
- #
82
- # @since 2.0.0
83
- attr_reader :inserted_ids
84
-
85
- # Initialize a new result.
86
- #
87
- # @example Instantiate the result.
88
- # Result.new(replies, inserted_ids)
89
- #
90
- # @param [ Protocol::Reply ] replies The wire protocol replies.
91
- # @param [ Array<Object> ] ids The ids of the inserted documents.
92
- #
93
- # @since 2.0.0
94
- def initialize(replies, ids)
95
- @replies = replies.is_a?(Protocol::Reply) ? [ replies ] : replies
96
- @inserted_ids = ids
97
- end
98
-
99
- # Gets the number of documents inserted.
100
- #
101
- # @example Get the number of documents inserted.
102
- # result.n_inserted
103
- #
104
- # @return [ Integer ] The number of documents inserted.
105
- #
106
- # @since 2.0.0
107
- def n_inserted
108
- return 0 unless acknowledged?
109
- @replies.reduce(0) do |n, reply|
110
- n += 1 unless reply_write_errors?(reply)
111
- n
112
- end
113
- end
114
-
115
- # Gets the id of the document inserted.
116
- #
117
- # @example Get id of the document inserted.
118
- # result.inserted_id
119
- #
120
- # @return [ Object ] The id of the document inserted.
121
- #
122
- # @since 2.0.0
123
- def inserted_id
124
- inserted_ids.first
125
- end
126
- end
127
- end
128
- end
129
- end
130
- end
@@ -1,132 +0,0 @@
1
- # Copyright (C) 2014-2015 MongoDB, Inc.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- require 'mongo/operation/write/bulk/bulk_insert/result'
16
-
17
- module Mongo
18
- module Operation
19
- module Write
20
-
21
- # A MongoDB bulk insert operation.
22
- # This class should only be used by the Bulk API.
23
- #
24
- # @note If a server with version >= 2.5.5 is being used, a write command
25
- # operation will be created and sent instead.
26
- #
27
- # @example Create the new insert operation.
28
- # Write::BulkInsert.new({
29
- # :documents => [{ :foo => 1 }],
30
- # :db_name => 'test',
31
- # :coll_name => 'test_coll',
32
- # :write_concern => write_concern,
33
- # :ordered => false
34
- # })
35
- #
36
- # Initialization:
37
- # param [ Hash ] spec The specifications for the insert.
38
- #
39
- # option spec :documents [ Array ] The documents to insert.
40
- # option spec :db_name [ String ] The name of the database.
41
- # option spec :coll_name [ String ] The name of the collection.
42
- # option spec :write_concern [ Mongo::WriteConcern ] The write concern.
43
- # option spec :ordered [ true, false ] Whether the operations should be
44
- # executed in order.
45
- # option spec :options [ Hash ] Options for the command, if it ends up being a
46
- # write command.
47
- #
48
- # @since 2.0.0
49
- class BulkInsert
50
- include Specifiable
51
- include Idable
52
-
53
- # Execute the bulk insert operation.
54
- #
55
- # @example Execute the operation.
56
- # operation.execute(context)
57
- #
58
- # @param [ Mongo::Server::Context ] context The context for this operation.
59
- #
60
- # @return [ Result ] The operation result.
61
- #
62
- # @since 2.0.0
63
- def execute(context)
64
- if context.features.write_command_enabled?
65
- execute_write_command(context)
66
- else
67
- execute_message(context)
68
- end
69
- end
70
-
71
- private
72
-
73
- def execute_write_command(context)
74
- command_spec = spec.merge(:documents => ensure_ids(documents))
75
- Result.new(Command::Insert.new(command_spec).execute(context), @ids)
76
- end
77
-
78
- def execute_message(context)
79
- replies = []
80
- messages.map do |m|
81
- context.with_connection do |connection|
82
- result = LegacyResult.new(connection.dispatch([ m, gle ].compact, operation_id), @ids)
83
- replies << result.reply
84
- if stop_sending?(result)
85
- return LegacyResult.new(replies, @ids)
86
- end
87
- end
88
- end
89
- LegacyResult.new(replies.compact.empty? ? nil : replies, @ids)
90
- end
91
-
92
- def stop_sending?(result)
93
- ordered? && !result.successful?
94
- end
95
-
96
- # @todo put this somewhere else
97
- def ordered?
98
- @spec.fetch(:ordered, true)
99
- end
100
-
101
- def initialize_copy(original)
102
- @spec = original.spec.dup
103
- @spec[DOCUMENTS] = original.spec[DOCUMENTS].clone
104
- end
105
-
106
- def gle
107
- gle_message = ( ordered? && write_concern.get_last_error.nil? ) ?
108
- Mongo::WriteConcern.get(:w => 1).get_last_error :
109
- write_concern.get_last_error
110
- if gle_message
111
- Protocol::Query.new(
112
- db_name,
113
- Database::COMMAND,
114
- gle_message,
115
- options.merge(limit: -1)
116
- )
117
- end
118
- end
119
-
120
- def messages
121
- if ordered? || gle
122
- documents.collect do |doc|
123
- Protocol::Insert.new(db_name, coll_name, ensure_ids([ doc ]), options)
124
- end
125
- else
126
- [ Protocol::Insert.new(db_name, coll_name, ensure_ids(documents), { :flags => [:continue_on_error] }) ]
127
- end
128
- end
129
- end
130
- end
131
- end
132
- end
@@ -1,67 +0,0 @@
1
- # Copyright (C) 2014-2015 MongoDB, Inc.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- module Mongo
16
- module Operation
17
- module Write
18
-
19
- module BulkMergable
20
-
21
- # Aggregate the write errors returned from this result.
22
- #
23
- # @example Aggregate the write errors.
24
- # result.aggregate_write_errors([0, 1, 2, 3])
25
- #
26
- # @param [ Array ] indexes The indexes of each operation as they
27
- # were listed in the Bulk API.
28
- #
29
- # @return [ Array ] The aggregate write errors.
30
- #
31
- # @since 2.0.0
32
- def aggregate_write_errors(indexes)
33
- @replies.reduce(nil) do |errors, reply|
34
- if reply.documents.first['writeErrors']
35
- write_errors = reply.documents.first[Error::WRITE_ERRORS].collect do |we|
36
- we.merge!('index' => indexes[we['index']])
37
- end
38
- (errors || []) << write_errors if write_errors
39
- end
40
- end
41
- end
42
-
43
- # Aggregate the write concern errors returned from this result.
44
- #
45
- # @example Aggregate the write concern errors.
46
- # result.aggregate_write_concern_errors([0, 1, 2, 3])
47
- #
48
- # @param [ Array ] indexes The indexes of each operation as they
49
- # were listed in the Bulk API.
50
- #
51
- # @return [ Array ] The aggregate write concern errors.
52
- #
53
- # @since 2.0.0
54
- def aggregate_write_concern_errors(indexes)
55
- @replies.each_with_index.reduce(nil) do |errors, (reply, i)|
56
- if write_concern_errors = reply.documents.first[Error::WRITE_CONCERN_ERRORS]
57
- (errors || []) << write_concern_errors.reduce(nil) do |errs, wce|
58
- wce.merge!('index' => indexes[wce['index']])
59
- (errs || []) << write_concern_error
60
- end
61
- end
62
- end
63
- end
64
- end
65
- end
66
- end
67
- end