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
@@ -6,8 +6,16 @@ describe Mongo::Auth::LDAP do
6
6
  Mongo::Address.new(DEFAULT_ADDRESS)
7
7
  end
8
8
 
9
+ let(:monitoring) do
10
+ Mongo::Monitoring.new
11
+ end
12
+
13
+ let(:listeners) do
14
+ Mongo::Event::Listeners.new
15
+ end
16
+
9
17
  let(:server) do
10
- Mongo::Server.new(address, double('cluster'), Mongo::Event::Listeners.new, TEST_OPTIONS)
18
+ Mongo::Server.new(address, double('cluster'), monitoring, listeners, TEST_OPTIONS)
11
19
  end
12
20
 
13
21
  let(:connection) do
@@ -6,8 +6,16 @@ describe Mongo::Auth::SCRAM do
6
6
  Mongo::Address.new(DEFAULT_ADDRESS)
7
7
  end
8
8
 
9
+ let(:monitoring) do
10
+ Mongo::Monitoring.new
11
+ end
12
+
13
+ let(:listeners) do
14
+ Mongo::Event::Listeners.new
15
+ end
16
+
9
17
  let(:server) do
10
- Mongo::Server.new(address, double('cluster'), Mongo::Event::Listeners.new, TEST_OPTIONS)
18
+ Mongo::Server.new(address, double('cluster'), monitoring, listeners, TEST_OPTIONS)
11
19
  end
12
20
 
13
21
  let(:connection) do
@@ -112,7 +112,32 @@ describe Mongo::Auth::User::View do
112
112
  end
113
113
  end
114
114
 
115
- describe '#update' do
115
+ describe '#info' do
116
+
117
+ context 'when a user exists in the database' do
118
+
119
+ before do
120
+ view.create(
121
+ 'emily',
122
+ password: 'password'
123
+ )
124
+ end
125
+
126
+ after do
127
+ view.remove('emily')
128
+ end
129
+
130
+ it 'returns information for that user' do
131
+ expect(view.info('emily')).to_not be_empty
132
+ end
133
+ end
134
+
135
+ context 'when a user does not exist in the database' do
136
+
137
+ it 'returns nil' do
138
+ expect(view.info('emily')).to be_empty
139
+ end
140
+ end
116
141
 
117
142
  end
118
143
  end
@@ -6,8 +6,16 @@ describe Mongo::Auth::X509 do
6
6
  Mongo::Address.new(DEFAULT_ADDRESS)
7
7
  end
8
8
 
9
+ let(:monitoring) do
10
+ Mongo::Monitoring.new
11
+ end
12
+
13
+ let(:listeners) do
14
+ Mongo::Event::Listeners.new
15
+ end
16
+
9
17
  let(:server) do
10
- Mongo::Server.new(address, double('cluster'), Mongo::Event::Listeners.new, TEST_OPTIONS)
18
+ Mongo::Server.new(address, double('cluster'), monitoring, listeners, TEST_OPTIONS)
11
19
  end
12
20
 
13
21
  let(:connection) do
@@ -0,0 +1,271 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mongo::BulkWrite::OrderedCombiner do
4
+
5
+ describe '#combine' do
6
+
7
+ let(:combiner) do
8
+ described_class.new(requests)
9
+ end
10
+
11
+ context 'when provided a series of delete one' do
12
+
13
+ context 'when the documents are valid' do
14
+
15
+ let(:requests) do
16
+ [
17
+ { delete_one: { filter: { _id: 0 }}},
18
+ { delete_one: { filter: { _id: 1 }}}
19
+ ]
20
+ end
21
+
22
+ it 'returns a single delete one' do
23
+ expect(combiner.combine).to eq(
24
+ [
25
+ {
26
+ delete_one: [
27
+ { 'q' => { _id: 0 }, 'limit' => 1 },
28
+ { 'q' => { _id: 1 }, 'limit' => 1 }
29
+ ]
30
+ }
31
+ ]
32
+ )
33
+ end
34
+ end
35
+
36
+ context 'when a document is not valid' do
37
+
38
+ let(:requests) do
39
+ [
40
+ { delete_one: { filter: { _id: 0 }}},
41
+ { delete_one: 'whoami' }
42
+ ]
43
+ end
44
+
45
+ it 'raises an exception' do
46
+ expect {
47
+ combiner.combine
48
+ }.to raise_error(Mongo::Error::InvalidBulkOperation)
49
+ end
50
+ end
51
+ end
52
+
53
+ context 'when provided a series of delete many' do
54
+
55
+ context 'when the documents are valid' do
56
+
57
+ let(:requests) do
58
+ [
59
+ { delete_many: { filter: { _id: 0 }}},
60
+ { delete_many: { filter: { _id: 1 }}}
61
+ ]
62
+ end
63
+
64
+ it 'returns a single delete many' do
65
+ expect(combiner.combine).to eq(
66
+ [
67
+ {
68
+ delete_many: [
69
+ { 'q' => { _id: 0 }, 'limit' => 0 },
70
+ { 'q' => { _id: 1 }, 'limit' => 0 }
71
+ ]
72
+ }
73
+ ]
74
+ )
75
+ end
76
+ end
77
+
78
+ context 'when a document is not valid' do
79
+
80
+ let(:requests) do
81
+ [
82
+ { delete_many: { filter: { _id: 0 }}},
83
+ { delete_many: 'whoami' }
84
+ ]
85
+ end
86
+
87
+ it 'raises an exception' do
88
+ expect {
89
+ combiner.combine
90
+ }.to raise_error(Mongo::Error::InvalidBulkOperation)
91
+ end
92
+ end
93
+ end
94
+
95
+ context 'when provided a series of insert one' do
96
+
97
+ context 'when the documents are valid' do
98
+
99
+ let(:requests) do
100
+ [{ insert_one: { _id: 0 }}, { insert_one: { _id: 1 }}]
101
+ end
102
+
103
+ it 'returns a single insert one' do
104
+ expect(combiner.combine).to eq(
105
+ [{ insert_one: [{ _id: 0 }, { _id: 1 }]}]
106
+ )
107
+ end
108
+ end
109
+
110
+ context 'when a document is not valid' do
111
+
112
+ let(:requests) do
113
+ [{ insert_one: { _id: 0 }}, { insert_one: 'whoami' }]
114
+ end
115
+
116
+ it 'raises an exception' do
117
+ expect {
118
+ combiner.combine
119
+ }.to raise_error(Mongo::Error::InvalidBulkOperation)
120
+ end
121
+ end
122
+ end
123
+
124
+ context 'when provided a series of replace one' do
125
+
126
+ context 'when the documents are valid' do
127
+
128
+ let(:requests) do
129
+ [
130
+ { replace_one: { filter: { _id: 0 }, replacement: { name: 'test' }}},
131
+ { replace_one: { filter: { _id: 1 }, replacement: { name: 'test' }}}
132
+ ]
133
+ end
134
+
135
+ it 'returns a single replace one' do
136
+ expect(combiner.combine).to eq(
137
+ [
138
+ {
139
+ replace_one: [
140
+ { 'q' => { _id: 0 }, 'u' => { name: 'test' }, 'multi' => false, 'upsert' => false },
141
+ { 'q' => { _id: 1 }, 'u' => { name: 'test' }, 'multi' => false, 'upsert' => false }
142
+ ]
143
+ }
144
+ ]
145
+ )
146
+ end
147
+ end
148
+
149
+ context 'when a document is not valid' do
150
+
151
+ let(:requests) do
152
+ [
153
+ { replace_one: { filter: { _id: 0 }, replacement: { name: 'test' }}},
154
+ { replace_one: 'whoami' }
155
+ ]
156
+ end
157
+
158
+ it 'raises an exception' do
159
+ expect {
160
+ combiner.combine
161
+ }.to raise_error(Mongo::Error::InvalidBulkOperation)
162
+ end
163
+ end
164
+ end
165
+
166
+ context 'when provided a series of update one' do
167
+
168
+ context 'when the documents are valid' do
169
+
170
+ let(:requests) do
171
+ [
172
+ { update_one: { filter: { _id: 0 }, update: { '$set' => { name: 'test' }}}},
173
+ { update_one: { filter: { _id: 1 }, update: { '$set' => { name: 'test' }}}}
174
+ ]
175
+ end
176
+
177
+ it 'returns a single update one' do
178
+ expect(combiner.combine).to eq(
179
+ [
180
+ {
181
+ update_one: [
182
+ { 'q' => { _id: 0 }, 'u' => { '$set' => { name: 'test' }}, 'multi' => false, 'upsert' => false },
183
+ { 'q' => { _id: 1 }, 'u' => { '$set' => { name: 'test' }}, 'multi' => false, 'upsert' => false }
184
+ ]
185
+ }
186
+ ]
187
+ )
188
+ end
189
+ end
190
+
191
+ context 'when a document is not valid' do
192
+
193
+ let(:requests) do
194
+ [
195
+ { update_one: { filter: { _id: 0 }, update: { '$set' => { name: 'test' }}}},
196
+ { update_one: 'whoami' }
197
+ ]
198
+ end
199
+
200
+ it 'raises an exception' do
201
+ expect {
202
+ combiner.combine
203
+ }.to raise_error(Mongo::Error::InvalidBulkOperation)
204
+ end
205
+ end
206
+ end
207
+
208
+ context 'when provided a series of update many ops' do
209
+
210
+ context 'when the documents are valid' do
211
+
212
+ let(:requests) do
213
+ [
214
+ { update_many: { filter: { _id: 0 }, update: { '$set' => { name: 'test' }}}},
215
+ { update_many: { filter: { _id: 1 }, update: { '$set' => { name: 'test' }}}}
216
+ ]
217
+ end
218
+
219
+ it 'returns a single update many' do
220
+ expect(combiner.combine).to eq(
221
+ [
222
+ {
223
+ update_many: [
224
+ { 'q' => { _id: 0 }, 'u' => { '$set' => { name: 'test' }}, 'multi' => true, 'upsert' => false },
225
+ { 'q' => { _id: 1 }, 'u' => { '$set' => { name: 'test' }}, 'multi' => true, 'upsert' => false }
226
+ ]
227
+ }
228
+ ]
229
+ )
230
+ end
231
+ end
232
+
233
+ context 'when a document is not valid' do
234
+
235
+ let(:requests) do
236
+ [
237
+ { update_many: { filter: { _id: 0 }, update: { '$set' => { name: 'test' }}}},
238
+ { update_many: 'whoami' }
239
+ ]
240
+ end
241
+
242
+ it 'raises an exception' do
243
+ expect {
244
+ combiner.combine
245
+ }.to raise_error(Mongo::Error::InvalidBulkOperation)
246
+ end
247
+ end
248
+ end
249
+
250
+ context 'when provided a mix of operations' do
251
+
252
+ let(:requests) do
253
+ [
254
+ { insert_one: { _id: 0 }},
255
+ { delete_one: { filter: { _id: 0 }}},
256
+ { insert_one: { _id: 1 }}
257
+ ]
258
+ end
259
+
260
+ it 'returns an ordered grouping' do
261
+ expect(combiner.combine).to eq(
262
+ [
263
+ { insert_one: [{ _id: 0 }]},
264
+ { delete_one: [{ 'q' => { _id: 0 }, 'limit' => 1 }]},
265
+ { insert_one: [{ _id: 1 }]}
266
+ ]
267
+ )
268
+ end
269
+ end
270
+ end
271
+ end
@@ -0,0 +1,239 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mongo::BulkWrite::UnorderedCombiner do
4
+
5
+ describe '#combine' do
6
+
7
+ let(:combiner) do
8
+ described_class.new(requests)
9
+ end
10
+
11
+ context 'when provided a series of delete one' do
12
+
13
+ context 'when the documents are valid' do
14
+
15
+ let(:requests) do
16
+ [
17
+ { delete_one: { filter: { _id: 0 }}},
18
+ { delete_one: { filter: { _id: 1 }}}
19
+ ]
20
+ end
21
+
22
+ it 'returns a single delete one' do
23
+ expect(combiner.combine).to eq(
24
+ [
25
+ {
26
+ delete_one: [
27
+ { 'q' => { _id: 0 }, 'limit' => 1 },
28
+ { 'q' => { _id: 1 }, 'limit' => 1 }
29
+ ]
30
+ }
31
+ ]
32
+ )
33
+ end
34
+ end
35
+
36
+ context 'when a document is not valid' do
37
+
38
+ let(:requests) do
39
+ [
40
+ { delete_one: { filter: { _id: 0 }}},
41
+ { delete_one: 'whoami' }
42
+ ]
43
+ end
44
+
45
+ it 'raises an exception' do
46
+ expect {
47
+ combiner.combine
48
+ }.to raise_error(Mongo::Error::InvalidBulkOperation)
49
+ end
50
+ end
51
+ end
52
+
53
+ context 'when provided a series of delete many' do
54
+
55
+ context 'when the documents are valid' do
56
+
57
+ let(:requests) do
58
+ [
59
+ { delete_many: { filter: { _id: 0 }}},
60
+ { delete_many: { filter: { _id: 1 }}}
61
+ ]
62
+ end
63
+
64
+ it 'returns a single delete many' do
65
+ expect(combiner.combine).to eq(
66
+ [
67
+ {
68
+ delete_many: [
69
+ { 'q' => { _id: 0 }, 'limit' => 0 },
70
+ { 'q' => { _id: 1 }, 'limit' => 0 }
71
+ ]
72
+ }
73
+ ]
74
+ )
75
+ end
76
+ end
77
+
78
+ context 'when a document is not valid' do
79
+
80
+ let(:requests) do
81
+ [
82
+ { delete_many: { filter: { _id: 0 }}},
83
+ { delete_many: 'whoami' }
84
+ ]
85
+ end
86
+
87
+ it 'raises an exception' do
88
+ expect {
89
+ combiner.combine
90
+ }.to raise_error(Mongo::Error::InvalidBulkOperation)
91
+ end
92
+ end
93
+ end
94
+
95
+ context 'when provided a series of insert one' do
96
+
97
+ context 'when the documents are valid' do
98
+
99
+ let(:requests) do
100
+ [{ insert_one: { _id: 0 }}, { insert_one: { _id: 1 }}]
101
+ end
102
+
103
+ it 'returns a single insert one' do
104
+ expect(combiner.combine).to eq(
105
+ [{ insert_one: [{ _id: 0 }, { _id: 1 }]}]
106
+ )
107
+ end
108
+ end
109
+
110
+ context 'when a document is not valid' do
111
+
112
+ let(:requests) do
113
+ [{ insert_one: { _id: 0 }}, { insert_one: 'whoami' }]
114
+ end
115
+
116
+ it 'raises an exception' do
117
+ expect {
118
+ combiner.combine
119
+ }.to raise_error(Mongo::Error::InvalidBulkOperation)
120
+ end
121
+ end
122
+ end
123
+
124
+ context 'when provided a series of update one' do
125
+
126
+ context 'when the documents are valid' do
127
+
128
+ let(:requests) do
129
+ [
130
+ { update_one: { filter: { _id: 0 }, update: { '$set' => { name: 'test' }}}},
131
+ { update_one: { filter: { _id: 1 }, update: { '$set' => { name: 'test' }}}}
132
+ ]
133
+ end
134
+
135
+ it 'returns a single update one' do
136
+ expect(combiner.combine).to eq(
137
+ [
138
+ {
139
+ update_one: [
140
+ { 'q' => { _id: 0 }, 'u' => { '$set' => { name: 'test' }}, 'multi' => false, 'upsert' => false },
141
+ { 'q' => { _id: 1 }, 'u' => { '$set' => { name: 'test' }}, 'multi' => false, 'upsert' => false }
142
+ ]
143
+ }
144
+ ]
145
+ )
146
+ end
147
+ end
148
+
149
+ context 'when a document is not valid' do
150
+
151
+ let(:requests) do
152
+ [
153
+ { update_one: { filter: { _id: 0 }, update: { '$set' => { name: 'test' }}}},
154
+ { update_one: 'whoami' }
155
+ ]
156
+ end
157
+
158
+ it 'raises an exception' do
159
+ expect {
160
+ combiner.combine
161
+ }.to raise_error(Mongo::Error::InvalidBulkOperation)
162
+ end
163
+ end
164
+ end
165
+
166
+ context 'when provided a series of update many ops' do
167
+
168
+ context 'when the documents are valid' do
169
+
170
+ let(:requests) do
171
+ [
172
+ { update_many: { filter: { _id: 0 }, update: { '$set' => { name: 'test' }}}},
173
+ { update_many: { filter: { _id: 1 }, update: { '$set' => { name: 'test' }}}}
174
+ ]
175
+ end
176
+
177
+ it 'returns a single update many' do
178
+ expect(combiner.combine).to eq(
179
+ [
180
+ {
181
+ update_many: [
182
+ { 'q' => { _id: 0 }, 'u' => { '$set' => { name: 'test' }}, 'multi' => true, 'upsert' => false },
183
+ { 'q' => { _id: 1 }, 'u' => { '$set' => { name: 'test' }}, 'multi' => true, 'upsert' => false }
184
+ ]
185
+ }
186
+ ]
187
+ )
188
+ end
189
+ end
190
+
191
+ context 'when a document is not valid' do
192
+
193
+ let(:requests) do
194
+ [
195
+ { update_many: { filter: { _id: 0 }, update: { '$set' => { name: 'test' }}}},
196
+ { update_many: 'whoami' }
197
+ ]
198
+ end
199
+
200
+ it 'raises an exception' do
201
+ expect {
202
+ combiner.combine
203
+ }.to raise_error(Mongo::Error::InvalidBulkOperation)
204
+ end
205
+ end
206
+ end
207
+
208
+ context 'when provided a mix of operations' do
209
+
210
+ let(:requests) do
211
+ [
212
+ { insert_one: { _id: 0 }},
213
+ { delete_one: { filter: { _id: 0 }}},
214
+ { insert_one: { _id: 1 }},
215
+ { delete_one: { filter: { _id: 1 }}}
216
+ ]
217
+ end
218
+
219
+ it 'returns an unordered mixed grouping' do
220
+ expect(combiner.combine).to eq(
221
+ [
222
+ {
223
+ insert_one: [
224
+ { _id: 0 },
225
+ { _id: 1 }
226
+ ]
227
+ },
228
+ {
229
+ delete_one: [
230
+ { 'q' => { _id: 0 }, 'limit' => 1 },
231
+ { 'q' => { _id: 1 }, 'limit' => 1 }
232
+ ]
233
+ }
234
+ ]
235
+ )
236
+ end
237
+ end
238
+ end
239
+ end