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
@@ -14,7 +14,7 @@
14
14
 
15
15
  module Mongo
16
16
  module Operation
17
- module Read
17
+ module Commands
18
18
 
19
19
  # A MongoDB get indexes operation.
20
20
  #
@@ -31,9 +31,8 @@ module Mongo
31
31
  #
32
32
  # @since 2.0.0
33
33
  class Indexes
34
- include Executable
35
34
  include Specifiable
36
- include ReadPreferrable
35
+ include ReadPreference
37
36
 
38
37
  # Execute the operation.
39
38
  # The context gets a connection on which the operation
@@ -48,14 +47,18 @@ module Mongo
48
47
  if context.features.list_indexes_enabled?
49
48
  ListIndexes.new(spec).execute(context)
50
49
  else
51
- context.with_connection do |connection|
52
- Result.new(connection.dispatch([ message(context) ]))
53
- end
50
+ execute_message(context)
54
51
  end
55
52
  end
56
53
 
57
54
  private
58
55
 
56
+ def execute_message(context)
57
+ context.with_connection do |connection|
58
+ Result.new(connection.dispatch([ message(context) ]))
59
+ end
60
+ end
61
+
59
62
  def selector
60
63
  { ns: namespace }
61
64
  end
@@ -14,7 +14,7 @@
14
14
 
15
15
  module Mongo
16
16
  module Operation
17
- module Read
17
+ module Commands
18
18
  class ListCollections
19
19
 
20
20
  # Defines custom behaviour of results when using the
@@ -23,26 +23,6 @@ module Mongo
23
23
  # @since 2.0.0
24
24
  class Result < Operation::Result
25
25
 
26
- # The field name for the cursor document in a listCollections result.
27
- #
28
- # @since 2.0.0
29
- CURSOR = 'cursor'.freeze
30
-
31
- # The cursor id field in the cursor document.
32
- #
33
- # @since 2.0.0
34
- CURSOR_ID = 'id'.freeze
35
-
36
- # The namespace field in the cursor document.
37
- #
38
- # @since 2.0.0
39
- NAMESPACE = 'ns'.freeze
40
-
41
- # The field name for the first batch of a cursor.
42
- #
43
- # @since 2.0.0
44
- FIRST_BATCH = 'firstBatch'.freeze
45
-
46
26
  # Get the cursor id for the result.
47
27
  #
48
28
  # @example Get the cursor id.
@@ -12,11 +12,9 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- require 'mongo/operation/list_collections/result'
16
-
17
15
  module Mongo
18
16
  module Operation
19
- module Read
17
+ module Commands
20
18
 
21
19
  # A MongoDB listCollections command operation.
22
20
  #
@@ -33,38 +31,10 @@ module Mongo
33
31
  # option spec :options [ Hash ] Options for the command.
34
32
  #
35
33
  # @since 2.0.0
36
- class ListCollections
37
- include Executable
38
- include Specifiable
39
- include Limited
40
- include ReadPreferrable
41
-
42
- # Execute the listCollections command operation.
43
- #
44
- # @example Execute the operation.
45
- # operation.execute(context)
46
- #
47
- # @param [ Mongo::Server::Context ] context The context for this operation.
48
- #
49
- # @return [ Result ] The operation result.
50
- #
51
- # @since 2.0.0
52
- def execute(context)
53
- execute_message(context)
54
- end
34
+ class ListCollections < Command
55
35
 
56
36
  private
57
37
 
58
- def execute_message(context)
59
- context.with_connection do |connection|
60
- Result.new(connection.dispatch([ message(context) ])).validate!
61
- end
62
- end
63
-
64
- def query_coll
65
- Database::COMMAND
66
- end
67
-
68
38
  def selector
69
39
  (spec[SELECTOR] || {}).merge(
70
40
  listCollections: 1, filter: { name: { '$not' => /system\.|\$/ }}
@@ -74,3 +44,5 @@ module Mongo
74
44
  end
75
45
  end
76
46
  end
47
+
48
+ require 'mongo/operation/commands/list_collections/result'
@@ -14,7 +14,7 @@
14
14
 
15
15
  module Mongo
16
16
  module Operation
17
- module Read
17
+ module Commands
18
18
  class ListIndexes
19
19
 
20
20
  # Defines custom behaviour of results when using the
@@ -23,26 +23,6 @@ module Mongo
23
23
  # @since 2.0.0
24
24
  class Result < Operation::Result
25
25
 
26
- # The field name for the cursor document in a listIndexes result.
27
- #
28
- # @since 2.0.0
29
- CURSOR = 'cursor'.freeze
30
-
31
- # The cursor id field in the cursor document.
32
- #
33
- # @since 2.0.0
34
- CURSOR_ID = 'id'.freeze
35
-
36
- # The namespace field in the cursor document.
37
- #
38
- # @since 2.0.0
39
- NAMESPACE = 'ns'.freeze
40
-
41
- # The field name for the first batch of a cursor.
42
- #
43
- # @since 2.0.0
44
- FIRST_BATCH = 'firstBatch'.freeze
45
-
46
26
  # Get the cursor id for the result.
47
27
  #
48
28
  # @example Get the cursor id.
@@ -12,11 +12,9 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- require 'mongo/operation/list_indexes/result'
16
-
17
15
  module Mongo
18
16
  module Operation
19
- module Read
17
+ module Commands
20
18
 
21
19
  # A MongoDB listIndexes command operation.
22
20
  #
@@ -35,38 +33,10 @@ module Mongo
35
33
  # option spec :options [ Hash ] Options for the command.
36
34
  #
37
35
  # @since 2.0.0
38
- class ListIndexes
39
- include Executable
40
- include Specifiable
41
- include Limited
42
- include ReadPreferrable
43
-
44
- # Execute the listIndexes command operation.
45
- #
46
- # @example Execute the operation.
47
- # operation.execute(context)
48
- #
49
- # @param [ Mongo::Server::Context ] context The context for this operation.
50
- #
51
- # @return [ Result ] The operation result.
52
- #
53
- # @since 2.0.0
54
- def execute(context)
55
- execute_message(context)
56
- end
36
+ class ListIndexes < Command
57
37
 
58
38
  private
59
39
 
60
- def execute_message(context)
61
- context.with_connection do |connection|
62
- Result.new(connection.dispatch([ message(context) ])).validate!
63
- end
64
- end
65
-
66
- def query_coll
67
- Database::COMMAND
68
- end
69
-
70
40
  def selector
71
41
  (spec[SELECTOR] || {}).merge(listIndexes: coll_name)
72
42
  end
@@ -75,4 +45,4 @@ module Mongo
75
45
  end
76
46
  end
77
47
 
78
-
48
+ require 'mongo/operation/commands/list_indexes/result'
@@ -0,0 +1,119 @@
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 Commands
18
+ class MapReduce
19
+
20
+ # Defines custom behaviour of results for a map reduce operation.
21
+ #
22
+ # @since 2.0.0
23
+ class Result < Operation::Result
24
+
25
+ # The counts field for the map/reduce.
26
+ #
27
+ # @since 2.0.0
28
+ COUNTS = 'counts'.freeze
29
+
30
+ # The field name for a result without a cursor.
31
+ #
32
+ # @since 2.0.0
33
+ RESULTS = 'results'.freeze
34
+
35
+ # The time the operation took constant.
36
+ #
37
+ # @since 2.0.0
38
+ TIME = 'timeMillis'.freeze
39
+
40
+ # Gets the map/reduce counts from the reply.
41
+ #
42
+ # @example Get the counts.
43
+ # result.counts
44
+ #
45
+ # @return [ Hash ] A hash of the result counts.
46
+ #
47
+ # @since 2.0.0
48
+ def counts
49
+ reply.documents[0][COUNTS]
50
+ end
51
+
52
+ # Get the documents from the map/reduce.
53
+ #
54
+ # @example Get the documents.
55
+ # result.documents
56
+ #
57
+ # @return [ Array<BSON::Document> ] The documents.
58
+ #
59
+ # @since 2.0.0
60
+ def documents
61
+ reply.documents[0][RESULTS] || reply.documents[0][RESULT]
62
+ end
63
+
64
+ # If the result was a command then determine if it was considered a
65
+ # success.
66
+ #
67
+ # @note If the write was unacknowledged, then this will always return
68
+ # true.
69
+ #
70
+ # @example Was the command successful?
71
+ # result.successful?
72
+ #
73
+ # @return [ true, false ] If the command was successful.
74
+ #
75
+ # @since 2.0.0
76
+ def successful?
77
+ !documents.nil?
78
+ end
79
+
80
+ # Get the execution time of the map/reduce.
81
+ #
82
+ # @example Get the execution time.
83
+ # result.time
84
+ #
85
+ # @return [ Integer ] The executiong time in milliseconds.
86
+ #
87
+ # @since 2.0.0
88
+ def time
89
+ reply.documents[0][TIME]
90
+ end
91
+
92
+ # Validate the result by checking for any errors.
93
+ #
94
+ # @note This only checks for errors with writes since authentication is
95
+ # handled at the connection level and any authentication errors would
96
+ # be raised there, before a Result is ever created.
97
+ #
98
+ # @example Validate the result.
99
+ # result.validate!
100
+ #
101
+ # @raise [ Error::OperationFailure ] If an error is in the result.
102
+ #
103
+ # @return [ Result ] The result if verification passed.
104
+ #
105
+ # @since 2.0.0
106
+ def validate!
107
+ documents.nil? ? raise(Error::OperationFailure.new(parser.message)) : self
108
+ end
109
+
110
+ private
111
+
112
+ def first_document
113
+ @first_document ||= reply.documents[0]
114
+ end
115
+ end
116
+ end
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,49 @@
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 Commands
18
+
19
+ # A MongoDB map reduce operation.
20
+ #
21
+ # @note A map/reduce operation can behave like a read and
22
+ # return a result set, or can behave like a write operation and
23
+ # output results to a user-specified collection.
24
+ #
25
+ # @example Create the map/reduce operation.
26
+ # MapReduce.new({
27
+ # :selector => {
28
+ # :mapreduce => 'test_coll',
29
+ # :map => '',
30
+ # :reduce => ''
31
+ # },
32
+ # :db_name => 'test_db'
33
+ # })
34
+ #
35
+ # Initialization:
36
+ # param [ Hash ] spec The specifications for the operation.
37
+ #
38
+ # option spec :selector [ Hash ] The map reduce selector.
39
+ # option spec :db_name [ String ] The name of the database on which
40
+ # the operation should be executed.
41
+ # option spec :options [ Hash ] Options for the map reduce command.
42
+ #
43
+ # @since 2.0.0
44
+ class MapReduce < Command; end
45
+ end
46
+ end
47
+ end
48
+
49
+ require 'mongo/operation/commands/map_reduce/result'
@@ -0,0 +1,64 @@
1
+
2
+ # Copyright (C) 2009-2014 MongoDB, Inc.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ module Mongo
17
+ module Operation
18
+ module Commands
19
+ class ParallelScan
20
+
21
+ # Defines custom behaviour of results in a parallel scan.
22
+ #
23
+ # @since 2.0.0
24
+ class Result < Operation::Result
25
+
26
+ # The name of the cursors field in the result.
27
+ #
28
+ # @since 2.0.0
29
+ CURSORS = 'cursors'.freeze
30
+
31
+ # Get all the cursor ids from the result.
32
+ #
33
+ # @example Get the cursor ids.
34
+ # result.cursor_ids
35
+ #
36
+ # @return [ Array<Integer> ] The cursor ids.
37
+ #
38
+ # @since 2.0.0
39
+ def cursor_ids
40
+ documents.map{ |doc| doc[CURSOR][CURSOR_ID] }
41
+ end
42
+
43
+ # Get the documents from parallel scan.
44
+ #
45
+ # @example Get the documents.
46
+ # result.documents
47
+ #
48
+ # @return [ Array<BSON::Document> ] The documents.
49
+ #
50
+ # @since 2.0.0
51
+ def documents
52
+ reply.documents[0][CURSORS]
53
+ end
54
+
55
+ private
56
+
57
+ def first
58
+ @first ||= reply.documents[0] || {}
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,52 @@
1
+ # Copyright (C) 2009-2014 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 Commands
18
+
19
+ # A MongoDB parallel scan operation.
20
+ #
21
+ # @example Create the parallel scan operation.
22
+ # ParallelScan.new({
23
+ # :db_name => 'test_db',
24
+ # :coll_name = > 'test_collection',
25
+ # :cursor_count => 5
26
+ # })
27
+ #
28
+ # Initialization:
29
+ # param [ Hash ] spec The specifications for the operation.
30
+ #
31
+ # option spec :db_name [ String ] The name of the database on which
32
+ # the operation should be executed.
33
+ # option spec :coll_name [ String ] The collection to scan.
34
+ # option spec :cursor_count [ Integer ] The number of cursors to use.
35
+ # option spec :options [ Hash ] Options for the command.
36
+ #
37
+ # @since 2.0.0
38
+ class ParallelScan < Command
39
+
40
+ private
41
+
42
+ def selector
43
+ command = { :parallelCollectionScan => coll_name, :numCursors => cursor_count }
44
+ command[:readConcern] = read_concern if read_concern
45
+ command
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+
52
+ require 'mongo/operation/commands/parallel_scan/result'
@@ -0,0 +1,71 @@
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 Commands
18
+
19
+ # A MongoDB operation to get info of a particular user in a database.
20
+ #
21
+ # @example Create the user query operation.
22
+ # Read::UserQuery.new(:name => 'emily', :db_name => 'test-db')
23
+ #
24
+ # Initialization:
25
+ # param [ Hash ] spec The specifications for the user query operation.
26
+ #
27
+ # option spec :user_name [ String ] The name of the user.
28
+ # option spec :db_name [ String ] The name of the database where the user exists.
29
+ # option spec :options [ Hash ] Options for the operation.
30
+ #
31
+ # @since 2.1.0
32
+ class UserQuery
33
+ include Executable
34
+ include Specifiable
35
+
36
+ # Execute the operation.
37
+ # The context gets a connection on which the operation
38
+ # is sent in the block.
39
+ #
40
+ # @param [ Mongo::Server::Context ] context The context for this operation.
41
+ #
42
+ # @return [ Result ] The operation response, if there is one.
43
+ #
44
+ # @since 2.1.0
45
+ def execute(context)
46
+ if context.features.users_info_enabled?
47
+ UsersInfo.new(spec).execute(context)
48
+ else
49
+ context.with_connection do |connection|
50
+ Result.new(connection.dispatch([ message(context) ])).validate!
51
+ end
52
+ end
53
+ end
54
+
55
+ private
56
+
57
+ def selector
58
+ { :user => user_name }
59
+ end
60
+
61
+ def query_coll
62
+ Auth::User::COLLECTION
63
+ end
64
+
65
+ def message(context)
66
+ Protocol::Query.new(db_name, query_coll, selector, options)
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,38 @@
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 Commands
18
+ class UsersInfo
19
+
20
+ # Defines custom behaviour of results when using the
21
+ # usersInfo command.
22
+ #
23
+ # @since 2.1.0
24
+ class Result < Operation::Result
25
+
26
+ # The field name for the users document in a usersInfo result.
27
+ #
28
+ # @since 2.1.0
29
+ USERS = 'users'.freeze
30
+
31
+ def documents
32
+ reply.documents.first[USERS]
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,48 @@
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 Commands
18
+
19
+ # A MongoDB operation to get info of a particular user in a database.
20
+ #
21
+ # @example Create the users info operation.
22
+ # Read::UsersInfo.new(:name => 'emily', :db_name => 'test-db')
23
+ #
24
+ # Initialization:
25
+ # param [ Hash ] spec The specifications for the users info operation.
26
+ #
27
+ # option spec :user_name [ String ] The name of the user.
28
+ # option spec :db_name [ String ] The name of the database where the user exists.
29
+ # option spec :options [ Hash ] Options for the operation.
30
+ #
31
+ # @since 2.1.0
32
+ class UsersInfo < Command
33
+
34
+ private
35
+
36
+ def selector
37
+ { :usersInfo => user_name }
38
+ end
39
+
40
+ def message(context)
41
+ Protocol::Query.new(db_name, query_coll, selector, options)
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+
48
+ require 'mongo/operation/commands/users_info/result'