mongo 2.0.6 → 2.1.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 (317) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +5 -2
  3. data/lib/mongo/address/ipv4.rb +6 -1
  4. data/lib/mongo/address/unix.rb +2 -2
  5. data/lib/mongo/address.rb +18 -10
  6. data/lib/mongo/auth/cr/conversation.rb +1 -1
  7. data/lib/mongo/auth/ldap/conversation.rb +7 -3
  8. data/lib/mongo/auth/scram/conversation.rb +9 -3
  9. data/lib/mongo/auth/user/view.rb +23 -2
  10. data/lib/mongo/auth/x509/conversation.rb +1 -1
  11. data/lib/mongo/bulk_write/combineable.rb +51 -0
  12. data/lib/mongo/bulk_write/ordered_combiner.rb +55 -0
  13. data/lib/mongo/bulk_write/result.rb +191 -0
  14. data/lib/mongo/bulk_write/result_combiner.rb +117 -0
  15. data/lib/mongo/bulk_write/transformable.rb +132 -0
  16. data/lib/mongo/bulk_write/unordered_combiner.rb +52 -0
  17. data/lib/mongo/bulk_write/validatable.rb +62 -0
  18. data/lib/mongo/bulk_write.rb +159 -23
  19. data/lib/mongo/client.rb +52 -16
  20. data/lib/mongo/cluster/topology/replica_set.rb +27 -9
  21. data/lib/mongo/cluster/topology/sharded.rb +1 -1
  22. data/lib/mongo/cluster/topology/unknown.rb +5 -2
  23. data/lib/mongo/cluster.rb +42 -7
  24. data/lib/mongo/collection/view/aggregation.rb +48 -9
  25. data/lib/mongo/collection/view/immutable.rb +6 -6
  26. data/lib/mongo/collection/view/iterable.rb +18 -4
  27. data/lib/mongo/collection/view/map_reduce.rb +58 -17
  28. data/lib/mongo/collection/view/readable.rb +173 -42
  29. data/lib/mongo/collection/view/writable.rb +37 -23
  30. data/lib/mongo/collection/view.rb +2 -2
  31. data/lib/mongo/collection.rb +370 -33
  32. data/lib/mongo/cursor.rb +15 -3
  33. data/lib/mongo/database/view.rb +5 -4
  34. data/lib/mongo/database.rb +14 -4
  35. data/lib/mongo/dbref.rb +113 -0
  36. data/lib/mongo/error/closed_stream.rb +34 -0
  37. data/lib/mongo/error/extra_file_chunk.rb +34 -0
  38. data/lib/mongo/error/{invalid_uri_option.rb → file_not_found.rb} +11 -12
  39. data/lib/mongo/error/invalid_file.rb +2 -2
  40. data/lib/mongo/error/invalid_file_revision.rb +37 -0
  41. data/lib/mongo/error/invalid_uri.rb +5 -4
  42. data/lib/mongo/error/missing_file_chunk.rb +38 -0
  43. data/lib/mongo/error/operation_failure.rb +1 -1
  44. data/lib/mongo/error/parser.rb +1 -1
  45. data/lib/mongo/error/unchangeable_collection_option.rb +38 -0
  46. data/lib/mongo/error/unexpected_chunk_length.rb +39 -0
  47. data/lib/mongo/error.rb +13 -2
  48. data/lib/mongo/event/description_changed.rb +1 -1
  49. data/lib/mongo/grid/file/chunk.rb +6 -6
  50. data/lib/mongo/grid/file/{metadata.rb → info.rb} +41 -39
  51. data/lib/mongo/grid/file.rb +13 -10
  52. data/lib/mongo/grid/fs_bucket.rb +448 -0
  53. data/lib/mongo/grid/stream/read.rb +208 -0
  54. data/lib/mongo/grid/stream/write.rb +187 -0
  55. data/lib/mongo/grid/stream.rb +64 -0
  56. data/lib/mongo/grid.rb +2 -1
  57. data/lib/mongo/index/view.rb +3 -3
  58. data/lib/mongo/index.rb +5 -0
  59. data/lib/mongo/loggable.rb +34 -57
  60. data/lib/mongo/logger.rb +16 -78
  61. data/lib/mongo/monitoring/command_log_subscriber.rb +112 -0
  62. data/lib/mongo/monitoring/event/command_failed.rb +96 -0
  63. data/lib/mongo/monitoring/event/command_started.rb +89 -0
  64. data/lib/mongo/monitoring/event/command_succeeded.rb +118 -0
  65. data/lib/mongo/monitoring/event/secure.rb +58 -0
  66. data/lib/mongo/monitoring/event.rb +18 -0
  67. data/lib/mongo/monitoring/publishable.rb +106 -0
  68. data/lib/mongo/monitoring.rb +195 -0
  69. data/lib/mongo/operation/{aggregate.rb → commands/aggregate.rb} +3 -41
  70. data/lib/mongo/operation/commands/collections_info/result.rb +39 -0
  71. data/lib/mongo/operation/commands/collections_info.rb +68 -0
  72. data/lib/mongo/operation/{command.rb → commands/command.rb} +2 -18
  73. data/lib/mongo/operation/commands/indexes.rb +70 -0
  74. data/lib/mongo/operation/commands/list_collections/result.rb +112 -0
  75. data/lib/mongo/operation/commands/list_collections.rb +54 -0
  76. data/lib/mongo/operation/commands/list_indexes/result.rb +116 -0
  77. data/lib/mongo/operation/commands/list_indexes.rb +56 -0
  78. data/lib/mongo/operation/{map_reduce → commands/map_reduce}/result.rb +1 -1
  79. data/lib/mongo/operation/{map_reduce.rb → commands/map_reduce.rb} +3 -41
  80. data/lib/mongo/operation/commands/parallel_scan/result.rb +72 -0
  81. data/lib/mongo/operation/commands/parallel_scan.rb +56 -0
  82. data/lib/mongo/operation/commands/user_query.rb +69 -0
  83. data/lib/mongo/{bulk_write/ordered_bulk_write.rb → operation/commands/users_info/result.rb} +18 -30
  84. data/lib/mongo/operation/commands/users_info.rb +53 -0
  85. data/lib/mongo/operation/commands.rb +24 -0
  86. data/lib/mongo/operation/executable.rb +4 -68
  87. data/lib/mongo/operation/kill_cursors.rb +3 -3
  88. data/lib/mongo/operation/read/get_more.rb +2 -22
  89. data/lib/mongo/{bulk_write/unordered_bulk_write.rb → operation/read/query/result.rb} +20 -26
  90. data/lib/mongo/operation/read/query.rb +4 -21
  91. data/lib/mongo/operation/read.rb +0 -4
  92. data/lib/mongo/operation/{read_preferrable.rb → read_preference.rb} +3 -2
  93. data/lib/mongo/operation/result.rb +13 -1
  94. data/lib/mongo/operation/specifiable.rb +42 -0
  95. data/lib/mongo/operation/write/bulk/bulkable.rb +82 -0
  96. data/lib/mongo/operation/write/bulk/delete/result.rb +74 -0
  97. data/lib/mongo/operation/write/bulk/delete.rb +71 -0
  98. data/lib/mongo/operation/write/bulk/insert/result.rb +129 -0
  99. data/lib/mongo/operation/write/bulk/insert.rb +96 -0
  100. data/lib/mongo/operation/write/bulk/legacy_mergable.rb +87 -0
  101. data/lib/mongo/operation/write/bulk/mergable.rb +71 -0
  102. data/lib/mongo/operation/write/bulk/update/result.rb +174 -0
  103. data/lib/mongo/operation/write/bulk/update.rb +81 -0
  104. data/lib/mongo/operation/write/bulk.rb +6 -3
  105. data/lib/mongo/operation/write/command/create_index.rb +0 -1
  106. data/lib/mongo/operation/write/command/create_user.rb +0 -1
  107. data/lib/mongo/operation/write/command/delete.rb +0 -1
  108. data/lib/mongo/operation/write/command/drop_index.rb +0 -1
  109. data/lib/mongo/operation/write/command/insert.rb +0 -1
  110. data/lib/mongo/operation/write/command/remove_user.rb +0 -1
  111. data/lib/mongo/operation/write/command/update.rb +0 -1
  112. data/lib/mongo/operation/write/command/update_user.rb +0 -1
  113. data/lib/mongo/operation/write/command/writable.rb +13 -18
  114. data/lib/mongo/operation/write/create_index.rb +4 -27
  115. data/lib/mongo/operation/write/create_user.rb +4 -30
  116. data/lib/mongo/operation/write/delete.rb +6 -29
  117. data/lib/mongo/operation/write/drop_index.rb +3 -3
  118. data/lib/mongo/operation/write/gle.rb +48 -0
  119. data/lib/mongo/operation/write/idable.rb +5 -0
  120. data/lib/mongo/operation/write/insert.rb +2 -24
  121. data/lib/mongo/operation/write/remove_user.rb +4 -27
  122. data/lib/mongo/operation/write/update.rb +13 -36
  123. data/lib/mongo/operation/write/update_user.rb +4 -30
  124. data/lib/mongo/operation/write/write_command_enabled.rb +53 -0
  125. data/lib/mongo/operation/write.rb +2 -0
  126. data/lib/mongo/operation.rb +32 -4
  127. data/lib/mongo/options/mapper.rb +4 -2
  128. data/lib/mongo/options/redacted.rb +156 -0
  129. data/lib/mongo/options.rb +1 -0
  130. data/lib/mongo/protocol/delete.rb +75 -15
  131. data/lib/mongo/protocol/get_more.rb +65 -13
  132. data/lib/mongo/protocol/insert.rb +85 -13
  133. data/lib/mongo/protocol/kill_cursors.rb +59 -14
  134. data/lib/mongo/protocol/message.rb +12 -12
  135. data/lib/mongo/protocol/query.rb +163 -37
  136. data/lib/mongo/protocol/reply.rb +103 -0
  137. data/lib/mongo/protocol/serializers.rb +1 -1
  138. data/lib/mongo/protocol/update.rb +82 -14
  139. data/lib/mongo/retryable.rb +83 -0
  140. data/lib/mongo/server/connectable.rb +21 -25
  141. data/lib/mongo/server/connection.rb +75 -4
  142. data/lib/mongo/server/connection_pool/queue.rb +15 -0
  143. data/lib/mongo/server/connection_pool.rb +12 -0
  144. data/lib/mongo/server/description/features.rb +2 -1
  145. data/lib/mongo/server/description.rb +52 -1
  146. data/lib/mongo/server/monitor/connection.rb +26 -2
  147. data/lib/mongo/server/monitor.rb +19 -3
  148. data/lib/mongo/server.rb +39 -5
  149. data/lib/mongo/server_selector/selectable.rb +40 -31
  150. data/lib/mongo/server_selector.rb +19 -10
  151. data/lib/mongo/socket/ssl.rb +28 -16
  152. data/lib/mongo/socket/tcp.rb +3 -3
  153. data/lib/mongo/socket/unix.rb +5 -8
  154. data/lib/mongo/socket.rb +11 -4
  155. data/lib/mongo/uri.rb +248 -137
  156. data/lib/mongo/version.rb +1 -1
  157. data/lib/mongo.rb +5 -3
  158. data/spec/mongo/address/unix_spec.rb +1 -1
  159. data/spec/mongo/address_spec.rb +25 -0
  160. data/spec/mongo/auth/cr_spec.rb +9 -1
  161. data/spec/mongo/auth/ldap/conversation_spec.rb +43 -0
  162. data/spec/mongo/auth/ldap_spec.rb +9 -1
  163. data/spec/mongo/auth/scram_spec.rb +9 -1
  164. data/spec/mongo/auth/user/view_spec.rb +26 -1
  165. data/spec/mongo/auth/x509_spec.rb +9 -1
  166. data/spec/mongo/bulk_write/ordered_combiner_spec.rb +271 -0
  167. data/spec/mongo/bulk_write/unordered_combiner_spec.rb +239 -0
  168. data/spec/mongo/bulk_write_spec.rb +428 -0
  169. data/spec/mongo/client_spec.rb +167 -17
  170. data/spec/mongo/cluster/topology/replica_set_spec.rb +18 -9
  171. data/spec/mongo/cluster/topology/sharded_spec.rb +11 -3
  172. data/spec/mongo/cluster/topology/single_spec.rb +12 -4
  173. data/spec/mongo/cluster_spec.rb +55 -10
  174. data/spec/mongo/collection/view/aggregation_spec.rb +188 -1
  175. data/spec/mongo/collection/view/explainable_spec.rb +1 -1
  176. data/spec/mongo/collection/view/immutable_spec.rb +103 -0
  177. data/spec/mongo/collection/view/map_reduce_spec.rb +99 -4
  178. data/spec/mongo/collection/view/readable_spec.rb +238 -6
  179. data/spec/mongo/collection/view/writable_spec.rb +4 -4
  180. data/spec/mongo/collection/view_spec.rb +459 -71
  181. data/spec/mongo/collection_spec.rb +1291 -9
  182. data/spec/mongo/command_monitoring_spec.rb +51 -0
  183. data/spec/mongo/connection_string_spec.rb +115 -0
  184. data/spec/mongo/crud_spec.rb +2 -2
  185. data/spec/mongo/cursor_spec.rb +3 -3
  186. data/spec/mongo/database_spec.rb +47 -11
  187. data/spec/mongo/dbref_spec.rb +149 -0
  188. data/spec/mongo/grid/file/chunk_spec.rb +5 -5
  189. data/spec/mongo/grid/file/{metadata_spec.rb → info_spec.rb} +29 -17
  190. data/spec/mongo/grid/file_spec.rb +8 -8
  191. data/spec/mongo/grid/fs_bucket_spec.rb +1020 -0
  192. data/spec/mongo/grid/stream/read_spec.rb +275 -0
  193. data/spec/mongo/grid/stream/write_spec.rb +440 -0
  194. data/spec/mongo/grid/stream_spec.rb +48 -0
  195. data/spec/mongo/gridfs_spec.rb +50 -0
  196. data/spec/mongo/logger_spec.rb +0 -40
  197. data/spec/mongo/monitoring/command_log_subscriber_spec.rb +76 -0
  198. data/spec/mongo/monitoring/event/command_started_spec.rb +26 -0
  199. data/spec/mongo/monitoring/event/command_succeeded_spec.rb +26 -0
  200. data/spec/mongo/monitoring/event/secure_spec.rb +57 -0
  201. data/spec/mongo/monitoring_spec.rb +168 -0
  202. data/spec/mongo/operation/commands/aggregate_spec.rb +69 -0
  203. data/spec/mongo/operation/{read → commands}/collections_info_spec.rb +1 -1
  204. data/spec/mongo/operation/{command_spec.rb → commands/command_spec.rb} +0 -18
  205. data/spec/mongo/operation/{read → commands}/indexes_spec.rb +1 -1
  206. data/spec/mongo/operation/{map_reduce_spec.rb → commands/map_reduce_spec.rb} +1 -19
  207. data/spec/mongo/operation/kill_cursors_spec.rb +1 -17
  208. data/spec/mongo/operation/read/get_more_spec.rb +0 -16
  209. data/spec/mongo/operation/read/query_spec.rb +19 -16
  210. data/spec/mongo/operation/{read_preferrable_spec.rb → read_preference_spec.rb} +11 -11
  211. data/spec/mongo/operation/write/bulk/{bulk_delete_spec.rb → delete_spec.rb} +18 -29
  212. data/spec/mongo/operation/write/bulk/{bulk_insert_spec.rb → insert_spec.rb} +3 -14
  213. data/spec/mongo/operation/write/bulk/{bulk_update_spec.rb → update_spec.rb} +8 -19
  214. data/spec/mongo/operation/write/command/delete_spec.rb +0 -16
  215. data/spec/mongo/operation/write/command/insert_spec.rb +0 -16
  216. data/spec/mongo/operation/write/command/update_spec.rb +0 -16
  217. data/spec/mongo/operation/write/delete_spec.rb +4 -4
  218. data/spec/mongo/operation/write/insert_spec.rb +2 -13
  219. data/spec/mongo/operation/write/update_spec.rb +7 -7
  220. data/spec/mongo/options/redacted_spec.rb +350 -0
  221. data/spec/mongo/protocol/kill_cursors_spec.rb +5 -3
  222. data/spec/mongo/protocol/query_spec.rb +15 -30
  223. data/spec/mongo/retryable_spec.rb +147 -0
  224. data/spec/mongo/server/connection_pool/queue_spec.rb +16 -0
  225. data/spec/mongo/server/connection_pool_spec.rb +50 -6
  226. data/spec/mongo/server/connection_spec.rb +49 -4
  227. data/spec/mongo/server/description_spec.rb +49 -3
  228. data/spec/mongo/server/monitor_spec.rb +51 -0
  229. data/spec/mongo/server_discovery_and_monitoring_spec.rb +32 -59
  230. data/spec/mongo/server_selection_rtt_spec.rb +37 -57
  231. data/spec/mongo/server_selection_spec.rb +19 -9
  232. data/spec/mongo/server_selector/nearest_spec.rb +35 -27
  233. data/spec/mongo/server_selector/primary_preferred_spec.rb +32 -30
  234. data/spec/mongo/server_selector/primary_spec.rb +21 -14
  235. data/spec/mongo/server_selector/secondary_preferred_spec.rb +28 -26
  236. data/spec/mongo/server_selector/secondary_spec.rb +24 -22
  237. data/spec/mongo/server_selector_spec.rb +87 -24
  238. data/spec/mongo/server_spec.rb +94 -8
  239. data/spec/mongo/socket/ssl_spec.rb +123 -13
  240. data/spec/mongo/socket/unix_spec.rb +52 -0
  241. data/spec/mongo/uri_spec.rb +295 -67
  242. data/spec/spec_helper.rb +40 -24
  243. data/spec/support/authorization.rb +23 -9
  244. data/spec/support/certificates/client.pem +4 -4
  245. data/spec/support/command_monitoring/bulkWrite.yml +73 -0
  246. data/spec/support/command_monitoring/command.yml +42 -0
  247. data/spec/support/command_monitoring/deleteMany.yml +55 -0
  248. data/spec/support/command_monitoring/deleteOne.yml +55 -0
  249. data/spec/support/command_monitoring/find.yml +219 -0
  250. data/spec/support/command_monitoring/insertMany.yml +81 -0
  251. data/spec/support/command_monitoring/insertOne.yml +51 -0
  252. data/spec/support/command_monitoring/updateMany.yml +67 -0
  253. data/spec/support/command_monitoring/updateOne.yml +95 -0
  254. data/spec/support/command_monitoring.rb +365 -0
  255. data/spec/support/connection_string.rb +228 -0
  256. data/spec/support/connection_string_tests/invalid-uris.yml +193 -0
  257. data/spec/support/connection_string_tests/valid-auth.yml +256 -0
  258. data/spec/support/connection_string_tests/valid-host_identifiers.yml +121 -0
  259. data/spec/support/connection_string_tests/valid-options.yml +30 -0
  260. data/spec/support/connection_string_tests/valid-unix_socket-absolute.yml +197 -0
  261. data/spec/support/connection_string_tests/valid-unix_socket-relative.yml +213 -0
  262. data/spec/support/connection_string_tests/valid-warnings.yml +55 -0
  263. data/spec/support/crud/read.rb +22 -19
  264. data/spec/support/crud/write.rb +58 -27
  265. data/spec/support/crud.rb +10 -2
  266. data/spec/support/gridfs.rb +637 -0
  267. data/spec/support/gridfs_tests/delete.yml +157 -0
  268. data/spec/support/gridfs_tests/download.yml +210 -0
  269. data/spec/support/gridfs_tests/download_by_name.yml +113 -0
  270. data/spec/support/gridfs_tests/upload.yml +158 -0
  271. data/spec/support/matchers.rb +1 -1
  272. data/spec/support/sdam/rs/equal_electionids.yml +44 -0
  273. data/spec/support/sdam/rs/new_primary_new_electionid.yml +95 -0
  274. data/spec/support/sdam/rs/null_election_id.yml +144 -0
  275. data/spec/support/sdam/rs/primary_disconnect_electionid.yml +124 -0
  276. data/spec/support/sdam/rs/primary_mismatched_me.yml +37 -0
  277. data/spec/support/sdam/rs/primary_to_no_primary_mismatched_me.yml +75 -0
  278. data/spec/support/sdam/rs/secondary_mismatched_me.yml +37 -0
  279. data/spec/support/sdam/sharded/mongos_disconnect.yml +104 -0
  280. data/spec/support/sdam/single/direct_connection_rsarbiter.yml +1 -1
  281. data/spec/support/sdam/single/direct_connection_rsprimary.yml +1 -1
  282. data/spec/support/sdam/single/direct_connection_rssecondary.yml +1 -1
  283. data/spec/support/sdam/single/direct_connection_slave.yml +1 -1
  284. data/spec/support/sdam/single/direct_connection_standalone.yml +1 -1
  285. data/spec/support/sdam/single/not_ok_response.yml +0 -1
  286. data/spec/support/server_discovery_and_monitoring.rb +22 -3
  287. data/spec/support/server_selection.rb +3 -1
  288. data/spec/support/shared/bulk_write.rb +218 -22
  289. data/spec/support/shared/server_selector.rb +80 -14
  290. data.tar.gz.sig +0 -0
  291. metadata +188 -59
  292. metadata.gz.sig +0 -0
  293. data/lib/mongo/bulk_write/bulk_writable.rb +0 -196
  294. data/lib/mongo/bulk_write/deletable.rb +0 -56
  295. data/lib/mongo/bulk_write/insertable.rb +0 -48
  296. data/lib/mongo/bulk_write/replacable.rb +0 -57
  297. data/lib/mongo/bulk_write/updatable.rb +0 -68
  298. data/lib/mongo/grid/fs.rb +0 -149
  299. data/lib/mongo/operation/list_collections/result.rb +0 -114
  300. data/lib/mongo/operation/list_indexes/result.rb +0 -118
  301. data/lib/mongo/operation/read/collections_info.rb +0 -68
  302. data/lib/mongo/operation/read/indexes.rb +0 -69
  303. data/lib/mongo/operation/read/list_collections.rb +0 -76
  304. data/lib/mongo/operation/read/list_indexes.rb +0 -78
  305. data/lib/mongo/operation/write/bulk/bulk_delete/result.rb +0 -75
  306. data/lib/mongo/operation/write/bulk/bulk_delete.rb +0 -145
  307. data/lib/mongo/operation/write/bulk/bulk_insert/result.rb +0 -130
  308. data/lib/mongo/operation/write/bulk/bulk_insert.rb +0 -132
  309. data/lib/mongo/operation/write/bulk/bulk_mergable.rb +0 -67
  310. data/lib/mongo/operation/write/bulk/bulk_update/result.rb +0 -162
  311. data/lib/mongo/operation/write/bulk/bulk_update.rb +0 -154
  312. data/lib/mongo/operation/write/bulk/legacy_bulk_mergable.rb +0 -83
  313. data/spec/mongo/bulk/bulk_write_spec.rb +0 -262
  314. data/spec/mongo/grid/fs_spec.rb +0 -160
  315. data/spec/mongo/loggable_spec.rb +0 -63
  316. data/spec/mongo/operation/aggregate_spec.rb +0 -127
  317. /data/lib/mongo/operation/{aggregate → commands/aggregate}/result.rb +0 -0
@@ -0,0 +1,121 @@
1
+ tests:
2
+ -
3
+ description: "Single IPv4 host without port"
4
+ uri: "mongodb://127.0.0.1"
5
+ valid: true
6
+ warning: false
7
+ hosts:
8
+ -
9
+ type: "ipv4"
10
+ host: "127.0.0.1"
11
+ port: ~
12
+ auth: ~
13
+ options: ~
14
+ -
15
+ description: "Single IPv4 host with port"
16
+ uri: "mongodb://127.0.0.1:27018"
17
+ valid: true
18
+ warning: false
19
+ hosts:
20
+ -
21
+ type: "ipv4"
22
+ host: "127.0.0.1"
23
+ port: 27018
24
+ auth: ~
25
+ options: ~
26
+ -
27
+ description: "Single IP literal host without port"
28
+ uri: "mongodb://[::1]"
29
+ valid: true
30
+ warning: false
31
+ hosts:
32
+ -
33
+ type: "ip_literal"
34
+ host: "::1"
35
+ port: ~
36
+ auth: ~
37
+ options: ~
38
+ -
39
+ description: "Single IP literal host with port"
40
+ uri: "mongodb://[::1]:27019"
41
+ valid: true
42
+ warning: false
43
+ hosts:
44
+ -
45
+ type: "ip_literal"
46
+ host: "::1"
47
+ port: 27019
48
+ auth: ~
49
+ options: ~
50
+ -
51
+ description: "Single hostname without port"
52
+ uri: "mongodb://example.com"
53
+ valid: true
54
+ warning: false
55
+ hosts:
56
+ -
57
+ type: "hostname"
58
+ host: "example.com"
59
+ port: ~
60
+ auth: ~
61
+ options: ~
62
+ -
63
+ description: "Single hostname with port"
64
+ uri: "mongodb://example.com:27020"
65
+ valid: true
66
+ warning: false
67
+ hosts:
68
+ -
69
+ type: "hostname"
70
+ host: "example.com"
71
+ port: 27020
72
+ auth: ~
73
+ options: ~
74
+ -
75
+ description: "Single hostname (resembling IPv4) without port"
76
+ uri: "mongodb://256.0.0.1"
77
+ valid: true
78
+ warning: false
79
+ hosts:
80
+ -
81
+ type: "hostname"
82
+ host: "256.0.0.1"
83
+ port: ~
84
+ auth: ~
85
+ options: ~
86
+ -
87
+ description: "Multiple hosts (mixed formats)"
88
+ uri: "mongodb://127.0.0.1,[::1]:27018,example.com:27019"
89
+ valid: true
90
+ warning: false
91
+ hosts:
92
+ -
93
+ type: "ipv4"
94
+ host: "127.0.0.1"
95
+ port: ~
96
+ -
97
+ type: "ip_literal"
98
+ host: "::1"
99
+ port: 27018
100
+ -
101
+ type: "hostname"
102
+ host: "example.com"
103
+ port: 27019
104
+ auth: ~
105
+ options: ~
106
+ -
107
+ description: "UTF-8 hosts"
108
+ uri: "mongodb://bücher.example.com,umläut.example.com/"
109
+ valid: true
110
+ warning: false
111
+ hosts:
112
+ -
113
+ type: "hostname"
114
+ host: "bücher.example.com"
115
+ port: ~
116
+ -
117
+ type: "hostname"
118
+ host: "umläut.example.com"
119
+ port: ~
120
+ auth: ~
121
+ options: ~
@@ -0,0 +1,30 @@
1
+ tests:
2
+ -
3
+ description: "Option names are normalized to lowercase"
4
+ uri: "mongodb://alice:secret@example.com/admin?AUTHMechanism=MONGODB-CR"
5
+ valid: true
6
+ warning: false
7
+ hosts:
8
+ -
9
+ type: "hostname"
10
+ host: "example.com"
11
+ port: ~
12
+ auth:
13
+ username: "alice"
14
+ password: "secret"
15
+ db: "admin"
16
+ options:
17
+ authmechanism: "MONGODB-CR"
18
+ -
19
+ description: "Option key and value (escaped null bytes)"
20
+ uri: "mongodb://example.com/?replicaSet=my%00rs"
21
+ valid: true
22
+ warning: false
23
+ hosts:
24
+ -
25
+ type: "hostname"
26
+ host: "example.com"
27
+ port: ~
28
+ auth: ~
29
+ options:
30
+ replicaset: "my\0rs"
@@ -0,0 +1,197 @@
1
+ tests:
2
+ -
3
+ description: "Unix domain socket (absolute path with trailing slash)"
4
+ uri: "mongodb://%2Ftmp%2Fmongodb-27017.sock/"
5
+ valid: true
6
+ warning: false
7
+ hosts:
8
+ -
9
+ type: "unix"
10
+ host: "/tmp/mongodb-27017.sock"
11
+ port: ~
12
+ auth: ~
13
+ options: ~
14
+ -
15
+ description: "Unix domain socket (absolute path without trailing slash)"
16
+ uri: "mongodb://%2Ftmp%2Fmongodb-27017.sock"
17
+ valid: true
18
+ warning: false
19
+ hosts:
20
+ -
21
+ type: "unix"
22
+ host: "/tmp/mongodb-27017.sock"
23
+ port: ~
24
+ auth: ~
25
+ options: ~
26
+ -
27
+ description: "Unix domain socket (absolute path with spaces in path)"
28
+ uri: "mongodb://%2Ftmp%2F %2Fmongodb-27017.sock"
29
+ valid: true
30
+ warning: false
31
+ hosts:
32
+ -
33
+ type: "unix"
34
+ host: "/tmp/ /mongodb-27017.sock"
35
+ port: ~
36
+ auth: ~
37
+ options: ~
38
+ -
39
+ description: "Multiple Unix domain sockets (absolute paths)"
40
+ uri: "mongodb://%2Ftmp%2Fmongodb-27017.sock,%2Ftmp%2Fmongodb-27018.sock"
41
+ valid: true
42
+ warning: false
43
+ hosts:
44
+ -
45
+ type: "unix"
46
+ host: "/tmp/mongodb-27017.sock"
47
+ port: ~
48
+ -
49
+ type: "unix"
50
+ host: "/tmp/mongodb-27018.sock"
51
+ port: ~
52
+ auth: ~
53
+ options: ~
54
+ -
55
+ description: "Multiple hosts (absolute path and ipv4)"
56
+ uri: "mongodb://127.0.0.1:27017,%2Ftmp%2Fmongodb-27017.sock"
57
+ valid: true
58
+ warning: false
59
+ hosts:
60
+ -
61
+ type: "ipv4"
62
+ host: "127.0.0.1"
63
+ port: 27017
64
+ -
65
+ type: "unix"
66
+ host: "/tmp/mongodb-27017.sock"
67
+ port: ~
68
+ auth: ~
69
+ options: ~
70
+ -
71
+ description: "Multiple hosts (absolute path and hostname resembling relative path)"
72
+ uri: "mongodb://mongodb-27017.sock,%2Ftmp%2Fmongodb-27018.sock"
73
+ valid: true
74
+ warning: false
75
+ hosts:
76
+ -
77
+ type: "hostname"
78
+ host: "mongodb-27017.sock"
79
+ port: ~
80
+ -
81
+ type: "unix"
82
+ host: "/tmp/mongodb-27018.sock"
83
+ port: ~
84
+ auth: ~
85
+ options: ~
86
+ -
87
+ description: "Unix domain socket with auth database (absolute path)"
88
+ uri: "mongodb://alice:foo@%2Ftmp%2Fmongodb-27017.sock/admin"
89
+ valid: true
90
+ warning: false
91
+ hosts:
92
+ -
93
+ type: "unix"
94
+ host: "/tmp/mongodb-27017.sock"
95
+ port: ~
96
+ auth:
97
+ username: "alice"
98
+ password: "foo"
99
+ db: "admin"
100
+ options: ~
101
+ -
102
+ description: "Unix domain socket with path resembling socket file (absolute path with trailing slash)"
103
+ uri: "mongodb://%2Ftmp%2Fpath.to.sock%2Fmongodb-27017.sock/"
104
+ valid: true
105
+ warning: false
106
+ hosts:
107
+ -
108
+ type: "unix"
109
+ host: "/tmp/path.to.sock/mongodb-27017.sock"
110
+ port: ~
111
+ auth: ~
112
+ options: ~
113
+ -
114
+ description: "Unix domain socket with path resembling socket file (absolute path without trailing slash)"
115
+ uri: "mongodb://%2Ftmp%2Fpath.to.sock%2Fmongodb-27017.sock"
116
+ valid: true
117
+ warning: false
118
+ hosts:
119
+ -
120
+ type: "unix"
121
+ host: "/tmp/path.to.sock/mongodb-27017.sock"
122
+ port: ~
123
+ auth: ~
124
+ options: ~
125
+ -
126
+ description: "Unix domain socket with path resembling socket file and auth (absolute path)"
127
+ uri: "mongodb://bob:bar@%2Ftmp%2Fpath.to.sock%2Fmongodb-27017.sock/admin"
128
+ valid: true
129
+ warning: false
130
+ hosts:
131
+ -
132
+ type: "unix"
133
+ host: "/tmp/path.to.sock/mongodb-27017.sock"
134
+ port: ~
135
+ auth:
136
+ username: "bob"
137
+ password: "bar"
138
+ db: "admin"
139
+ options: ~
140
+ -
141
+ description: "Multiple Unix domain sockets and auth DB resembling a socket (absolute path)"
142
+ uri: "mongodb://%2Ftmp%2Fmongodb-27017.sock,%2Ftmp%2Fmongodb-27018.sock/admin.sock"
143
+ valid: true
144
+ warning: false
145
+ hosts:
146
+ -
147
+ type: "unix"
148
+ host: "/tmp/mongodb-27017.sock"
149
+ port: ~
150
+ -
151
+ type: "unix"
152
+ host: "/tmp/mongodb-27018.sock"
153
+ port: ~
154
+ auth:
155
+ username: ~
156
+ password: ~
157
+ db: "admin.sock"
158
+ options: ~
159
+ -
160
+ description: "Multiple Unix domain sockets with auth DB resembling a path (absolute path)"
161
+ uri: "mongodb://%2Ftmp%2Fmongodb-27017.sock,%2Ftmp%2Fmongodb-27018.sock/admin.shoe"
162
+ valid: true
163
+ warning: false
164
+ hosts:
165
+ -
166
+ type: "unix"
167
+ host: "/tmp/mongodb-27017.sock"
168
+ port: ~
169
+ -
170
+ type: "unix"
171
+ host: "/tmp/mongodb-27018.sock"
172
+ port: ~
173
+ auth:
174
+ username: ~
175
+ password: ~
176
+ db: "admin.shoe"
177
+ options: ~
178
+ -
179
+ description: "Multiple Unix domain sockets with auth and query string (absolute path)"
180
+ uri: "mongodb://bob:bar@%2Ftmp%2Fmongodb-27017.sock,%2Ftmp%2Fmongodb-27018.sock/admin?w=1"
181
+ valid: true
182
+ warning: false
183
+ hosts:
184
+ -
185
+ type: "unix"
186
+ host: "/tmp/mongodb-27017.sock"
187
+ port: ~
188
+ -
189
+ type: "unix"
190
+ host: "/tmp/mongodb-27018.sock"
191
+ port: ~
192
+ auth:
193
+ username: "bob"
194
+ password: "bar"
195
+ db: "admin"
196
+ options:
197
+ w: 1
@@ -0,0 +1,213 @@
1
+ tests:
2
+ -
3
+ description: "Unix domain socket (relative path with trailing slash)"
4
+ uri: "mongodb://rel%2Fmongodb-27017.sock/"
5
+ valid: true
6
+ warning: false
7
+ hosts:
8
+ -
9
+ type: "unix"
10
+ host: "rel/mongodb-27017.sock"
11
+ port: ~
12
+ auth: ~
13
+ options: ~
14
+ -
15
+ description: "Unix domain socket (relative path without trailing slash)"
16
+ uri: "mongodb://rel%2Fmongodb-27017.sock"
17
+ valid: true
18
+ warning: false
19
+ hosts:
20
+ -
21
+ type: "unix"
22
+ host: "rel/mongodb-27017.sock"
23
+ port: ~
24
+ auth: ~
25
+ options: ~
26
+ -
27
+ description: "Unix domain socket (relative path with spaces)"
28
+ uri: "mongodb://rel%2F %2Fmongodb-27017.sock"
29
+ valid: true
30
+ warning: false
31
+ hosts:
32
+ -
33
+ type: "unix"
34
+ host: "rel/ /mongodb-27017.sock"
35
+ port: ~
36
+ auth: ~
37
+ options: ~
38
+ -
39
+ description: "Multiple Unix domain sockets (relative paths)"
40
+ uri: "mongodb://rel%2Fmongodb-27017.sock,rel%2Fmongodb-27018.sock"
41
+ valid: true
42
+ warning: false
43
+ hosts:
44
+ -
45
+ type: "unix"
46
+ host: "rel/mongodb-27017.sock"
47
+ port: ~
48
+ -
49
+ type: "unix"
50
+ host: "rel/mongodb-27018.sock"
51
+ port: ~
52
+ auth: ~
53
+ options: ~
54
+ -
55
+ description: "Multiple Unix domain sockets (relative and absolute paths)"
56
+ uri: "mongodb://rel%2Fmongodb-27017.sock,%2Ftmp%2Fmongodb-27018.sock"
57
+ valid: true
58
+ warning: false
59
+ hosts:
60
+ -
61
+ type: "unix"
62
+ host: "rel/mongodb-27017.sock"
63
+ port: ~
64
+ -
65
+ type: "unix"
66
+ host: "/tmp/mongodb-27018.sock"
67
+ port: ~
68
+ auth: ~
69
+ options: ~
70
+ -
71
+ description: "Multiple hosts (relative path and ipv4)"
72
+ uri: "mongodb://127.0.0.1:27017,rel%2Fmongodb-27017.sock"
73
+ valid: true
74
+ warning: false
75
+ hosts:
76
+ -
77
+ type: "ipv4"
78
+ host: "127.0.0.1"
79
+ port: 27017
80
+ -
81
+ type: "unix"
82
+ host: "rel/mongodb-27017.sock"
83
+ port: ~
84
+ auth: ~
85
+ options: ~
86
+ -
87
+ description: "Multiple hosts (relative path and hostname resembling relative path)"
88
+ uri: "mongodb://mongodb-27017.sock,rel%2Fmongodb-27018.sock"
89
+ valid: true
90
+ warning: false
91
+ hosts:
92
+ -
93
+ type: "hostname"
94
+ host: "mongodb-27017.sock"
95
+ port: ~
96
+ -
97
+ type: "unix"
98
+ host: "rel/mongodb-27018.sock"
99
+ port: ~
100
+ auth: ~
101
+ options: ~
102
+ -
103
+ description: "Unix domain socket with auth database (relative path)"
104
+ uri: "mongodb://alice:foo@rel%2Fmongodb-27017.sock/admin"
105
+ valid: true
106
+ warning: false
107
+ hosts:
108
+ -
109
+ type: "unix"
110
+ host: "rel/mongodb-27017.sock"
111
+ port: ~
112
+ auth:
113
+ username: "alice"
114
+ password: "foo"
115
+ db: "admin"
116
+ options: ~
117
+ -
118
+ description: "Unix domain socket with path resembling socket file (relative path with trailing slash)"
119
+ uri: "mongodb://rel%2Fpath.to.sock%2Fmongodb-27017.sock/"
120
+ valid: true
121
+ warning: false
122
+ hosts:
123
+ -
124
+ type: "unix"
125
+ host: "rel/path.to.sock/mongodb-27017.sock"
126
+ port: ~
127
+ auth: ~
128
+ options: ~
129
+ -
130
+ description: "Unix domain socket with path resembling socket file (relative path without trailing slash)"
131
+ uri: "mongodb://rel%2Fpath.to.sock%2Fmongodb-27017.sock"
132
+ valid: true
133
+ warning: false
134
+ hosts:
135
+ -
136
+ type: "unix"
137
+ host: "rel/path.to.sock/mongodb-27017.sock"
138
+ port: ~
139
+ auth: ~
140
+ options: ~
141
+ -
142
+ description: "Unix domain socket with path resembling socket file and auth (relative path)"
143
+ uri: "mongodb://bob:bar@rel%2Fpath.to.sock%2Fmongodb-27017.sock/admin"
144
+ valid: true
145
+ warning: false
146
+ hosts:
147
+ -
148
+ type: "unix"
149
+ host: "rel/path.to.sock/mongodb-27017.sock"
150
+ port: ~
151
+ auth:
152
+ username: "bob"
153
+ password: "bar"
154
+ db: "admin"
155
+ options: ~
156
+ -
157
+ description: "Multiple Unix domain sockets and auth DB resembling a socket (relative path)"
158
+ uri: "mongodb://rel%2Fmongodb-27017.sock,rel%2Fmongodb-27018.sock/admin.sock"
159
+ valid: true
160
+ warning: false
161
+ hosts:
162
+ -
163
+ type: "unix"
164
+ host: "rel/mongodb-27017.sock"
165
+ port: ~
166
+ -
167
+ type: "unix"
168
+ host: "rel/mongodb-27018.sock"
169
+ port: ~
170
+ auth:
171
+ username: ~
172
+ password: ~
173
+ db: "admin.sock"
174
+ options: ~
175
+ -
176
+ description: "Multiple Unix domain sockets with auth DB resembling a path (relative path)"
177
+ uri: "mongodb://rel%2Fmongodb-27017.sock,rel%2Fmongodb-27018.sock/admin.shoe"
178
+ valid: true
179
+ warning: false
180
+ hosts:
181
+ -
182
+ type: "unix"
183
+ host: "rel/mongodb-27017.sock"
184
+ port: ~
185
+ -
186
+ type: "unix"
187
+ host: "rel/mongodb-27018.sock"
188
+ port: ~
189
+ auth:
190
+ username: ~
191
+ password: ~
192
+ db: "admin.shoe"
193
+ options: ~
194
+ -
195
+ description: "Multiple Unix domain sockets with auth and query string (relative path)"
196
+ uri: "mongodb://bob:bar@rel%2Fmongodb-27017.sock,rel%2Fmongodb-27018.sock/admin?w=1"
197
+ valid: true
198
+ warning: false
199
+ hosts:
200
+ -
201
+ type: "unix"
202
+ host: "rel/mongodb-27017.sock"
203
+ port: ~
204
+ -
205
+ type: "unix"
206
+ host: "rel/mongodb-27018.sock"
207
+ port: ~
208
+ auth:
209
+ username: "bob"
210
+ password: "bar"
211
+ db: "admin"
212
+ options:
213
+ w: 1
@@ -0,0 +1,55 @@
1
+ tests:
2
+ -
3
+ description: "Unrecognized option keys are ignored"
4
+ uri: "mongodb://example.com/?foo=bar"
5
+ valid: true
6
+ warning: true
7
+ hosts:
8
+ -
9
+ type: "hostname"
10
+ host: "example.com"
11
+ port: ~
12
+ auth: ~
13
+ options: ~
14
+ #
15
+ # A Mongo::Client doesn't validate option values when initialized so the uri doesn't either.
16
+ # -
17
+ # description: "Unsupported option values are ignored"
18
+ # uri: "mongodb://example.com/?fsync=ifPossible"
19
+ # valid: true
20
+ # warning: true
21
+ # hosts:
22
+ # -
23
+ # type: "hostname"
24
+ # host: "example.com"
25
+ # port: ~
26
+ # auth: ~
27
+ # options: ~
28
+ # -
29
+ description: "Repeated option keys"
30
+ uri: "mongodb://example.com/?replicaSet=test&replicaSet=test"
31
+ valid: true
32
+ warning: true
33
+ hosts:
34
+ -
35
+ type: "hostname"
36
+ host: "example.com"
37
+ port: ~
38
+ auth: ~
39
+ options:
40
+ replicaset: "test"
41
+ #
42
+ # Change this test in the future if there is a deprecated option in driver 2.0
43
+ # -
44
+ # description: "Deprecated (or unknown) options are ignored if replacement exists"
45
+ # uri: "mongodb://example.com/?wtimeout=5&wtimeoutMS=10"
46
+ # valid: true
47
+ # warning: true
48
+ # hosts:
49
+ # -
50
+ # type: "hostname"
51
+ # host: "example.com"
52
+ # port: ~
53
+ # auth: ~
54
+ # options:
55
+ # wtimeoutms: 10
@@ -27,7 +27,7 @@ module Mongo
27
27
  # @since 2.0.0
28
28
  ARGUMENT_MAP = { :sort => 'sort',
29
29
  :skip => 'skip',
30
- :batch_size => 'batch_size',
30
+ :batch_size => 'batchSize',
31
31
  :limit => 'limit'
32
32
  }
33
33
 
@@ -37,7 +37,7 @@ module Mongo
37
37
  #
38
38
  # @since 2.0.0
39
39
  attr_reader :name
40
-
40
+
41
41
  # Instantiate the operation.
42
42
  #
43
43
  # @return [ Hash ] spec The operation spec.
@@ -91,34 +91,33 @@ module Mongo
91
91
  end
92
92
 
93
93
  private
94
-
94
+
95
95
  def count(collection)
96
- view = collection.find(filter)
97
96
  options = ARGUMENT_MAP.reduce({}) do |opts, (key, value)|
98
97
  opts.merge!(key => arguments[value]) if arguments[value]
99
98
  opts
100
99
  end
101
- view.count(options)
100
+ collection.count(filter, options)
102
101
  end
103
-
102
+
104
103
  def aggregate(collection)
105
- collection.find.tap do |view|
106
- view = view.batch_size(batch_size) if batch_size
107
- end.aggregate(pipeline).to_a
104
+ collection.aggregate(pipeline, options).to_a
108
105
  end
109
-
106
+
110
107
  def distinct(collection)
111
- collection.find(filter).distinct(field_name)
108
+ collection.distinct(field_name, filter, options)
112
109
  end
113
-
110
+
114
111
  def find(collection)
115
- view = collection.find(filter)
116
- ARGUMENT_MAP.each do |key, value|
117
- view = view.send(key, arguments[value]) if arguments[value]
112
+ collection.find(filter, options.merge(modifiers: BSON::Document.new(modifiers) || {})).to_a
113
+ end
114
+
115
+ def options
116
+ ARGUMENT_MAP.reduce({}) do |opts, (key, value)|
117
+ arguments[value] ? opts.merge!(key => arguments[value]) : opts
118
118
  end
119
- view.to_a
120
119
  end
121
-
120
+
122
121
  def batch_size
123
122
  arguments['batchSize']
124
123
  end
@@ -126,11 +125,15 @@ module Mongo
126
125
  def filter
127
126
  arguments['filter']
128
127
  end
129
-
128
+
130
129
  def pipeline
131
130
  arguments['pipeline']
132
131
  end
133
132
 
133
+ def modifiers
134
+ arguments['modifiers']
135
+ end
136
+
134
137
  def field_name
135
138
  arguments['fieldName']
136
139
  end
@@ -141,4 +144,4 @@ module Mongo
141
144
  end
142
145
  end
143
146
  end
144
- end
147
+ end