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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +5 -2
- data/lib/mongo/address/ipv4.rb +6 -1
- data/lib/mongo/address/unix.rb +2 -2
- data/lib/mongo/address.rb +18 -10
- data/lib/mongo/auth/cr/conversation.rb +1 -1
- data/lib/mongo/auth/ldap/conversation.rb +7 -3
- data/lib/mongo/auth/scram/conversation.rb +9 -3
- data/lib/mongo/auth/user/view.rb +23 -2
- data/lib/mongo/auth/x509/conversation.rb +1 -1
- data/lib/mongo/bulk_write/combineable.rb +51 -0
- data/lib/mongo/bulk_write/ordered_combiner.rb +55 -0
- data/lib/mongo/bulk_write/result.rb +191 -0
- data/lib/mongo/bulk_write/result_combiner.rb +117 -0
- data/lib/mongo/bulk_write/transformable.rb +132 -0
- data/lib/mongo/bulk_write/unordered_combiner.rb +52 -0
- data/lib/mongo/bulk_write/validatable.rb +62 -0
- data/lib/mongo/bulk_write.rb +159 -23
- data/lib/mongo/client.rb +52 -16
- data/lib/mongo/cluster/topology/replica_set.rb +27 -9
- data/lib/mongo/cluster/topology/sharded.rb +1 -1
- data/lib/mongo/cluster/topology/unknown.rb +5 -2
- data/lib/mongo/cluster.rb +42 -7
- data/lib/mongo/collection/view/aggregation.rb +48 -9
- data/lib/mongo/collection/view/immutable.rb +6 -6
- data/lib/mongo/collection/view/iterable.rb +18 -4
- data/lib/mongo/collection/view/map_reduce.rb +58 -17
- data/lib/mongo/collection/view/readable.rb +173 -42
- data/lib/mongo/collection/view/writable.rb +37 -23
- data/lib/mongo/collection/view.rb +2 -2
- data/lib/mongo/collection.rb +370 -33
- data/lib/mongo/cursor.rb +15 -3
- data/lib/mongo/database/view.rb +5 -4
- data/lib/mongo/database.rb +14 -4
- data/lib/mongo/dbref.rb +113 -0
- data/lib/mongo/error/closed_stream.rb +34 -0
- data/lib/mongo/error/extra_file_chunk.rb +34 -0
- data/lib/mongo/error/{invalid_uri_option.rb → file_not_found.rb} +11 -12
- data/lib/mongo/error/invalid_file.rb +2 -2
- data/lib/mongo/error/invalid_file_revision.rb +37 -0
- data/lib/mongo/error/invalid_uri.rb +5 -4
- data/lib/mongo/error/missing_file_chunk.rb +38 -0
- data/lib/mongo/error/operation_failure.rb +1 -1
- data/lib/mongo/error/parser.rb +1 -1
- data/lib/mongo/error/unchangeable_collection_option.rb +38 -0
- data/lib/mongo/error/unexpected_chunk_length.rb +39 -0
- data/lib/mongo/error.rb +13 -2
- data/lib/mongo/event/description_changed.rb +1 -1
- data/lib/mongo/grid/file/chunk.rb +6 -6
- data/lib/mongo/grid/file/{metadata.rb → info.rb} +41 -39
- data/lib/mongo/grid/file.rb +13 -10
- data/lib/mongo/grid/fs_bucket.rb +448 -0
- data/lib/mongo/grid/stream/read.rb +208 -0
- data/lib/mongo/grid/stream/write.rb +187 -0
- data/lib/mongo/grid/stream.rb +64 -0
- data/lib/mongo/grid.rb +2 -1
- data/lib/mongo/index/view.rb +3 -3
- data/lib/mongo/index.rb +5 -0
- data/lib/mongo/loggable.rb +34 -57
- data/lib/mongo/logger.rb +16 -78
- data/lib/mongo/monitoring/command_log_subscriber.rb +112 -0
- data/lib/mongo/monitoring/event/command_failed.rb +96 -0
- data/lib/mongo/monitoring/event/command_started.rb +89 -0
- data/lib/mongo/monitoring/event/command_succeeded.rb +118 -0
- data/lib/mongo/monitoring/event/secure.rb +58 -0
- data/lib/mongo/monitoring/event.rb +18 -0
- data/lib/mongo/monitoring/publishable.rb +106 -0
- data/lib/mongo/monitoring.rb +195 -0
- data/lib/mongo/operation/{aggregate.rb → commands/aggregate.rb} +3 -41
- data/lib/mongo/operation/commands/collections_info/result.rb +39 -0
- data/lib/mongo/operation/commands/collections_info.rb +68 -0
- data/lib/mongo/operation/{command.rb → commands/command.rb} +2 -18
- data/lib/mongo/operation/commands/indexes.rb +70 -0
- data/lib/mongo/operation/commands/list_collections/result.rb +112 -0
- data/lib/mongo/operation/commands/list_collections.rb +54 -0
- data/lib/mongo/operation/commands/list_indexes/result.rb +116 -0
- data/lib/mongo/operation/commands/list_indexes.rb +56 -0
- data/lib/mongo/operation/{map_reduce → commands/map_reduce}/result.rb +1 -1
- data/lib/mongo/operation/{map_reduce.rb → commands/map_reduce.rb} +3 -41
- data/lib/mongo/operation/commands/parallel_scan/result.rb +72 -0
- data/lib/mongo/operation/commands/parallel_scan.rb +56 -0
- data/lib/mongo/operation/commands/user_query.rb +69 -0
- data/lib/mongo/{bulk_write/ordered_bulk_write.rb → operation/commands/users_info/result.rb} +18 -30
- data/lib/mongo/operation/commands/users_info.rb +53 -0
- data/lib/mongo/operation/commands.rb +24 -0
- data/lib/mongo/operation/executable.rb +4 -68
- data/lib/mongo/operation/kill_cursors.rb +3 -3
- data/lib/mongo/operation/read/get_more.rb +2 -22
- data/lib/mongo/{bulk_write/unordered_bulk_write.rb → operation/read/query/result.rb} +20 -26
- data/lib/mongo/operation/read/query.rb +4 -21
- data/lib/mongo/operation/read.rb +0 -4
- data/lib/mongo/operation/{read_preferrable.rb → read_preference.rb} +3 -2
- data/lib/mongo/operation/result.rb +13 -1
- data/lib/mongo/operation/specifiable.rb +42 -0
- data/lib/mongo/operation/write/bulk/bulkable.rb +82 -0
- data/lib/mongo/operation/write/bulk/delete/result.rb +74 -0
- data/lib/mongo/operation/write/bulk/delete.rb +71 -0
- data/lib/mongo/operation/write/bulk/insert/result.rb +129 -0
- data/lib/mongo/operation/write/bulk/insert.rb +96 -0
- data/lib/mongo/operation/write/bulk/legacy_mergable.rb +87 -0
- data/lib/mongo/operation/write/bulk/mergable.rb +71 -0
- data/lib/mongo/operation/write/bulk/update/result.rb +174 -0
- data/lib/mongo/operation/write/bulk/update.rb +81 -0
- data/lib/mongo/operation/write/bulk.rb +6 -3
- data/lib/mongo/operation/write/command/create_index.rb +0 -1
- data/lib/mongo/operation/write/command/create_user.rb +0 -1
- data/lib/mongo/operation/write/command/delete.rb +0 -1
- data/lib/mongo/operation/write/command/drop_index.rb +0 -1
- data/lib/mongo/operation/write/command/insert.rb +0 -1
- data/lib/mongo/operation/write/command/remove_user.rb +0 -1
- data/lib/mongo/operation/write/command/update.rb +0 -1
- data/lib/mongo/operation/write/command/update_user.rb +0 -1
- data/lib/mongo/operation/write/command/writable.rb +13 -18
- data/lib/mongo/operation/write/create_index.rb +4 -27
- data/lib/mongo/operation/write/create_user.rb +4 -30
- data/lib/mongo/operation/write/delete.rb +6 -29
- data/lib/mongo/operation/write/drop_index.rb +3 -3
- data/lib/mongo/operation/write/gle.rb +48 -0
- data/lib/mongo/operation/write/idable.rb +5 -0
- data/lib/mongo/operation/write/insert.rb +2 -24
- data/lib/mongo/operation/write/remove_user.rb +4 -27
- data/lib/mongo/operation/write/update.rb +13 -36
- data/lib/mongo/operation/write/update_user.rb +4 -30
- data/lib/mongo/operation/write/write_command_enabled.rb +53 -0
- data/lib/mongo/operation/write.rb +2 -0
- data/lib/mongo/operation.rb +32 -4
- data/lib/mongo/options/mapper.rb +4 -2
- data/lib/mongo/options/redacted.rb +156 -0
- data/lib/mongo/options.rb +1 -0
- data/lib/mongo/protocol/delete.rb +75 -15
- data/lib/mongo/protocol/get_more.rb +65 -13
- data/lib/mongo/protocol/insert.rb +85 -13
- data/lib/mongo/protocol/kill_cursors.rb +59 -14
- data/lib/mongo/protocol/message.rb +12 -12
- data/lib/mongo/protocol/query.rb +163 -37
- data/lib/mongo/protocol/reply.rb +103 -0
- data/lib/mongo/protocol/serializers.rb +1 -1
- data/lib/mongo/protocol/update.rb +82 -14
- data/lib/mongo/retryable.rb +83 -0
- data/lib/mongo/server/connectable.rb +21 -25
- data/lib/mongo/server/connection.rb +75 -4
- data/lib/mongo/server/connection_pool/queue.rb +15 -0
- data/lib/mongo/server/connection_pool.rb +12 -0
- data/lib/mongo/server/description/features.rb +2 -1
- data/lib/mongo/server/description.rb +52 -1
- data/lib/mongo/server/monitor/connection.rb +26 -2
- data/lib/mongo/server/monitor.rb +19 -3
- data/lib/mongo/server.rb +39 -5
- data/lib/mongo/server_selector/selectable.rb +40 -31
- data/lib/mongo/server_selector.rb +19 -10
- data/lib/mongo/socket/ssl.rb +28 -16
- data/lib/mongo/socket/tcp.rb +3 -3
- data/lib/mongo/socket/unix.rb +5 -8
- data/lib/mongo/socket.rb +11 -4
- data/lib/mongo/uri.rb +248 -137
- data/lib/mongo/version.rb +1 -1
- data/lib/mongo.rb +5 -3
- data/spec/mongo/address/unix_spec.rb +1 -1
- data/spec/mongo/address_spec.rb +25 -0
- data/spec/mongo/auth/cr_spec.rb +9 -1
- data/spec/mongo/auth/ldap/conversation_spec.rb +43 -0
- data/spec/mongo/auth/ldap_spec.rb +9 -1
- data/spec/mongo/auth/scram_spec.rb +9 -1
- data/spec/mongo/auth/user/view_spec.rb +26 -1
- data/spec/mongo/auth/x509_spec.rb +9 -1
- data/spec/mongo/bulk_write/ordered_combiner_spec.rb +271 -0
- data/spec/mongo/bulk_write/unordered_combiner_spec.rb +239 -0
- data/spec/mongo/bulk_write_spec.rb +428 -0
- data/spec/mongo/client_spec.rb +167 -17
- data/spec/mongo/cluster/topology/replica_set_spec.rb +18 -9
- data/spec/mongo/cluster/topology/sharded_spec.rb +11 -3
- data/spec/mongo/cluster/topology/single_spec.rb +12 -4
- data/spec/mongo/cluster_spec.rb +55 -10
- data/spec/mongo/collection/view/aggregation_spec.rb +188 -1
- data/spec/mongo/collection/view/explainable_spec.rb +1 -1
- data/spec/mongo/collection/view/immutable_spec.rb +103 -0
- data/spec/mongo/collection/view/map_reduce_spec.rb +99 -4
- data/spec/mongo/collection/view/readable_spec.rb +238 -6
- data/spec/mongo/collection/view/writable_spec.rb +4 -4
- data/spec/mongo/collection/view_spec.rb +459 -71
- data/spec/mongo/collection_spec.rb +1291 -9
- data/spec/mongo/command_monitoring_spec.rb +51 -0
- data/spec/mongo/connection_string_spec.rb +115 -0
- data/spec/mongo/crud_spec.rb +2 -2
- data/spec/mongo/cursor_spec.rb +3 -3
- data/spec/mongo/database_spec.rb +47 -11
- data/spec/mongo/dbref_spec.rb +149 -0
- data/spec/mongo/grid/file/chunk_spec.rb +5 -5
- data/spec/mongo/grid/file/{metadata_spec.rb → info_spec.rb} +29 -17
- data/spec/mongo/grid/file_spec.rb +8 -8
- data/spec/mongo/grid/fs_bucket_spec.rb +1020 -0
- data/spec/mongo/grid/stream/read_spec.rb +275 -0
- data/spec/mongo/grid/stream/write_spec.rb +440 -0
- data/spec/mongo/grid/stream_spec.rb +48 -0
- data/spec/mongo/gridfs_spec.rb +50 -0
- data/spec/mongo/logger_spec.rb +0 -40
- data/spec/mongo/monitoring/command_log_subscriber_spec.rb +76 -0
- data/spec/mongo/monitoring/event/command_started_spec.rb +26 -0
- data/spec/mongo/monitoring/event/command_succeeded_spec.rb +26 -0
- data/spec/mongo/monitoring/event/secure_spec.rb +57 -0
- data/spec/mongo/monitoring_spec.rb +168 -0
- data/spec/mongo/operation/commands/aggregate_spec.rb +69 -0
- data/spec/mongo/operation/{read → commands}/collections_info_spec.rb +1 -1
- data/spec/mongo/operation/{command_spec.rb → commands/command_spec.rb} +0 -18
- data/spec/mongo/operation/{read → commands}/indexes_spec.rb +1 -1
- data/spec/mongo/operation/{map_reduce_spec.rb → commands/map_reduce_spec.rb} +1 -19
- data/spec/mongo/operation/kill_cursors_spec.rb +1 -17
- data/spec/mongo/operation/read/get_more_spec.rb +0 -16
- data/spec/mongo/operation/read/query_spec.rb +19 -16
- data/spec/mongo/operation/{read_preferrable_spec.rb → read_preference_spec.rb} +11 -11
- data/spec/mongo/operation/write/bulk/{bulk_delete_spec.rb → delete_spec.rb} +18 -29
- data/spec/mongo/operation/write/bulk/{bulk_insert_spec.rb → insert_spec.rb} +3 -14
- data/spec/mongo/operation/write/bulk/{bulk_update_spec.rb → update_spec.rb} +8 -19
- data/spec/mongo/operation/write/command/delete_spec.rb +0 -16
- data/spec/mongo/operation/write/command/insert_spec.rb +0 -16
- data/spec/mongo/operation/write/command/update_spec.rb +0 -16
- data/spec/mongo/operation/write/delete_spec.rb +4 -4
- data/spec/mongo/operation/write/insert_spec.rb +2 -13
- data/spec/mongo/operation/write/update_spec.rb +7 -7
- data/spec/mongo/options/redacted_spec.rb +350 -0
- data/spec/mongo/protocol/kill_cursors_spec.rb +5 -3
- data/spec/mongo/protocol/query_spec.rb +15 -30
- data/spec/mongo/retryable_spec.rb +147 -0
- data/spec/mongo/server/connection_pool/queue_spec.rb +16 -0
- data/spec/mongo/server/connection_pool_spec.rb +50 -6
- data/spec/mongo/server/connection_spec.rb +49 -4
- data/spec/mongo/server/description_spec.rb +49 -3
- data/spec/mongo/server/monitor_spec.rb +51 -0
- data/spec/mongo/server_discovery_and_monitoring_spec.rb +32 -59
- data/spec/mongo/server_selection_rtt_spec.rb +37 -57
- data/spec/mongo/server_selection_spec.rb +19 -9
- data/spec/mongo/server_selector/nearest_spec.rb +35 -27
- data/spec/mongo/server_selector/primary_preferred_spec.rb +32 -30
- data/spec/mongo/server_selector/primary_spec.rb +21 -14
- data/spec/mongo/server_selector/secondary_preferred_spec.rb +28 -26
- data/spec/mongo/server_selector/secondary_spec.rb +24 -22
- data/spec/mongo/server_selector_spec.rb +87 -24
- data/spec/mongo/server_spec.rb +94 -8
- data/spec/mongo/socket/ssl_spec.rb +123 -13
- data/spec/mongo/socket/unix_spec.rb +52 -0
- data/spec/mongo/uri_spec.rb +295 -67
- data/spec/spec_helper.rb +40 -24
- data/spec/support/authorization.rb +23 -9
- data/spec/support/certificates/client.pem +4 -4
- data/spec/support/command_monitoring/bulkWrite.yml +73 -0
- data/spec/support/command_monitoring/command.yml +42 -0
- data/spec/support/command_monitoring/deleteMany.yml +55 -0
- data/spec/support/command_monitoring/deleteOne.yml +55 -0
- data/spec/support/command_monitoring/find.yml +219 -0
- data/spec/support/command_monitoring/insertMany.yml +81 -0
- data/spec/support/command_monitoring/insertOne.yml +51 -0
- data/spec/support/command_monitoring/updateMany.yml +67 -0
- data/spec/support/command_monitoring/updateOne.yml +95 -0
- data/spec/support/command_monitoring.rb +365 -0
- data/spec/support/connection_string.rb +228 -0
- data/spec/support/connection_string_tests/invalid-uris.yml +193 -0
- data/spec/support/connection_string_tests/valid-auth.yml +256 -0
- data/spec/support/connection_string_tests/valid-host_identifiers.yml +121 -0
- data/spec/support/connection_string_tests/valid-options.yml +30 -0
- data/spec/support/connection_string_tests/valid-unix_socket-absolute.yml +197 -0
- data/spec/support/connection_string_tests/valid-unix_socket-relative.yml +213 -0
- data/spec/support/connection_string_tests/valid-warnings.yml +55 -0
- data/spec/support/crud/read.rb +22 -19
- data/spec/support/crud/write.rb +58 -27
- data/spec/support/crud.rb +10 -2
- data/spec/support/gridfs.rb +637 -0
- data/spec/support/gridfs_tests/delete.yml +157 -0
- data/spec/support/gridfs_tests/download.yml +210 -0
- data/spec/support/gridfs_tests/download_by_name.yml +113 -0
- data/spec/support/gridfs_tests/upload.yml +158 -0
- data/spec/support/matchers.rb +1 -1
- data/spec/support/sdam/rs/equal_electionids.yml +44 -0
- data/spec/support/sdam/rs/new_primary_new_electionid.yml +95 -0
- data/spec/support/sdam/rs/null_election_id.yml +144 -0
- data/spec/support/sdam/rs/primary_disconnect_electionid.yml +124 -0
- data/spec/support/sdam/rs/primary_mismatched_me.yml +37 -0
- data/spec/support/sdam/rs/primary_to_no_primary_mismatched_me.yml +75 -0
- data/spec/support/sdam/rs/secondary_mismatched_me.yml +37 -0
- data/spec/support/sdam/sharded/mongos_disconnect.yml +104 -0
- data/spec/support/sdam/single/direct_connection_rsarbiter.yml +1 -1
- data/spec/support/sdam/single/direct_connection_rsprimary.yml +1 -1
- data/spec/support/sdam/single/direct_connection_rssecondary.yml +1 -1
- data/spec/support/sdam/single/direct_connection_slave.yml +1 -1
- data/spec/support/sdam/single/direct_connection_standalone.yml +1 -1
- data/spec/support/sdam/single/not_ok_response.yml +0 -1
- data/spec/support/server_discovery_and_monitoring.rb +22 -3
- data/spec/support/server_selection.rb +3 -1
- data/spec/support/shared/bulk_write.rb +218 -22
- data/spec/support/shared/server_selector.rb +80 -14
- data.tar.gz.sig +0 -0
- metadata +188 -59
- metadata.gz.sig +0 -0
- data/lib/mongo/bulk_write/bulk_writable.rb +0 -196
- data/lib/mongo/bulk_write/deletable.rb +0 -56
- data/lib/mongo/bulk_write/insertable.rb +0 -48
- data/lib/mongo/bulk_write/replacable.rb +0 -57
- data/lib/mongo/bulk_write/updatable.rb +0 -68
- data/lib/mongo/grid/fs.rb +0 -149
- data/lib/mongo/operation/list_collections/result.rb +0 -114
- data/lib/mongo/operation/list_indexes/result.rb +0 -118
- data/lib/mongo/operation/read/collections_info.rb +0 -68
- data/lib/mongo/operation/read/indexes.rb +0 -69
- data/lib/mongo/operation/read/list_collections.rb +0 -76
- data/lib/mongo/operation/read/list_indexes.rb +0 -78
- data/lib/mongo/operation/write/bulk/bulk_delete/result.rb +0 -75
- data/lib/mongo/operation/write/bulk/bulk_delete.rb +0 -145
- data/lib/mongo/operation/write/bulk/bulk_insert/result.rb +0 -130
- data/lib/mongo/operation/write/bulk/bulk_insert.rb +0 -132
- data/lib/mongo/operation/write/bulk/bulk_mergable.rb +0 -67
- data/lib/mongo/operation/write/bulk/bulk_update/result.rb +0 -162
- data/lib/mongo/operation/write/bulk/bulk_update.rb +0 -154
- data/lib/mongo/operation/write/bulk/legacy_bulk_mergable.rb +0 -83
- data/spec/mongo/bulk/bulk_write_spec.rb +0 -262
- data/spec/mongo/grid/fs_spec.rb +0 -160
- data/spec/mongo/loggable_spec.rb +0 -63
- data/spec/mongo/operation/aggregate_spec.rb +0 -127
- /data/lib/mongo/operation/{aggregate → commands/aggregate}/result.rb +0 -0
data/lib/mongo/database.rb
CHANGED
@@ -36,7 +36,17 @@ module Mongo
|
|
36
36
|
# The default database options.
|
37
37
|
#
|
38
38
|
# @since 2.0.0
|
39
|
-
DEFAULT_OPTIONS =
|
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]
|
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::
|
209
|
+
# @return [ Grid::FSBucket ] The GridFS for the database.
|
200
210
|
#
|
201
211
|
# @since 2.0.0
|
202
212
|
def fs(options = {})
|
203
|
-
Grid::
|
213
|
+
Grid::FSBucket.new(self, options)
|
204
214
|
end
|
205
215
|
|
206
216
|
# Get the user view for this database.
|
data/lib/mongo/dbref.rb
ADDED
@@ -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
|
19
|
-
# is not recognized.
|
18
|
+
# Raised if a file is deleted from a GridFS but it is not found.
|
20
19
|
#
|
21
|
-
# @since 2.
|
22
|
-
class
|
20
|
+
# @since 2.1.0
|
21
|
+
class FileNotFound < Error
|
23
22
|
|
24
|
-
# Create the
|
23
|
+
# Create the new exception.
|
25
24
|
#
|
26
|
-
# @example Create the
|
27
|
-
#
|
25
|
+
# @example Create the new exception.
|
26
|
+
# Mongo::Error::FileNotFound.new(id, :id)
|
28
27
|
#
|
29
|
-
# @param [
|
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.
|
32
|
-
def initialize(
|
33
|
-
super("
|
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
|
24
|
+
# Create the new exception.
|
25
25
|
#
|
26
|
-
# @example Create the
|
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("
|
32
|
-
"
|
33
|
-
"
|
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
|
data/lib/mongo/error/parser.rb
CHANGED
@@ -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
|
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'
|
@@ -160,17 +160,17 @@ module Mongo
|
|
160
160
|
# Chunks.split(data)
|
161
161
|
#
|
162
162
|
# @param [ String ] data The raw bytes.
|
163
|
-
# @param [
|
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,
|
169
|
-
chunks, index, n = [], 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,
|
172
|
-
|
173
|
-
chunk = Chunk.new(:data => BSON::Binary.new(bytes), :files_id =>
|
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
|