mongo 2.1.0.beta → 2.2.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 +0 -0
- data/README.md +10 -3
- data/Rakefile +1 -7
- data/lib/mongo/address/ipv4.rb +6 -1
- data/lib/mongo/address/unix.rb +2 -2
- data/lib/mongo/address.rb +32 -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 +61 -8
- 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 +164 -23
- data/lib/mongo/client.rb +75 -18
- data/lib/mongo/cluster/topology/replica_set.rb +8 -6
- data/lib/mongo/cluster/topology/unknown.rb +5 -2
- data/lib/mongo/cluster.rb +85 -5
- data/lib/mongo/collection/view/aggregation.rb +19 -45
- data/lib/mongo/collection/view/builder/aggregation.rb +98 -0
- data/lib/mongo/collection/view/builder/find_command.rb +111 -0
- data/lib/mongo/collection/view/builder/flags.rb +62 -0
- data/lib/mongo/collection/view/builder/map_reduce.rb +134 -0
- data/lib/mongo/collection/view/builder/modifiers.rb +80 -0
- data/lib/mongo/collection/view/builder/op_query.rb +83 -0
- data/lib/mongo/collection/view/builder.rb +20 -0
- data/lib/mongo/collection/view/explainable.rb +15 -0
- data/lib/mongo/collection/view/immutable.rb +4 -11
- data/lib/mongo/collection/view/iterable.rb +40 -5
- data/lib/mongo/collection/view/map_reduce.rb +67 -37
- data/lib/mongo/collection/view/readable.rb +114 -100
- data/lib/mongo/collection/view/writable.rb +46 -22
- data/lib/mongo/collection/view.rb +25 -22
- data/lib/mongo/collection.rb +130 -12
- data/lib/mongo/cursor/builder/get_more_command.rb +71 -0
- data/lib/mongo/cursor/builder/kill_cursors_command.rb +62 -0
- data/lib/mongo/cursor/builder/op_get_more.rb +61 -0
- data/lib/mongo/cursor/builder/op_kill_cursors.rb +56 -0
- data/lib/mongo/cursor/builder.rb +18 -0
- data/lib/mongo/cursor.rb +76 -21
- data/lib/mongo/database/view.rb +11 -6
- data/lib/mongo/database.rb +16 -6
- data/lib/mongo/dbref.rb +9 -9
- data/lib/mongo/{bulk_write/unordered_bulk_write.rb → error/closed_stream.rb} +12 -21
- data/lib/mongo/{bulk_write/ordered_bulk_write.rb → error/extra_file_chunk.rb} +13 -27
- data/lib/mongo/error/file_not_found.rb +37 -0
- 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/invalid_write_concern.rb +35 -0
- data/lib/mongo/error/missing_file_chunk.rb +38 -0
- data/lib/mongo/error/operation_failure.rb +33 -2
- 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 +8 -0
- data/lib/mongo/grid/file/chunk.rb +9 -9
- data/lib/mongo/grid/file/{metadata.rb → info.rb} +41 -39
- data/lib/mongo/grid/file.rb +12 -9
- 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 +7 -4
- 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 +38 -14
- data/lib/mongo/monitoring/event/command_started.rb +2 -1
- data/lib/mongo/monitoring/event/command_succeeded.rb +24 -2
- data/lib/mongo/monitoring/event/secure.rb +58 -0
- data/lib/mongo/monitoring/event.rb +1 -0
- data/lib/mongo/monitoring/publishable.rb +22 -12
- data/lib/mongo/monitoring.rb +1 -5
- data/lib/mongo/operation/commands/aggregate/result.rb +89 -0
- data/lib/mongo/operation/commands/aggregate.rb +64 -0
- data/lib/mongo/operation/commands/collections_info/result.rb +41 -0
- data/lib/mongo/operation/{read → commands}/collections_info.rb +5 -3
- data/lib/mongo/operation/commands/command.rb +47 -0
- data/lib/mongo/operation/commands/find/result.rb +62 -0
- data/lib/mongo/operation/commands/find.rb +27 -0
- data/lib/mongo/operation/commands/get_more/result.rb +62 -0
- data/lib/mongo/operation/commands/get_more.rb +27 -0
- data/lib/mongo/operation/{read → commands}/indexes.rb +9 -6
- data/lib/mongo/operation/{list_collections → commands/list_collections}/result.rb +1 -21
- data/lib/mongo/operation/{read → commands}/list_collections.rb +4 -32
- data/lib/mongo/operation/{list_indexes → commands/list_indexes}/result.rb +1 -21
- data/lib/mongo/operation/{read → commands}/list_indexes.rb +3 -33
- data/lib/mongo/operation/commands/map_reduce/result.rb +119 -0
- data/lib/mongo/operation/commands/map_reduce.rb +49 -0
- data/lib/mongo/operation/commands/parallel_scan/result.rb +64 -0
- data/lib/mongo/operation/commands/parallel_scan.rb +52 -0
- data/lib/mongo/operation/commands/user_query.rb +71 -0
- data/lib/mongo/operation/commands/users_info/result.rb +38 -0
- data/lib/mongo/operation/commands/users_info.rb +48 -0
- data/lib/mongo/operation/commands.rb +26 -0
- data/lib/mongo/operation/executable.rb +4 -68
- data/lib/mongo/operation/kill_cursors.rb +3 -3
- data/lib/mongo/operation/object_id_generator.rb +36 -0
- data/lib/mongo/operation/read/get_more.rb +2 -22
- data/lib/mongo/operation/read/query/result.rb +40 -0
- 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 +43 -1
- data/lib/mongo/operation/specifiable.rb +59 -1
- data/lib/mongo/operation/write/bulk/bulkable.rb +83 -0
- data/lib/mongo/operation/write/bulk/delete/result.rb +67 -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 +3 -3
- data/lib/mongo/operation/write/command/drop_index.rb +0 -1
- data/lib/mongo/operation/write/command/insert.rb +4 -3
- data/lib/mongo/operation/write/command/remove_user.rb +0 -1
- data/lib/mongo/operation/write/command/update.rb +6 -4
- 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 +49 -0
- data/lib/mongo/operation/write/idable.rb +24 -2
- 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 +33 -5
- data/lib/mongo/options/mapper.rb +26 -2
- data/lib/mongo/options/redacted.rb +156 -0
- data/lib/mongo/options.rb +1 -0
- data/lib/mongo/protocol/bit_vector.rb +11 -9
- data/lib/mongo/protocol/delete.rb +78 -3
- data/lib/mongo/protocol/get_more.rb +59 -2
- data/lib/mongo/protocol/insert.rb +73 -1
- data/lib/mongo/protocol/kill_cursors.rb +66 -4
- data/lib/mongo/protocol/message.rb +44 -20
- data/lib/mongo/protocol/query.rb +153 -65
- data/lib/mongo/protocol/reply.rb +92 -1
- data/lib/mongo/protocol/serializers.rb +49 -40
- data/lib/mongo/protocol/update.rb +93 -1
- data/lib/mongo/retryable.rb +101 -0
- data/lib/mongo/server/connectable.rb +28 -8
- data/lib/mongo/server/connection.rb +52 -10
- data/lib/mongo/server/connection_pool/queue.rb +15 -0
- data/lib/mongo/server/connection_pool.rb +12 -15
- data/lib/mongo/server/description/features.rb +4 -2
- data/lib/mongo/server/description.rb +39 -3
- data/lib/mongo/server/monitor/connection.rb +49 -28
- data/lib/mongo/server/monitor.rb +3 -14
- data/lib/mongo/server.rb +31 -4
- data/lib/mongo/server_selector/selectable.rb +58 -32
- data/lib/mongo/server_selector.rb +19 -10
- data/lib/mongo/socket/ssl.rb +4 -1
- data/lib/mongo/socket/tcp.rb +2 -2
- data/lib/mongo/socket/unix.rb +5 -8
- data/lib/mongo/socket.rb +11 -4
- data/lib/mongo/uri.rb +245 -139
- data/lib/mongo/version.rb +1 -1
- data/lib/mongo/write_concern.rb +21 -6
- data/lib/mongo.rb +4 -4
- data/mongo.gemspec +1 -2
- data/spec/mongo/address/unix_spec.rb +1 -1
- data/spec/mongo/address_spec.rb +25 -0
- data/spec/mongo/auth/ldap/conversation_spec.rb +43 -0
- data/spec/mongo/auth/user/view_spec.rb +26 -1
- data/spec/mongo/bulk_write/ordered_combiner_spec.rb +284 -0
- data/spec/mongo/bulk_write/unordered_combiner_spec.rb +239 -0
- data/spec/mongo/bulk_write_spec.rb +385 -161
- data/spec/mongo/client_spec.rb +193 -23
- data/spec/mongo/cluster/topology/replica_set_spec.rb +2 -0
- data/spec/mongo/collection/view/aggregation_spec.rb +65 -0
- data/spec/mongo/collection/view/builder/find_command_spec.rb +167 -0
- data/spec/mongo/collection/view/builder/flags_spec.rb +106 -0
- data/spec/mongo/collection/view/builder/modifiers_spec.rb +210 -0
- data/spec/mongo/collection/view/builder/op_query_spec.rb +154 -0
- data/spec/mongo/collection/view/explainable_spec.rb +1 -2
- data/spec/mongo/collection/view/immutable_spec.rb +54 -0
- data/spec/mongo/collection/view/map_reduce_spec.rb +104 -9
- data/spec/mongo/collection/view/readable_spec.rb +109 -112
- data/spec/mongo/collection/view_spec.rb +119 -487
- data/spec/mongo/collection_spec.rb +1002 -33
- data/spec/mongo/command_monitoring_spec.rb +64 -0
- data/spec/mongo/connection_string_spec.rb +115 -0
- data/spec/mongo/cursor/builder/get_more_command_spec.rb +160 -0
- data/spec/mongo/cursor/builder/op_get_more_spec.rb +52 -0
- data/spec/mongo/cursor_spec.rb +10 -60
- data/spec/mongo/database_spec.rb +81 -12
- data/spec/mongo/dbref_spec.rb +4 -4
- data/spec/mongo/grid/file/chunk_spec.rb +6 -6
- 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/index/view_spec.rb +41 -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/operation/{aggregate → commands/aggregate}/result_spec.rb +1 -1
- 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} +1 -19
- 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/result_spec.rb +19 -0
- data/spec/mongo/operation/write/bulk/{bulk_delete_spec.rb → delete_spec.rb} +17 -28
- data/spec/mongo/operation/write/bulk/{bulk_insert_spec.rb → insert_spec.rb} +1 -12
- data/spec/mongo/operation/write/bulk/{bulk_update_spec.rb → update_spec.rb} +7 -18
- data/spec/mongo/operation/write/command/delete_spec.rb +18 -9
- data/spec/mongo/operation/write/command/insert_spec.rb +18 -9
- data/spec/mongo/operation/write/command/update_spec.rb +18 -9
- data/spec/mongo/operation/write/delete_spec.rb +3 -3
- data/spec/mongo/operation/write/insert_spec.rb +0 -11
- data/spec/mongo/operation/write/update_spec.rb +6 -6
- data/spec/mongo/options/redacted_spec.rb +350 -0
- data/spec/mongo/protocol/delete_spec.rb +4 -4
- data/spec/mongo/protocol/get_more_spec.rb +4 -4
- data/spec/mongo/protocol/insert_spec.rb +3 -3
- data/spec/mongo/protocol/kill_cursors_spec.rb +8 -6
- data/spec/mongo/protocol/query_spec.rb +21 -7
- data/spec/mongo/protocol/update_spec.rb +5 -5
- data/spec/mongo/retryable_spec.rb +221 -0
- data/spec/mongo/server/connection_pool/queue_spec.rb +16 -0
- data/spec/mongo/server/connection_pool_spec.rb +42 -6
- data/spec/mongo/server/connection_spec.rb +86 -1
- data/spec/mongo/server/description/features_spec.rb +25 -0
- data/spec/mongo/server/description_spec.rb +42 -0
- data/spec/mongo/server/monitor_spec.rb +44 -0
- data/spec/mongo/server_discovery_and_monitoring_spec.rb +25 -59
- data/spec/mongo/server_selection_rtt_spec.rb +37 -57
- data/spec/mongo/server_selection_spec.rb +5 -3
- 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 +78 -15
- data/spec/mongo/socket/ssl_spec.rb +101 -57
- data/spec/mongo/socket/unix_spec.rb +52 -0
- data/spec/mongo/uri_spec.rb +271 -59
- data/spec/mongo/write_concern_spec.rb +126 -0
- data/spec/spec_helper.rb +29 -23
- data/spec/support/authorization.rb +4 -5
- 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 +268 -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 +373 -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 +14 -10
- data/spec/support/crud/write.rb +36 -9
- 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 +2 -2
- data/spec/support/sdam/rs/equal_electionids.yml +1 -2
- data/spec/support/sdam/rs/new_primary_new_electionid.yml +0 -3
- 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/rsother_discovered.yml +24 -3
- data/spec/support/sdam/rs/secondary_mismatched_me.yml +37 -0
- data/spec/support/sdam/rs/stepdown_change_set_name.yml +59 -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 +3 -1
- data/spec/support/server_selection.rb +3 -1
- data/spec/support/shared/bulk_write.rb +192 -0
- data/spec/support/shared/protocol.rb +5 -5
- data/spec/support/shared/server_selector.rb +78 -13
- data/spec/support/travis.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +211 -72
- metadata.gz.sig +0 -0
- data/lib/mongo/bulk_write/bulk_writable.rb +0 -252
- data/lib/mongo/bulk_write/deletable.rb +0 -57
- data/lib/mongo/bulk_write/insertable.rb +0 -49
- data/lib/mongo/bulk_write/replacable.rb +0 -58
- data/lib/mongo/bulk_write/updatable.rb +0 -69
- data/lib/mongo/grid/fs.rb +0 -146
- data/lib/mongo/operation/aggregate/result.rb +0 -103
- data/lib/mongo/operation/aggregate.rb +0 -108
- data/lib/mongo/operation/command.rb +0 -61
- data/lib/mongo/operation/map_reduce/result.rb +0 -122
- data/lib/mongo/operation/map_reduce.rb +0 -95
- data/lib/mongo/operation/parallel_scan/result.rb +0 -72
- data/lib/mongo/operation/parallel_scan.rb +0 -76
- 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 -174
- 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/grid/fs_spec.rb +0 -160
- data/spec/mongo/loggable_spec.rb +0 -63
- data/spec/mongo/operation/aggregate_spec.rb +0 -127
@@ -1,252 +0,0 @@
|
|
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
|
-
require 'mongo/bulk_write/insertable'
|
16
|
-
require 'mongo/bulk_write/deletable'
|
17
|
-
require 'mongo/bulk_write/updatable'
|
18
|
-
require 'mongo/bulk_write/replacable'
|
19
|
-
|
20
|
-
module Mongo
|
21
|
-
module BulkWrite
|
22
|
-
|
23
|
-
# Defines shared behaviour between ordered and unordered bulk operations.
|
24
|
-
#
|
25
|
-
# @since 2.0.0
|
26
|
-
module BulkWritable
|
27
|
-
include Insertable
|
28
|
-
include Deletable
|
29
|
-
include Updatable
|
30
|
-
include Replacable
|
31
|
-
extend Forwardable
|
32
|
-
|
33
|
-
# Constant for number removed.
|
34
|
-
#
|
35
|
-
# @since 2.1.0
|
36
|
-
REMOVED_COUNT = 'n_removed'.freeze
|
37
|
-
|
38
|
-
# Constant for number inserted.
|
39
|
-
#
|
40
|
-
# @since 2.1.0
|
41
|
-
INSERTED_COUNT = 'n_inserted'.freeze
|
42
|
-
|
43
|
-
# Constant for inserted ids.
|
44
|
-
#
|
45
|
-
# @since 2.1.0
|
46
|
-
INSERTED_IDS = 'inserted_ids'.freeze
|
47
|
-
|
48
|
-
# Constant for number matched.
|
49
|
-
#
|
50
|
-
# @since 2.1.0
|
51
|
-
MATCHED_COUNT = 'n_matched'.freeze
|
52
|
-
|
53
|
-
# Constant for number modified.
|
54
|
-
#
|
55
|
-
# @since 2.1.0
|
56
|
-
MODIFIED_COUNT = 'n_modified'.freeze
|
57
|
-
|
58
|
-
# Constant for number upserted.
|
59
|
-
#
|
60
|
-
# @since 2.1.0
|
61
|
-
UPSERTED_COUNT = 'n_upserted'.freeze
|
62
|
-
|
63
|
-
# Constant for upserted ids.
|
64
|
-
#
|
65
|
-
# @since 2.1.0
|
66
|
-
UPSERTED_IDS = 'upserted_ids'.freeze
|
67
|
-
|
68
|
-
# Constant for indexes.
|
69
|
-
#
|
70
|
-
# @since 2.1.0
|
71
|
-
INDEXES = 'indexes'.freeze
|
72
|
-
|
73
|
-
# The fields contained in the result document returned from executing the
|
74
|
-
# operations.
|
75
|
-
#
|
76
|
-
# @since 2.0.0.
|
77
|
-
RESULT_FIELDS = [
|
78
|
-
INSERTED_COUNT,
|
79
|
-
REMOVED_COUNT,
|
80
|
-
MODIFIED_COUNT,
|
81
|
-
UPSERTED_COUNT,
|
82
|
-
MATCHED_COUNT
|
83
|
-
].freeze
|
84
|
-
|
85
|
-
# Delegate various methods to the collection.
|
86
|
-
def_delegators :@collection, :database, :cluster, :next_primary
|
87
|
-
|
88
|
-
# Initialize a bulk write object.
|
89
|
-
#
|
90
|
-
# @example Initialize a bulk write object.
|
91
|
-
# Mongo::BulkWrite::OrderedBulkWrite.new(collection, operations, options)
|
92
|
-
# Mongo::BulkWrite::UnorderedBulkWrite.new(collection, operations, options)
|
93
|
-
#
|
94
|
-
# @param [ Mongo::Collection ] collection The collection the operations will
|
95
|
-
# be executed on.
|
96
|
-
# @param [ Array<Hash> ] operations The operations to be executed.
|
97
|
-
# @param [ Hash ] options The options.
|
98
|
-
#
|
99
|
-
# @option options [ Hash ] :write_concern The write concern to use for this
|
100
|
-
# bulk write.
|
101
|
-
#
|
102
|
-
# @since 2.0.0
|
103
|
-
def initialize(collection, operations, options)
|
104
|
-
@collection = collection
|
105
|
-
@operations = operations
|
106
|
-
@options = options
|
107
|
-
end
|
108
|
-
|
109
|
-
# Execute the bulk operations.
|
110
|
-
#
|
111
|
-
# @example Execute the operations.
|
112
|
-
# bulk.execute
|
113
|
-
#
|
114
|
-
# @return [ Hash ] The results from the bulk write.
|
115
|
-
#
|
116
|
-
# @since 2.0.0
|
117
|
-
def execute
|
118
|
-
server = next_primary
|
119
|
-
validate_operations!
|
120
|
-
operation_id = Monitoring.next_operation_id
|
121
|
-
merged_ops.each do |op|
|
122
|
-
validate_type!(op.keys.first)
|
123
|
-
execute_op(op, server, operation_id)
|
124
|
-
end
|
125
|
-
finalize
|
126
|
-
end
|
127
|
-
|
128
|
-
private
|
129
|
-
|
130
|
-
def valid_doc?(doc)
|
131
|
-
doc.respond_to?(:keys) || doc.respond_to?(:document)
|
132
|
-
end
|
133
|
-
|
134
|
-
def write_concern
|
135
|
-
@write_concern ||= @options[:write_concern] ?
|
136
|
-
WriteConcern.get(@options[:write_concern]) :
|
137
|
-
@collection.write_concern
|
138
|
-
end
|
139
|
-
|
140
|
-
def validate_operations!
|
141
|
-
unless @operations && @operations.size > 0
|
142
|
-
raise ArgumentError.new('Operations cannot be empty')
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
def validate_type!(type)
|
147
|
-
unless respond_to?(type, true)
|
148
|
-
raise Error::InvalidBulkOperationType.new(type)
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
def max_write_batches(op, server)
|
153
|
-
type = op.keys.first
|
154
|
-
ops = []
|
155
|
-
while op[type].size > server.max_write_batch_size
|
156
|
-
ops << {
|
157
|
-
type => op[type].shift(server.max_write_batch_size),
|
158
|
-
INDEXES => op[INDEXES].shift(server.max_write_batch_size)
|
159
|
-
}
|
160
|
-
end
|
161
|
-
ops << op
|
162
|
-
end
|
163
|
-
|
164
|
-
def split(op, type)
|
165
|
-
n = op[type].size/2
|
166
|
-
[
|
167
|
-
{ type => op[type].shift(n), INDEXES => op[INDEXES].shift(n) },
|
168
|
-
{ type => op[type], INDEXES => op[INDEXES] }
|
169
|
-
]
|
170
|
-
end
|
171
|
-
|
172
|
-
def execute_op(operation, server, operation_id)
|
173
|
-
ops = max_write_batches(operation, server)
|
174
|
-
|
175
|
-
until ops.empty?
|
176
|
-
op = ops.shift
|
177
|
-
type = op.keys.first
|
178
|
-
begin
|
179
|
-
process(send(type, op, server, operation_id), op[INDEXES])
|
180
|
-
rescue Error::MaxBSONSize, Error::MaxMessageSize => ex
|
181
|
-
raise ex if op[type].size < 2
|
182
|
-
ops = split(op, type) + ops
|
183
|
-
end
|
184
|
-
end
|
185
|
-
end
|
186
|
-
|
187
|
-
def merge_consecutive_ops(ops)
|
188
|
-
ops.each_with_index.inject([]) do |merged, (op, i)|
|
189
|
-
type = op.keys.first
|
190
|
-
op[INDEXES] ||= [ i ]
|
191
|
-
previous = merged.last
|
192
|
-
if previous && previous.keys.first == type
|
193
|
-
merged[-1].merge!(
|
194
|
-
type => previous[type] << op[type],
|
195
|
-
INDEXES => previous[INDEXES] + op[INDEXES]
|
196
|
-
)
|
197
|
-
merged
|
198
|
-
else
|
199
|
-
merged << { type => [ op[type] ].flatten, INDEXES => op[INDEXES] }
|
200
|
-
end
|
201
|
-
end
|
202
|
-
end
|
203
|
-
|
204
|
-
def merge_ops_by_type
|
205
|
-
indexes = {}
|
206
|
-
ops_hash = @operations.each_with_index.inject({}) do |merged, (op, i)|
|
207
|
-
type = op.keys.first
|
208
|
-
merged.merge!(op) { |type, v1, v2| ([v1] << v2).flatten }
|
209
|
-
indexes[type] = (indexes[type] || []).push(i)
|
210
|
-
merged
|
211
|
-
end
|
212
|
-
ops_hash.keys.reduce([]) do |ops_list, type|
|
213
|
-
ops_list << { type => ops_hash[type], INDEXES => indexes[type] }
|
214
|
-
end
|
215
|
-
end
|
216
|
-
|
217
|
-
def combine_results(result, indexes)
|
218
|
-
@results ||= {}
|
219
|
-
write_errors = result.aggregate_write_errors(indexes)
|
220
|
-
|
221
|
-
# The Bulk API only returns the first write concern error encountered.
|
222
|
-
@write_concern_errors ||= result.aggregate_write_concern_errors(indexes)
|
223
|
-
|
224
|
-
@results.tap do |results|
|
225
|
-
RESULT_FIELDS.each do |field|
|
226
|
-
results.merge!(
|
227
|
-
field => (results[field] || 0) + result.send(field)
|
228
|
-
) if result.respond_to?(field)
|
229
|
-
end
|
230
|
-
|
231
|
-
if result.respond_to?(INSERTED_IDS)
|
232
|
-
results.merge!(INSERTED_IDS => result.inserted_ids)
|
233
|
-
end
|
234
|
-
|
235
|
-
if result.respond_to?(Operation::Write::BulkUpdate::Result::UPSERTED)
|
236
|
-
results.merge!(UPSERTED_IDS => result.upserted.map{ |doc| doc['_id'] })
|
237
|
-
end
|
238
|
-
|
239
|
-
if write_errors
|
240
|
-
results.merge!(
|
241
|
-
Error::WRITE_ERRORS => ((results[Error::WRITE_ERRORS] || []) << write_errors).flatten
|
242
|
-
)
|
243
|
-
end
|
244
|
-
|
245
|
-
if @write_concern_errors
|
246
|
-
results.merge!(Error::WRITE_CONCERN_ERRORS => @write_concern_errors)
|
247
|
-
end
|
248
|
-
end
|
249
|
-
end
|
250
|
-
end
|
251
|
-
end
|
252
|
-
end
|
@@ -1,57 +0,0 @@
|
|
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
|
-
module BulkWrite
|
17
|
-
|
18
|
-
# Defines behavior for validating and combining delete bulk write operations.
|
19
|
-
#
|
20
|
-
# @since 2.0.0.
|
21
|
-
module Deletable
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def validate_delete_op!(type, d)
|
26
|
-
raise Error::InvalidBulkOperation.new(type, d) unless valid_doc?(d)
|
27
|
-
end
|
28
|
-
|
29
|
-
def deletes(ops, type)
|
30
|
-
limit = (type == :delete_one) ? 1 : 0
|
31
|
-
ops.collect do |d|
|
32
|
-
validate_delete_op!(type, d)
|
33
|
-
{ q: d, limit: limit }
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def delete(ops, type, server, operation_id)
|
38
|
-
Operation::Write::BulkDelete.new(
|
39
|
-
:deletes => deletes(ops, type),
|
40
|
-
:db_name => database.name,
|
41
|
-
:coll_name => @collection.name,
|
42
|
-
:write_concern => write_concern,
|
43
|
-
:ordered => ordered?,
|
44
|
-
:operation_id => operation_id
|
45
|
-
).execute(server.context)
|
46
|
-
end
|
47
|
-
|
48
|
-
def delete_one(op, server, operation_id)
|
49
|
-
delete(op[:delete_one], __method__, server, operation_id)
|
50
|
-
end
|
51
|
-
|
52
|
-
def delete_many(op, server, operation_id)
|
53
|
-
delete(op[:delete_many], __method__, server, operation_id)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
@@ -1,49 +0,0 @@
|
|
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
|
-
module BulkWrite
|
17
|
-
|
18
|
-
# Defines behavior for validating and combining insert bulk write operations.
|
19
|
-
#
|
20
|
-
# @since 2.0.0.
|
21
|
-
module Insertable
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def validate_insert_ops!(type, inserts)
|
26
|
-
if inserts.empty?
|
27
|
-
raise Error::InvalidBulkOperation.new(type, inserts)
|
28
|
-
end
|
29
|
-
inserts.each do |i|
|
30
|
-
unless valid_doc?(i)
|
31
|
-
raise Error::InvalidBulkOperation.new(type, i)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def insert_one(op, server, operation_id)
|
37
|
-
validate_insert_ops!(__method__, op[:insert_one])
|
38
|
-
Operation::Write::BulkInsert.new(
|
39
|
-
:documents => op[:insert_one].flatten,
|
40
|
-
:db_name => database.name,
|
41
|
-
:coll_name => @collection.name,
|
42
|
-
:write_concern => write_concern,
|
43
|
-
:ordered => ordered?,
|
44
|
-
:operation_id => operation_id
|
45
|
-
).execute(server.context)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
@@ -1,58 +0,0 @@
|
|
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
|
-
module BulkWrite
|
17
|
-
|
18
|
-
# Defines behavior for validating and combining replace bulk write operations.
|
19
|
-
#
|
20
|
-
# @since 2.0.0.
|
21
|
-
module Replacable
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def replacement_doc?(doc)
|
26
|
-
doc.respond_to?(:keys) && doc.keys.all?{|key| key !~ /^\$/}
|
27
|
-
end
|
28
|
-
|
29
|
-
def validate_replace_op!(r, type)
|
30
|
-
unless r[:find] && r[:replacement] && replacement_doc?(r[:replacement])
|
31
|
-
raise Error::InvalidBulkOperation.new(type, r)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def replace_ops(ops, type)
|
36
|
-
ops.collect do |r|
|
37
|
-
validate_replace_op!(r, type)
|
38
|
-
{ q: r[:find],
|
39
|
-
u: r[:replacement],
|
40
|
-
multi: false,
|
41
|
-
upsert: r.fetch(:upsert, false)
|
42
|
-
}
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def replace_one(op, server, operation_id)
|
47
|
-
Operation::Write::BulkUpdate.new(
|
48
|
-
:updates => replace_ops(op[:replace_one], __method__),
|
49
|
-
:db_name => database.name,
|
50
|
-
:coll_name => @collection.name,
|
51
|
-
:write_concern => write_concern,
|
52
|
-
:ordered => ordered?,
|
53
|
-
:operation_id => operation_id
|
54
|
-
).execute(server.context)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
@@ -1,69 +0,0 @@
|
|
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
|
-
module BulkWrite
|
17
|
-
|
18
|
-
# Defines behavior for validating and combining update bulk write operations.
|
19
|
-
#
|
20
|
-
# @since 2.0.0.
|
21
|
-
module Updatable
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def update_doc?(doc)
|
26
|
-
!doc.empty? &&
|
27
|
-
doc.respond_to?(:keys) &&
|
28
|
-
doc.keys.first.to_s =~ /^\$/
|
29
|
-
end
|
30
|
-
|
31
|
-
def validate_update_op!(type, u)
|
32
|
-
unless u[:find] && u[:update] && update_doc?(u[:update])
|
33
|
-
raise Error::InvalidBulkOperation.new(type, u)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def updates(ops, type)
|
38
|
-
multi = type == :update_many
|
39
|
-
ops.collect do |u|
|
40
|
-
validate_update_op!(type, u)
|
41
|
-
{ q: u[:find],
|
42
|
-
u: u[:update],
|
43
|
-
multi: multi,
|
44
|
-
upsert: u.fetch(:upsert, false)
|
45
|
-
}
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
def update(ops, type, server, operation_id)
|
50
|
-
Operation::Write::BulkUpdate.new(
|
51
|
-
:updates => updates(ops, type),
|
52
|
-
:db_name => database.name,
|
53
|
-
:coll_name => @collection.name,
|
54
|
-
:write_concern => write_concern,
|
55
|
-
:ordered => ordered?,
|
56
|
-
:operation_id => operation_id
|
57
|
-
).execute(server.context)
|
58
|
-
end
|
59
|
-
|
60
|
-
def update_one(op, server, operation_id)
|
61
|
-
update(op[:update_one], __method__, server, operation_id)
|
62
|
-
end
|
63
|
-
|
64
|
-
def update_many(op, server, operation_id)
|
65
|
-
update(op[:update_many], __method__, server, operation_id)
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
data/lib/mongo/grid/fs.rb
DELETED
@@ -1,146 +0,0 @@
|
|
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
|
-
module Grid
|
17
|
-
|
18
|
-
# Represents a view of the GridFS in the database.
|
19
|
-
#
|
20
|
-
# @since 2.0.0
|
21
|
-
class FS
|
22
|
-
extend Forwardable
|
23
|
-
|
24
|
-
# The default root prefix.
|
25
|
-
#
|
26
|
-
# @since 2.0.0
|
27
|
-
DEFAULT_ROOT = 'fs'.freeze
|
28
|
-
|
29
|
-
# The specification for the chunks index.
|
30
|
-
#
|
31
|
-
# @since 2.0.0
|
32
|
-
INDEX_SPEC = { :files_id => 1, :n => 1 }.freeze
|
33
|
-
|
34
|
-
# @return [ Collection ] chunks_collection The chunks collection.
|
35
|
-
attr_reader :chunks_collection
|
36
|
-
|
37
|
-
# @return [ Database ] database The database.
|
38
|
-
attr_reader :database
|
39
|
-
|
40
|
-
# @return [ Collection ] files_collection The files collection.
|
41
|
-
attr_reader :files_collection
|
42
|
-
|
43
|
-
# Get write concern from database.
|
44
|
-
def_delegators :database, :write_concern
|
45
|
-
|
46
|
-
# Find a file in the GridFS.
|
47
|
-
#
|
48
|
-
# @example Find a file by it's id.
|
49
|
-
# fs.find_one(_id: id)
|
50
|
-
#
|
51
|
-
# @example Find a file by it's filename.
|
52
|
-
# fs.find_one(filename: 'test.txt')
|
53
|
-
#
|
54
|
-
# @param [ Hash ] selector The selector.
|
55
|
-
#
|
56
|
-
# @return [ Grid::File ] The file.
|
57
|
-
#
|
58
|
-
# @since 2.0.0
|
59
|
-
def find_one(selector = nil)
|
60
|
-
metadata = files_collection.find(selector).first
|
61
|
-
return nil unless metadata
|
62
|
-
chunks = chunks_collection.find(:files_id => metadata[:_id]).sort(:n => 1)
|
63
|
-
Grid::File.new(chunks.to_a, metadata)
|
64
|
-
end
|
65
|
-
|
66
|
-
# Insert a single file into the GridFS.
|
67
|
-
#
|
68
|
-
# @example Insert a single file.
|
69
|
-
# fs.insert_one(file)
|
70
|
-
#
|
71
|
-
# @param [ Grid::File ] file The file to insert.
|
72
|
-
#
|
73
|
-
# @return [ BSON::ObjectId ] The file id.
|
74
|
-
#
|
75
|
-
# @since 2.0.0
|
76
|
-
def insert_one(file)
|
77
|
-
files_collection.insert_one(file.metadata)
|
78
|
-
result = chunks_collection.insert_many(file.chunks)
|
79
|
-
validate_md5!(file) if write_concern.get_last_error
|
80
|
-
file.id
|
81
|
-
end
|
82
|
-
|
83
|
-
# Create the GridFS.
|
84
|
-
#
|
85
|
-
# @example Create the GridFS.
|
86
|
-
# Grid::FS.new(database)
|
87
|
-
#
|
88
|
-
# @param [ Database ] database The database the files reside in.
|
89
|
-
# @param [ Hash ] options The GridFS options.
|
90
|
-
#
|
91
|
-
# @option options [ String ] :fs_name The prefix for the files and chunks
|
92
|
-
# collections.
|
93
|
-
#
|
94
|
-
# @since 2.0.0
|
95
|
-
def initialize(database, options = {})
|
96
|
-
@database = database
|
97
|
-
@options = options
|
98
|
-
@chunks_collection = database[chunks_name]
|
99
|
-
@files_collection = database[files_name]
|
100
|
-
chunks_collection.indexes.create_one(INDEX_SPEC, :unique => true)
|
101
|
-
end
|
102
|
-
|
103
|
-
# Get the prefix for the GridFS
|
104
|
-
#
|
105
|
-
# @example Get the prefix.
|
106
|
-
# fs.prefix
|
107
|
-
#
|
108
|
-
# @return [ String ] The GridFS prefix.
|
109
|
-
#
|
110
|
-
# @since 2.0.0
|
111
|
-
def prefix
|
112
|
-
@options[:fs_name] || DEFAULT_ROOT
|
113
|
-
end
|
114
|
-
|
115
|
-
# Remove a single file from the GridFS.
|
116
|
-
#
|
117
|
-
# @example Remove a file from the GridFS.
|
118
|
-
# fs.delete_one(file)
|
119
|
-
#
|
120
|
-
# @param [ Grid::File ] file The file to remove.
|
121
|
-
#
|
122
|
-
# @return [ Result ] The result of the remove.
|
123
|
-
#
|
124
|
-
# @since 2.0.0
|
125
|
-
def delete_one(file)
|
126
|
-
files_collection.find(:_id => file.id).delete_one
|
127
|
-
chunks_collection.find(:files_id => file.id).delete_many
|
128
|
-
end
|
129
|
-
|
130
|
-
private
|
131
|
-
|
132
|
-
def chunks_name
|
133
|
-
"#{prefix}.#{Grid::File::Chunk::COLLECTION}"
|
134
|
-
end
|
135
|
-
|
136
|
-
def files_name
|
137
|
-
"#{prefix}.#{Grid::File::Metadata::COLLECTION}"
|
138
|
-
end
|
139
|
-
|
140
|
-
def validate_md5!(file)
|
141
|
-
md5 = database.command(:filemd5 => file.id, :root => prefix).documents[0][:md5]
|
142
|
-
raise Error::InvalidFile.new(file.md5, md5) unless file.md5 == md5
|
143
|
-
end
|
144
|
-
end
|
145
|
-
end
|
146
|
-
end
|