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
@@ -36,7 +36,17 @@ module Mongo
36
36
  # The default database options.
37
37
  #
38
38
  # @since 2.0.0
39
- DEFAULT_OPTIONS = { :database => ADMIN }.freeze
39
+ DEFAULT_OPTIONS = Options::Redacted.new(:database => ADMIN).freeze
40
+
41
+ # Database name field constant.
42
+ #
43
+ # @since 2.1.0
44
+ NAME = 'name'.freeze
45
+
46
+ # Databases constant.
47
+ #
48
+ # @since 2.1.0
49
+ DATABASES = 'databases'.freeze
40
50
 
41
51
  # The name of the collection that holds all the collection names.
42
52
  #
@@ -138,7 +148,7 @@ module Mongo
138
148
  #
139
149
  # @return [ Hash ] The result of the command execution.
140
150
  def command(operation, opts = {})
141
- preference = opts[:read] ? ServerSelector.get(opts[:read], options) : read_preference
151
+ preference = opts[:read] ? ServerSelector.get(client.options.merge(opts[:read])) : read_preference
142
152
  server = preference.select_server(cluster)
143
153
  Operation::Command.new({
144
154
  :selector => operation,
@@ -196,11 +206,11 @@ module Mongo
196
206
  # @example Get the GridFS.
197
207
  # database.fs
198
208
  #
199
- # @return [ Grid::FS ] The GridFS for the database.
209
+ # @return [ Grid::FSBucket ] The GridFS for the database.
200
210
  #
201
211
  # @since 2.0.0
202
212
  def fs(options = {})
203
- Grid::FS.new(self, options)
213
+ Grid::FSBucket.new(self, options)
204
214
  end
205
215
 
206
216
  # Get the user view for this database.
@@ -0,0 +1,113 @@
1
+ # Copyright (C) 2015 MongoDB, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the 'License');
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an 'AS IS' BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module Mongo
16
+
17
+ # Represents a DBRef document in the database.
18
+ #
19
+ # @since 2.1.0
20
+ class DBRef
21
+ include BSON::JSON
22
+
23
+ # The constant for the collection reference field.
24
+ #
25
+ # @since 2.1.0
26
+ COLLECTION = '$ref'.freeze
27
+
28
+ # The constant for the id field.
29
+ #
30
+ # @since 2.1.0
31
+ ID = '$id'.freeze
32
+
33
+ # The constant for the database field.
34
+ #
35
+ # @since 2.1.0
36
+ DATABASE = '$db'.freeze
37
+
38
+ # @return [ String ] collection The collection name.
39
+ attr_reader :collection
40
+
41
+ # @return [ BSON::ObjectId ] id The referenced document id.
42
+ attr_reader :id
43
+
44
+ # @return [ String ] database The database name.
45
+ attr_reader :database
46
+
47
+ # Get the DBRef as a JSON document
48
+ #
49
+ # @example Get the DBRef as a JSON hash.
50
+ # dbref.as_json
51
+ #
52
+ # @return [ Hash ] The max key as a JSON hash.
53
+ #
54
+ # @since 2.1.0
55
+ def as_json(*args)
56
+ document = { COLLECTION => collection, ID => id }
57
+ document.merge!(DATABASE => database) if database
58
+ document
59
+ end
60
+
61
+ # Instantiate a new DBRef.
62
+ #
63
+ # @example Create the DBRef.
64
+ # Mongo::DBRef.new('users', id, 'database')
65
+ #
66
+ # @param [ String ] collection The collection name.
67
+ # @param [ BSON::ObjectId ] id The object id.
68
+ # @param [ String ] database The database name.
69
+ #
70
+ # @since 2.1.0
71
+ def initialize(collection, id, database = nil)
72
+ @collection = collection
73
+ @id = id
74
+ @database = database
75
+ end
76
+
77
+ # Converts the DBRef to raw BSON.
78
+ #
79
+ # @example Convert the DBRef to raw BSON.
80
+ # dbref.to_bson
81
+ #
82
+ # @param [ String ] encoded The encoded BSON to append to.
83
+ #
84
+ # @return [ String ] The raw BSON.
85
+ #
86
+ # @since 2.1.0
87
+ def to_bson(encoded = ''.force_encoding(BSON::BINARY))
88
+ as_json.to_bson(encoded)
89
+ end
90
+
91
+ module ClassMethods
92
+
93
+ # Deserialize the hash from BSON, converting to a DBRef if appropriate.
94
+ #
95
+ # @param [ IO ] bson The bson representing a hash.
96
+ #
97
+ # @return [ Hash, DBRef ] The decoded hash or DBRef.
98
+ #
99
+ # @see http://bsonspec.org/#/specification
100
+ #
101
+ # @since 2.0.0
102
+ def from_bson(bson)
103
+ decoded = super
104
+ if ref = decoded[COLLECTION]
105
+ decoded = DBRef.new(ref, decoded[ID], decoded[DATABASE])
106
+ end
107
+ decoded
108
+ end
109
+ end
110
+ end
111
+
112
+ ::Hash.send(:extend, DBRef::ClassMethods)
113
+ end
@@ -0,0 +1,34 @@
1
+ # Copyright (C) 2014-2015 MongoDB, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module Mongo
16
+ class Error
17
+
18
+ # Raised if the GridFS::Stream object is closed and an operation is attempted.
19
+ #
20
+ # @since 2.1.0
21
+ class ClosedStream < Error
22
+
23
+ # Create the new exception.
24
+ #
25
+ # @example Create the new exception.
26
+ # Mongo::Error::ClosedStream.new
27
+ #
28
+ # @since 2.1.0
29
+ def initialize
30
+ super("The stream is closed and cannot be written to or read from.")
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,34 @@
1
+ # Copyright (C) 2014-2015 MongoDB, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module Mongo
16
+ class Error
17
+
18
+ # Raised if an extra chunk is found.
19
+ #
20
+ # @since 2.1.0
21
+ class ExtraFileChunk < Error
22
+
23
+ # Create the new exception.
24
+ #
25
+ # @example Create the new exception.
26
+ # Mongo::Error::ExtraFileChunk.new
27
+ #
28
+ # @since 2.1.0
29
+ def initialize
30
+ super("Extra file chunk found.")
31
+ end
32
+ end
33
+ end
34
+ end
@@ -15,23 +15,22 @@
15
15
  module Mongo
16
16
  class Error
17
17
 
18
- # Raised if the URI is in the correct format but an option is provided that
19
- # is not recognized.
18
+ # Raised if a file is deleted from a GridFS but it is not found.
20
19
  #
21
- # @since 2.0.0
22
- class InvalidURIOption < Error
20
+ # @since 2.1.0
21
+ class FileNotFound < Error
23
22
 
24
- # Create the error.
23
+ # Create the new exception.
25
24
  #
26
- # @example Create the error with the invalid option name.
27
- # InvalidURIOption.new('nothing')
25
+ # @example Create the new exception.
26
+ # Mongo::Error::FileNotFound.new(id, :id)
28
27
  #
29
- # @param [ String ] name The invalid option name.
28
+ # @param [ Object ] value The property value used to find the file.
29
+ # @param [ String, Symbol ] property The name of the property used to find the file.
30
30
  #
31
- # @since 2.0.0
32
- def initialize(name)
33
- super("Invalid option in URI: '#{name}'.\n" +
34
- "Please see the following URL for more information: #{Mongo::URI::HELP}\n")
31
+ # @since 2.1.0
32
+ def initialize(value, property)
33
+ super("File with #{property} '#{value}' not found.")
35
34
  end
36
35
  end
37
36
  end
@@ -21,9 +21,9 @@ module Mongo
21
21
  # @since 2.0.0
22
22
  class InvalidFile < Error
23
23
 
24
- # Create the nex exception.
24
+ # Create the new exception.
25
25
  #
26
- # @example Create the mew exception.
26
+ # @example Create the new exception.
27
27
  # Mongo::Error::InvalidFile.new(file_md5, server_md5)
28
28
  #
29
29
  # @param [ String ] client_md5 The client side file md5.
@@ -0,0 +1,37 @@
1
+ # Copyright (C) 2014-2015 MongoDB, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module Mongo
16
+ class Error
17
+
18
+ # Raised if the requested file revision is not found.
19
+ #
20
+ # @since 2.1.0
21
+ class InvalidFileRevision < Error
22
+
23
+ # Create the new exception.
24
+ #
25
+ # @example Create the new exception.
26
+ # Mongo::Error::InvalidFileRevision.new('some-file.txt', 3)
27
+ #
28
+ # @param [ String ] filename The name of the file.
29
+ # @param [ Integer ] revision The requested revision.
30
+ #
31
+ # @since 2.1.0
32
+ def initialize(filename, revision)
33
+ super("No revision #{revision} found for file '#{filename}'.")
34
+ end
35
+ end
36
+ end
37
+ end
@@ -27,10 +27,11 @@ module Mongo
27
27
  # Mongo::Error::InvalidURI.new(uri)
28
28
  #
29
29
  # @since 2.0.0
30
- def initialize(uri)
31
- super("MongoDB URI must be in the following format: #{Mongo::URI::FORMAT}\n" +
32
- "Please see the following URL for more information: #{Mongo::URI::HELP}\n" +
33
- "Bad URI: #{uri}")
30
+ def initialize(uri, details)
31
+ super("Bad URI: #{uri}\n" +
32
+ "#{details}\n" +
33
+ "MongoDB URI must be in the following format: #{Mongo::URI::FORMAT}\n" +
34
+ "Please see the following URL for more information: #{Mongo::URI::HELP}\n")
34
35
  end
35
36
  end
36
37
  end
@@ -0,0 +1,38 @@
1
+ # Copyright (C) 2014-2015 MongoDB, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module Mongo
16
+ class Error
17
+
18
+ # Raised if the next chunk when reading from a GridFSBucket does not have the
19
+ # expected sequence number (n).
20
+ #
21
+ # @since 2.1.0
22
+ class MissingFileChunk < Error
23
+
24
+ # Create the new exception.
25
+ #
26
+ # @example Create the new exception.
27
+ # Mongo::Error::MissingFileChunk.new(expected_n, chunk)
28
+ #
29
+ # @param [ Integer ] expected_n The expected index value.
30
+ # @param [ Grid::File::Chunk ] chunk The chunk read from GridFS.
31
+ #
32
+ # @since 2.1.0
33
+ def initialize(expected_n, chunk)
34
+ super("Unexpected chunk in sequence. Expected next chunk to have index #{expected_n} but it has index #{chunk.n}")
35
+ end
36
+ end
37
+ end
38
+ end
@@ -15,7 +15,7 @@
15
15
  module Mongo
16
16
  class Error
17
17
 
18
- # Raised when a command failes for some reason.
18
+ # Raised when an operation fails for some reason.
19
19
  #
20
20
  # @since 2.0.0
21
21
  class OperationFailure < Error; end
@@ -36,7 +36,7 @@ module Mongo
36
36
  #
37
37
  # @since 2.0.0
38
38
  def initialize(document)
39
- @document = document
39
+ @document = document || {}
40
40
  parse!
41
41
  end
42
42
 
@@ -0,0 +1,38 @@
1
+ # Copyright (C) 2014-2015 MongoDB, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module Mongo
16
+ class Error
17
+
18
+ # Raised if a new collection is created from an existing one and options other than the
19
+ # changeable ones are provided.
20
+ #
21
+ # @since 2.1.0
22
+ class UnchangeableCollectionOption < Error
23
+
24
+ # Create the new exception.
25
+ #
26
+ # @example Create the new exception.
27
+ # Mongo::Error::UnchangeableCollectionOption.new(option)
28
+ #
29
+ # @param [ String, Symbol ] option The option that was attempted to be changed.
30
+ #
31
+ # @since 2.1.0
32
+ def initialize(option)
33
+ super("The option #{option} cannot be set on a new collection instance." +
34
+ " The options that can be updated are #{Collection::CHANGEABLE_OPTIONS}")
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,39 @@
1
+ # Copyright (C) 2014-2015 MongoDB, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module Mongo
16
+ class Error
17
+
18
+ # Raised if the next chunk when reading from a GridFSBucket does not have the
19
+ # expected length.
20
+ #
21
+ # @since 2.1.0
22
+ class UnexpectedChunkLength < Error
23
+
24
+ # Create the new exception.
25
+ #
26
+ # @example Create the new exception.
27
+ # Mongo::Error::UnexpectedChunkLength.new(expected_len, chunk)
28
+ #
29
+ # @param [ Integer ] expected_len The expected length.
30
+ # @param [ Grid::File::Chunk ] chunk The chunk read from GridFS.
31
+ #
32
+ # @since 2.1.0
33
+ def initialize(expected_len, chunk)
34
+ super("Unexpected chunk length. Chunk has length #{chunk.data.data.size} but expected length " +
35
+ "#{expected_len} or for it to be the last chunk in the sequence.")
36
+ end
37
+ end
38
+ end
39
+ end
data/lib/mongo/error.rb CHANGED
@@ -43,11 +43,16 @@ module Mongo
43
43
  # @since 2.0.0
44
44
  WRITE_ERRORS = 'writeErrors'.freeze
45
45
 
46
- # The constant for write concern errors.
46
+ # The constant for a write concern error.
47
47
  #
48
48
  # @since 2.0.0
49
49
  WRITE_CONCERN_ERROR = 'writeConcernError'.freeze
50
50
 
51
+ # The constant for write concern errors.
52
+ #
53
+ # @since 2.1.0
54
+ WRITE_CONCERN_ERRORS = 'writeConcernErrors'.freeze
55
+
51
56
  # Constant for an unknown error.
52
57
  #
53
58
  # @since 2.0.0
@@ -62,6 +67,9 @@ end
62
67
 
63
68
  require 'mongo/error/parser'
64
69
  require 'mongo/error/bulk_write_error'
70
+ require 'mongo/error/closed_stream'
71
+ require 'mongo/error/extra_file_chunk'
72
+ require 'mongo/error/file_not_found'
65
73
  require 'mongo/error/operation_failure'
66
74
  require 'mongo/error/invalid_bulk_operation'
67
75
  require 'mongo/error/invalid_bulk_operation_type'
@@ -69,13 +77,13 @@ require 'mongo/error/invalid_collection_name'
69
77
  require 'mongo/error/invalid_database_name'
70
78
  require 'mongo/error/invalid_document'
71
79
  require 'mongo/error/invalid_file'
80
+ require 'mongo/error/invalid_file_revision'
72
81
  require 'mongo/error/invalid_nonce'
73
82
  require 'mongo/error/invalid_replacement_document'
74
83
  require 'mongo/error/invalid_server_preference'
75
84
  require 'mongo/error/invalid_signature'
76
85
  require 'mongo/error/invalid_update_document'
77
86
  require 'mongo/error/invalid_uri'
78
- require 'mongo/error/invalid_uri_option'
79
87
  require 'mongo/error/max_bson_size'
80
88
  require 'mongo/error/max_message_size'
81
89
  require 'mongo/error/multi_index_drop'
@@ -83,4 +91,7 @@ require 'mongo/error/need_primary_server'
83
91
  require 'mongo/error/no_server_available'
84
92
  require 'mongo/error/socket_error'
85
93
  require 'mongo/error/socket_timeout_error'
94
+ require 'mongo/error/unchangeable_collection_option'
95
+ require 'mongo/error/unexpected_chunk_length'
96
+ require 'mongo/error/missing_file_chunk'
86
97
  require 'mongo/error/unsupported_features'
@@ -42,7 +42,7 @@ module Mongo
42
42
  # @example Handle the event.
43
43
  # server_added.handle('127.0.0.1:27018')
44
44
  #
45
- # @param [ Address ] address The added host.
45
+ # @param [ Server::Description ] updated The changed description.
46
46
  #
47
47
  # @since 2.0.0
48
48
  def handle(updated)
@@ -160,17 +160,17 @@ module Mongo
160
160
  # Chunks.split(data)
161
161
  #
162
162
  # @param [ String ] data The raw bytes.
163
- # @param [ Metadata ] metadata The file metadata.
163
+ # @param [ File::Info ] file_info The files collection file doc.
164
164
  #
165
165
  # @return [ Array<Chunk> ] The chunks of the data.
166
166
  #
167
167
  # @since 2.0.0
168
- def split(data, metadata)
169
- chunks, index, n = [], 0, 0
168
+ def split(data, file_info, offset = 0)
169
+ chunks, index, n = [], 0, offset
170
170
  while index < data.length
171
- bytes = data.slice(index, metadata.chunk_size)
172
- metadata.md5.update(bytes)
173
- chunk = Chunk.new(:data => BSON::Binary.new(bytes), :files_id => metadata.id, :n => n)
171
+ bytes = data.slice(index, file_info.chunk_size)
172
+ file_info.md5.update(bytes)
173
+ chunk = Chunk.new(:data => BSON::Binary.new(bytes), :files_id => file_info.id, :n => n)
174
174
  chunks.push(chunk)
175
175
  index += bytes.length
176
176
  n += 1