mongo 2.1.0.beta → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
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