mongo 2.1.0.beta → 2.1.0.rc0

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 (253) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/Rakefile +2 -2
  5. data/lib/mongo.rb +2 -3
  6. data/lib/mongo/address.rb +7 -5
  7. data/lib/mongo/address/unix.rb +2 -2
  8. data/lib/mongo/auth/ldap/conversation.rb +6 -2
  9. data/lib/mongo/auth/scram/conversation.rb +8 -2
  10. data/lib/mongo/auth/user/view.rb +21 -0
  11. data/lib/mongo/bulk_write.rb +155 -23
  12. data/lib/mongo/bulk_write/combineable.rb +51 -0
  13. data/lib/mongo/bulk_write/ordered_combiner.rb +55 -0
  14. data/lib/mongo/bulk_write/result.rb +61 -8
  15. data/lib/mongo/bulk_write/result_combiner.rb +117 -0
  16. data/lib/mongo/bulk_write/transformable.rb +117 -0
  17. data/lib/mongo/bulk_write/unordered_combiner.rb +52 -0
  18. data/lib/mongo/bulk_write/validatable.rb +62 -0
  19. data/lib/mongo/client.rb +7 -3
  20. data/lib/mongo/cluster.rb +3 -3
  21. data/lib/mongo/cluster/topology/replica_set.rb +8 -6
  22. data/lib/mongo/cluster/topology/unknown.rb +5 -2
  23. data/lib/mongo/collection.rb +75 -4
  24. data/lib/mongo/collection/view.rb +1 -2
  25. data/lib/mongo/collection/view/aggregation.rb +13 -8
  26. data/lib/mongo/collection/view/immutable.rb +6 -6
  27. data/lib/mongo/collection/view/iterable.rb +13 -4
  28. data/lib/mongo/collection/view/map_reduce.rb +22 -17
  29. data/lib/mongo/collection/view/readable.rb +121 -70
  30. data/lib/mongo/cursor.rb +5 -1
  31. data/lib/mongo/database.rb +3 -3
  32. data/lib/mongo/database/view.rb +1 -1
  33. data/lib/mongo/error.rb +7 -0
  34. data/lib/mongo/{bulk_write/unordered_bulk_write.rb → error/closed_stream.rb} +12 -21
  35. data/lib/mongo/{bulk_write/ordered_bulk_write.rb → error/extra_file_chunk.rb} +13 -27
  36. data/lib/mongo/error/file_not_found.rb +37 -0
  37. data/lib/mongo/error/invalid_file.rb +2 -2
  38. data/lib/mongo/error/invalid_file_revision.rb +37 -0
  39. data/lib/mongo/error/invalid_uri.rb +5 -4
  40. data/lib/mongo/error/missing_file_chunk.rb +38 -0
  41. data/lib/mongo/error/operation_failure.rb +1 -1
  42. data/lib/mongo/error/unchangeable_collection_option.rb +38 -0
  43. data/lib/mongo/error/unexpected_chunk_length.rb +39 -0
  44. data/lib/mongo/grid.rb +2 -1
  45. data/lib/mongo/grid/file.rb +12 -9
  46. data/lib/mongo/grid/file/chunk.rb +6 -6
  47. data/lib/mongo/grid/file/{metadata.rb → info.rb} +41 -39
  48. data/lib/mongo/grid/fs_bucket.rb +441 -0
  49. data/lib/mongo/grid/stream.rb +64 -0
  50. data/lib/mongo/grid/stream/read.rb +208 -0
  51. data/lib/mongo/grid/stream/write.rb +187 -0
  52. data/lib/mongo/index/view.rb +1 -1
  53. data/lib/mongo/loggable.rb +34 -57
  54. data/lib/mongo/logger.rb +16 -78
  55. data/lib/mongo/monitoring.rb +1 -5
  56. data/lib/mongo/monitoring/command_log_subscriber.rb +35 -17
  57. data/lib/mongo/monitoring/event/command_succeeded.rb +20 -1
  58. data/lib/mongo/monitoring/publishable.rb +22 -12
  59. data/lib/mongo/operation.rb +3 -6
  60. data/lib/mongo/operation/commands.rb +24 -0
  61. data/lib/mongo/operation/{aggregate.rb → commands/aggregate.rb} +3 -41
  62. data/lib/mongo/operation/{aggregate → commands/aggregate}/result.rb +0 -0
  63. data/lib/mongo/operation/commands/collections_info.rb +66 -0
  64. data/lib/mongo/operation/{command.rb → commands/command.rb} +2 -18
  65. data/lib/mongo/operation/commands/indexes.rb +70 -0
  66. data/lib/mongo/operation/commands/list_collections.rb +54 -0
  67. data/lib/mongo/operation/commands/list_collections/result.rb +112 -0
  68. data/lib/mongo/operation/commands/list_indexes.rb +56 -0
  69. data/lib/mongo/operation/commands/list_indexes/result.rb +115 -0
  70. data/lib/mongo/operation/{map_reduce.rb → commands/map_reduce.rb} +3 -41
  71. data/lib/mongo/operation/{map_reduce → commands/map_reduce}/result.rb +0 -0
  72. data/lib/mongo/operation/{parallel_scan.rb → commands/parallel_scan.rb} +3 -23
  73. data/lib/mongo/operation/{parallel_scan → commands/parallel_scan}/result.rb +0 -0
  74. data/lib/mongo/operation/commands/user_query.rb +69 -0
  75. data/lib/mongo/operation/commands/users_info.rb +53 -0
  76. data/lib/mongo/operation/commands/users_info/result.rb +36 -0
  77. data/lib/mongo/operation/executable.rb +4 -68
  78. data/lib/mongo/operation/kill_cursors.rb +3 -3
  79. data/lib/mongo/operation/read.rb +0 -4
  80. data/lib/mongo/operation/read/get_more.rb +2 -22
  81. data/lib/mongo/operation/read/query.rb +2 -21
  82. data/lib/mongo/operation/{read_preferrable.rb → read_preference.rb} +3 -2
  83. data/lib/mongo/operation/specifiable.rb +24 -0
  84. data/lib/mongo/operation/write.rb +2 -0
  85. data/lib/mongo/operation/write/bulk.rb +6 -3
  86. data/lib/mongo/operation/write/bulk/bulkable.rb +82 -0
  87. data/lib/mongo/operation/write/bulk/delete.rb +71 -0
  88. data/lib/mongo/operation/write/bulk/delete/result.rb +74 -0
  89. data/lib/mongo/operation/write/bulk/insert.rb +96 -0
  90. data/lib/mongo/operation/write/bulk/insert/result.rb +129 -0
  91. data/lib/mongo/operation/write/bulk/legacy_mergable.rb +87 -0
  92. data/lib/mongo/operation/write/bulk/mergable.rb +71 -0
  93. data/lib/mongo/operation/write/bulk/update.rb +81 -0
  94. data/lib/mongo/operation/write/bulk/update/result.rb +174 -0
  95. data/lib/mongo/operation/write/command/create_index.rb +0 -1
  96. data/lib/mongo/operation/write/command/create_user.rb +0 -1
  97. data/lib/mongo/operation/write/command/delete.rb +0 -1
  98. data/lib/mongo/operation/write/command/drop_index.rb +0 -1
  99. data/lib/mongo/operation/write/command/insert.rb +0 -1
  100. data/lib/mongo/operation/write/command/remove_user.rb +0 -1
  101. data/lib/mongo/operation/write/command/update.rb +0 -1
  102. data/lib/mongo/operation/write/command/update_user.rb +0 -1
  103. data/lib/mongo/operation/write/command/writable.rb +13 -18
  104. data/lib/mongo/operation/write/create_index.rb +4 -27
  105. data/lib/mongo/operation/write/create_user.rb +4 -30
  106. data/lib/mongo/operation/write/delete.rb +5 -28
  107. data/lib/mongo/operation/write/drop_index.rb +3 -3
  108. data/lib/mongo/operation/write/gle.rb +48 -0
  109. data/lib/mongo/operation/write/idable.rb +5 -0
  110. data/lib/mongo/operation/write/insert.rb +2 -24
  111. data/lib/mongo/operation/write/remove_user.rb +4 -27
  112. data/lib/mongo/operation/write/update.rb +4 -32
  113. data/lib/mongo/operation/write/update_user.rb +4 -30
  114. data/lib/mongo/operation/write/write_command_enabled.rb +53 -0
  115. data/lib/mongo/options/mapper.rb +4 -2
  116. data/lib/mongo/protocol/delete.rb +68 -3
  117. data/lib/mongo/protocol/get_more.rb +54 -2
  118. data/lib/mongo/protocol/insert.rb +59 -1
  119. data/lib/mongo/protocol/kill_cursors.rb +53 -4
  120. data/lib/mongo/protocol/message.rb +12 -12
  121. data/lib/mongo/protocol/query.rb +139 -65
  122. data/lib/mongo/protocol/reply.rb +69 -1
  123. data/lib/mongo/protocol/update.rb +70 -1
  124. data/lib/mongo/server/connection.rb +11 -3
  125. data/lib/mongo/server/description.rb +29 -0
  126. data/lib/mongo/server/description/features.rb +2 -1
  127. data/lib/mongo/server/monitor.rb +2 -2
  128. data/lib/mongo/server_selector.rb +14 -10
  129. data/lib/mongo/server_selector/selectable.rb +24 -22
  130. data/lib/mongo/socket.rb +6 -3
  131. data/lib/mongo/socket/tcp.rb +2 -2
  132. data/lib/mongo/socket/unix.rb +5 -8
  133. data/lib/mongo/uri.rb +243 -139
  134. data/lib/mongo/version.rb +1 -1
  135. data/spec/mongo/address/unix_spec.rb +1 -1
  136. data/spec/mongo/address_spec.rb +25 -0
  137. data/spec/mongo/auth/ldap/conversation_spec.rb +43 -0
  138. data/spec/mongo/auth/user/view_spec.rb +26 -1
  139. data/spec/mongo/bulk_write/ordered_combiner_spec.rb +271 -0
  140. data/spec/mongo/bulk_write/unordered_combiner_spec.rb +239 -0
  141. data/spec/mongo/bulk_write_spec.rb +332 -166
  142. data/spec/mongo/client_spec.rb +25 -0
  143. data/spec/mongo/cluster/topology/replica_set_spec.rb +2 -0
  144. data/spec/mongo/collection/view/aggregation_spec.rb +65 -0
  145. data/spec/mongo/collection/view/immutable_spec.rb +103 -0
  146. data/spec/mongo/collection/view/map_reduce_spec.rb +98 -3
  147. data/spec/mongo/collection/view/readable_spec.rb +17 -30
  148. data/spec/mongo/collection/view_spec.rb +233 -7
  149. data/spec/mongo/collection_spec.rb +360 -18
  150. data/spec/mongo/command_monitoring_spec.rb +51 -0
  151. data/spec/mongo/connection_string_spec.rb +137 -0
  152. data/spec/mongo/database_spec.rb +27 -11
  153. data/spec/mongo/grid/file/chunk_spec.rb +5 -5
  154. data/spec/mongo/grid/file/{metadata_spec.rb → info_spec.rb} +29 -17
  155. data/spec/mongo/grid/file_spec.rb +8 -8
  156. data/spec/mongo/grid/fs_bucket_spec.rb +1020 -0
  157. data/spec/mongo/grid/stream/read_spec.rb +275 -0
  158. data/spec/mongo/grid/stream/write_spec.rb +440 -0
  159. data/spec/mongo/grid/stream_spec.rb +48 -0
  160. data/spec/mongo/gridfs_spec.rb +50 -0
  161. data/spec/mongo/logger_spec.rb +0 -40
  162. data/spec/mongo/monitoring/command_log_subscriber_spec.rb +76 -0
  163. data/spec/mongo/operation/{aggregate_spec.rb → commands/aggregate_spec.rb} +0 -42
  164. data/spec/mongo/operation/{read → commands}/collections_info_spec.rb +1 -1
  165. data/spec/mongo/operation/{command_spec.rb → commands/command_spec.rb} +0 -0
  166. data/spec/mongo/operation/{read → commands}/indexes_spec.rb +1 -1
  167. data/spec/mongo/operation/{map_reduce_spec.rb → commands/map_reduce_spec.rb} +0 -18
  168. data/spec/mongo/operation/kill_cursors_spec.rb +1 -1
  169. data/spec/mongo/operation/{read_preferrable_spec.rb → read_preference_spec.rb} +11 -11
  170. data/spec/mongo/operation/write/bulk/{bulk_delete_spec.rb → delete_spec.rb} +1 -12
  171. data/spec/mongo/operation/write/bulk/{bulk_insert_spec.rb → insert_spec.rb} +1 -12
  172. data/spec/mongo/operation/write/bulk/{bulk_update_spec.rb → update_spec.rb} +1 -12
  173. data/spec/mongo/operation/write/insert_spec.rb +0 -11
  174. data/spec/mongo/protocol/kill_cursors_spec.rb +5 -3
  175. data/spec/mongo/server/description_spec.rb +42 -0
  176. data/spec/mongo/server/monitor_spec.rb +21 -0
  177. data/spec/mongo/server_discovery_and_monitoring_spec.rb +1 -0
  178. data/spec/mongo/server_selection_spec.rb +3 -3
  179. data/spec/mongo/server_selector/nearest_spec.rb +34 -27
  180. data/spec/mongo/server_selector/primary_preferred_spec.rb +31 -30
  181. data/spec/mongo/server_selector/primary_spec.rb +14 -13
  182. data/spec/mongo/server_selector/secondary_preferred_spec.rb +27 -26
  183. data/spec/mongo/server_selector/secondary_spec.rb +23 -22
  184. data/spec/mongo/server_selector_spec.rb +87 -24
  185. data/spec/mongo/socket/unix_spec.rb +52 -0
  186. data/spec/mongo/uri_spec.rb +251 -39
  187. data/spec/spec_helper.rb +11 -4
  188. data/spec/support/authorization.rb +4 -5
  189. data/spec/support/command_monitoring.rb +365 -0
  190. data/spec/support/command_monitoring/bulkWrite.yml +73 -0
  191. data/spec/support/command_monitoring/command.yml +42 -0
  192. data/spec/support/command_monitoring/deleteMany.yml +55 -0
  193. data/spec/support/command_monitoring/deleteOne.yml +55 -0
  194. data/spec/support/command_monitoring/find.yml +219 -0
  195. data/spec/support/command_monitoring/insertMany.yml +81 -0
  196. data/spec/support/command_monitoring/insertOne.yml +51 -0
  197. data/spec/support/command_monitoring/updateMany.yml +67 -0
  198. data/spec/support/command_monitoring/updateOne.yml +95 -0
  199. data/spec/support/connection_string.rb +228 -0
  200. data/spec/support/connection_string_tests/invalid-uris.yml +193 -0
  201. data/spec/support/connection_string_tests/valid-auth.yml +256 -0
  202. data/spec/support/connection_string_tests/valid-host_identifiers.yml +121 -0
  203. data/spec/support/connection_string_tests/valid-options.yml +30 -0
  204. data/spec/support/connection_string_tests/valid-unix_socket-absolute.yml +197 -0
  205. data/spec/support/connection_string_tests/valid-unix_socket-relative.yml +213 -0
  206. data/spec/support/connection_string_tests/valid-warnings.yml +55 -0
  207. data/spec/support/crud.rb +3 -1
  208. data/spec/support/crud/read.rb +14 -10
  209. data/spec/support/crud/write.rb +36 -9
  210. data/spec/support/gridfs.rb +637 -0
  211. data/spec/support/gridfs_tests/delete.yml +157 -0
  212. data/spec/support/gridfs_tests/download.yml +210 -0
  213. data/spec/support/gridfs_tests/download_by_name.yml +113 -0
  214. data/spec/support/gridfs_tests/upload.yml +158 -0
  215. data/spec/support/sdam/rs/equal_electionids.yml +1 -2
  216. data/spec/support/sdam/rs/new_primary_new_electionid.yml +0 -3
  217. data/spec/support/sdam/rs/primary_mismatched_me.yml +37 -0
  218. data/spec/support/sdam/rs/primary_to_no_primary_mismatched_me.yml +75 -0
  219. data/spec/support/sdam/rs/secondary_mismatched_me.yml +37 -0
  220. data/spec/support/sdam/single/direct_connection_rsarbiter.yml +1 -1
  221. data/spec/support/sdam/single/direct_connection_rsprimary.yml +1 -1
  222. data/spec/support/sdam/single/direct_connection_rssecondary.yml +1 -1
  223. data/spec/support/sdam/single/direct_connection_slave.yml +1 -1
  224. data/spec/support/sdam/single/direct_connection_standalone.yml +1 -1
  225. data/spec/support/sdam/single/not_ok_response.yml +0 -1
  226. data/spec/support/server_discovery_and_monitoring.rb +3 -1
  227. data/spec/support/server_selection.rb +3 -1
  228. data/spec/support/shared/bulk_write.rb +192 -0
  229. data/spec/support/shared/server_selector.rb +21 -12
  230. metadata +147 -57
  231. metadata.gz.sig +0 -0
  232. data/lib/mongo/bulk_write/bulk_writable.rb +0 -252
  233. data/lib/mongo/bulk_write/deletable.rb +0 -57
  234. data/lib/mongo/bulk_write/insertable.rb +0 -49
  235. data/lib/mongo/bulk_write/replacable.rb +0 -58
  236. data/lib/mongo/bulk_write/updatable.rb +0 -69
  237. data/lib/mongo/grid/fs.rb +0 -146
  238. data/lib/mongo/operation/list_collections/result.rb +0 -114
  239. data/lib/mongo/operation/list_indexes/result.rb +0 -118
  240. data/lib/mongo/operation/read/collections_info.rb +0 -68
  241. data/lib/mongo/operation/read/indexes.rb +0 -69
  242. data/lib/mongo/operation/read/list_collections.rb +0 -76
  243. data/lib/mongo/operation/read/list_indexes.rb +0 -78
  244. data/lib/mongo/operation/write/bulk/bulk_delete.rb +0 -145
  245. data/lib/mongo/operation/write/bulk/bulk_delete/result.rb +0 -75
  246. data/lib/mongo/operation/write/bulk/bulk_insert.rb +0 -132
  247. data/lib/mongo/operation/write/bulk/bulk_insert/result.rb +0 -130
  248. data/lib/mongo/operation/write/bulk/bulk_mergable.rb +0 -67
  249. data/lib/mongo/operation/write/bulk/bulk_update.rb +0 -154
  250. data/lib/mongo/operation/write/bulk/bulk_update/result.rb +0 -174
  251. data/lib/mongo/operation/write/bulk/legacy_bulk_mergable.rb +0 -83
  252. data/spec/mongo/grid/fs_spec.rb +0 -160
  253. data/spec/mongo/loggable_spec.rb +0 -63
@@ -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
data/spec/support/crud.rb CHANGED
@@ -53,7 +53,9 @@ module Mongo
53
53
  #
54
54
  # @since 2.0.0
55
55
  def initialize(file)
56
- @spec = YAML.load(ERB.new(File.new(file).read).result)
56
+ file = File.new(file)
57
+ @spec = YAML.load(ERB.new(file.read).result)
58
+ file.close
57
59
  @description = File.basename(file)
58
60
  @data = @spec['data']
59
61
  @crud_tests = @spec['tests']
@@ -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,7 +91,7 @@ module Mongo
91
91
  end
92
92
 
93
93
  private
94
-
94
+
95
95
  def count(collection)
96
96
  options = ARGUMENT_MAP.reduce({}) do |opts, (key, value)|
97
97
  opts.merge!(key => arguments[value]) if arguments[value]
@@ -99,17 +99,17 @@ module Mongo
99
99
  end
100
100
  collection.count(filter, options)
101
101
  end
102
-
102
+
103
103
  def aggregate(collection)
104
104
  collection.aggregate(pipeline, options).to_a
105
105
  end
106
-
106
+
107
107
  def distinct(collection)
108
108
  collection.distinct(field_name, filter, options)
109
109
  end
110
-
110
+
111
111
  def find(collection)
112
- collection.find(filter, options).to_a
112
+ collection.find(filter, options.merge(modifiers: BSON::Document.new(modifiers) || {})).to_a
113
113
  end
114
114
 
115
115
  def options
@@ -117,7 +117,7 @@ module Mongo
117
117
  arguments[value] ? opts.merge!(key => arguments[value]) : opts
118
118
  end
119
119
  end
120
-
120
+
121
121
  def batch_size
122
122
  arguments['batchSize']
123
123
  end
@@ -125,11 +125,15 @@ module Mongo
125
125
  def filter
126
126
  arguments['filter']
127
127
  end
128
-
128
+
129
129
  def pipeline
130
130
  arguments['pipeline']
131
131
  end
132
132
 
133
+ def modifiers
134
+ arguments['modifiers']
135
+ end
136
+
133
137
  def field_name
134
138
  arguments['fieldName']
135
139
  end
@@ -140,4 +144,4 @@ module Mongo
140
144
  end
141
145
  end
142
146
  end
143
- end
147
+ end
@@ -21,7 +21,7 @@ module Mongo
21
21
  #
22
22
  # @since 2.0.0
23
23
  class Write
24
-
24
+
25
25
  # Map of CRUD operation names to method names.
26
26
  #
27
27
  # @since 2.0.0
@@ -34,7 +34,8 @@ module Mongo
34
34
  'updateOne' => :update_one,
35
35
  'findOneAndDelete' => :find_one_and_delete,
36
36
  'findOneAndReplace' => :find_one_and_replace,
37
- 'findOneAndUpdate' => :find_one_and_update
37
+ 'findOneAndUpdate' => :find_one_and_update,
38
+ 'bulkWrite' => :bulk_write
38
39
  }
39
40
 
40
41
  # Map of operation options to method names.
@@ -44,7 +45,9 @@ module Mongo
44
45
  :sort => 'sort',
45
46
  :projection => 'projection',
46
47
  :return_document => 'returnDocument',
47
- :upsert => 'upsert'
48
+ :upsert => 'upsert',
49
+ :ordered => 'ordered',
50
+ :write_concern => 'writeConcern'
48
51
  }
49
52
 
50
53
  # Operations that need a check if results on < 2.6 will match.
@@ -54,7 +57,7 @@ module Mongo
54
57
  'updateMany',
55
58
  'updateOne',
56
59
  'replaceOne']
57
-
60
+
58
61
  # The operation name.
59
62
  #
60
63
  # @return [ String ] name The operation name.
@@ -109,9 +112,13 @@ module Mongo
109
112
  def requires_2_6?(collection)
110
113
  REQUIRES_2_6.include?(name) && upsert
111
114
  end
112
-
115
+
113
116
  private
114
-
117
+
118
+ def bulk_write(collection)
119
+ collection.bulk_write(requests, options)
120
+ end
121
+
115
122
  def delete_many(collection)
116
123
  result = collection.delete_many(filter)
117
124
  { 'deletedCount' => result.deleted_count }
@@ -123,7 +130,7 @@ module Mongo
123
130
  end
124
131
 
125
132
  def insert_many(collection)
126
- result = collection.insert_many(documents)
133
+ result = collection.insert_many(documents, options)
127
134
  { 'insertedIds' => result.inserted_ids }
128
135
  end
129
136
 
@@ -167,7 +174,7 @@ module Mongo
167
174
 
168
175
  def options
169
176
  ARGUMENT_MAP.reduce({}) do |opts, (key, value)|
170
- arguments[value] ? opts.merge!(key => send(key)) : opts
177
+ arguments.key?(value) ? opts.merge!(key => send(key)) : opts
171
178
  end
172
179
  end
173
180
 
@@ -191,10 +198,30 @@ module Mongo
191
198
  arguments['document']
192
199
  end
193
200
 
201
+ def write_concern
202
+ arguments['writeConcern']
203
+ end
204
+
205
+ def ordered
206
+ arguments['ordered']
207
+ end
208
+
194
209
  def filter
195
210
  arguments['filter']
196
211
  end
197
212
 
213
+ def requests
214
+ arguments['requests'].map do |request|
215
+ case request.keys.first
216
+ when 'insertOne' then
217
+ { insert_one: request['insertOne']['document'] }
218
+ when 'updateOne' then
219
+ update = request['updateOne']
220
+ { update_one: { filter: update['filter'], update: update['update'] }}
221
+ end
222
+ end
223
+ end
224
+
198
225
  def upsert
199
226
  arguments['upsert']
200
227
  end
@@ -213,4 +240,4 @@ module Mongo
213
240
  end
214
241
  end
215
242
  end
216
- end
243
+ end