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
data/lib/mongo/operation.rb
CHANGED
@@ -16,11 +16,39 @@ require 'mongo/operation/result'
|
|
16
16
|
require 'mongo/operation/executable'
|
17
17
|
require 'mongo/operation/specifiable'
|
18
18
|
require 'mongo/operation/limited'
|
19
|
-
require 'mongo/operation/
|
19
|
+
require 'mongo/operation/object_id_generator'
|
20
|
+
require 'mongo/operation/read_preference'
|
20
21
|
require 'mongo/operation/read'
|
21
22
|
require 'mongo/operation/write'
|
22
|
-
require 'mongo/operation/
|
23
|
-
require 'mongo/operation/command'
|
23
|
+
require 'mongo/operation/commands'
|
24
24
|
require 'mongo/operation/kill_cursors'
|
25
|
-
|
26
|
-
|
25
|
+
|
26
|
+
module Mongo
|
27
|
+
module Operation
|
28
|
+
|
29
|
+
# The q field constant.
|
30
|
+
#
|
31
|
+
# @since 2.1.0
|
32
|
+
Q = 'q'.freeze
|
33
|
+
|
34
|
+
# The u field constant.
|
35
|
+
#
|
36
|
+
# @since 2.1.0
|
37
|
+
U = 'u'.freeze
|
38
|
+
|
39
|
+
# The limit field constant.
|
40
|
+
#
|
41
|
+
# @since 2.1.0
|
42
|
+
LIMIT = 'limit'.freeze
|
43
|
+
|
44
|
+
# The multi field constant.
|
45
|
+
#
|
46
|
+
# @since 2.1.0
|
47
|
+
MULTI = 'multi'.freeze
|
48
|
+
|
49
|
+
# The upsert field constant.
|
50
|
+
#
|
51
|
+
# @since 2.1.0
|
52
|
+
UPSERT = 'upsert'.freeze
|
53
|
+
end
|
54
|
+
end
|
data/lib/mongo/options/mapper.rb
CHANGED
@@ -34,8 +34,32 @@ module Mongo
|
|
34
34
|
#
|
35
35
|
# @since 2.0.0
|
36
36
|
def transform(options, mappings)
|
37
|
-
|
38
|
-
|
37
|
+
map = transform_keys_to_strings(mappings)
|
38
|
+
opts = transform_keys_to_strings(options)
|
39
|
+
opts.reduce({}) do |transformed, (key, value)|
|
40
|
+
transformed[map[key]] = value if map[key]
|
41
|
+
transformed
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# Transforms the provided options to a new set of options given the
|
46
|
+
# provided mapping. Expects BSON::Documents in and out so no explicit
|
47
|
+
# string conversion needs to happen.
|
48
|
+
#
|
49
|
+
# @example Transform the options.
|
50
|
+
# Mapper.transform_documents({ name: 1 }, { :name => :nombre })
|
51
|
+
#
|
52
|
+
# @param [ BSON::Document ] options The options to transform
|
53
|
+
# @param [ BSON::Document ] mappings The key mappings.
|
54
|
+
# @param [ BSON::Document ] document The output document.
|
55
|
+
#
|
56
|
+
# @return [ BSON::Document ] The transformed options.
|
57
|
+
#
|
58
|
+
# @since 2.0.0
|
59
|
+
def transform_documents(options, mappings, document = BSON::Document.new)
|
60
|
+
options.reduce(document) do |transformed, (key, value)|
|
61
|
+
name = mappings[key]
|
62
|
+
transformed[name] = value if name && !value.nil?
|
39
63
|
transformed
|
40
64
|
end
|
41
65
|
end
|
@@ -0,0 +1,156 @@
|
|
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
|
+
module Options
|
17
|
+
|
18
|
+
# Class for wrapping options that could be sensitive.
|
19
|
+
# When printed, the sensitive values will be redacted.
|
20
|
+
#
|
21
|
+
# @since 2.1.0
|
22
|
+
class Redacted < BSON::Document
|
23
|
+
|
24
|
+
# The options whose values will be redacted.
|
25
|
+
#
|
26
|
+
# @since 2.1.0
|
27
|
+
SENSITIVE_OPTIONS = [ :password,
|
28
|
+
:pwd ].freeze
|
29
|
+
|
30
|
+
# The replacement string used in place of the value for sensitive keys.
|
31
|
+
#
|
32
|
+
# @since 2.1.0
|
33
|
+
STRING_REPLACEMENT = '<REDACTED>'.freeze
|
34
|
+
|
35
|
+
# Get a string representation of the options.
|
36
|
+
#
|
37
|
+
# @return [ String ] The string representation of the options.
|
38
|
+
#
|
39
|
+
# @since 2.1.0
|
40
|
+
def inspect
|
41
|
+
redacted_string(:inspect)
|
42
|
+
end
|
43
|
+
|
44
|
+
# Get a string representation of the options.
|
45
|
+
#
|
46
|
+
# @return [ String ] The string representation of the options.
|
47
|
+
#
|
48
|
+
# @since 2.1.0
|
49
|
+
def to_s
|
50
|
+
redacted_string(:to_s)
|
51
|
+
end
|
52
|
+
|
53
|
+
# Whether these options contain a given key.
|
54
|
+
#
|
55
|
+
# @example Determine if the options contain a given key.
|
56
|
+
# options.has_key?(:name)
|
57
|
+
#
|
58
|
+
# @param [ String, Symbol ] key The key to check for existence.
|
59
|
+
#
|
60
|
+
# @return [ true, false ] If the options contain the given key.
|
61
|
+
#
|
62
|
+
# @since 2.1.0
|
63
|
+
def has_key?(key)
|
64
|
+
super(convert_key(key))
|
65
|
+
end
|
66
|
+
alias_method :key?, :has_key?
|
67
|
+
|
68
|
+
# Returns a new options object consisting of pairs for which the block returns false.
|
69
|
+
#
|
70
|
+
# @example Get a new options object with pairs for which the block returns false.
|
71
|
+
# new_options = options.reject { |k, v| k == 'database' }
|
72
|
+
#
|
73
|
+
# @yieldparam [ String, Object ] The key as a string and its value.
|
74
|
+
#
|
75
|
+
# @return [ Options::Redacted ] A new options object.
|
76
|
+
#
|
77
|
+
# @since 2.1.0
|
78
|
+
def reject(&block)
|
79
|
+
new_options = dup
|
80
|
+
new_options.reject!(&block) || new_options
|
81
|
+
end
|
82
|
+
|
83
|
+
# Only keeps pairs for which the block returns false.
|
84
|
+
#
|
85
|
+
# @example Remove pairs from this object for which the block returns true.
|
86
|
+
# options.reject! { |k, v| k == 'database' }
|
87
|
+
#
|
88
|
+
# @yieldparam [ String, Object ] The key as a string and its value.
|
89
|
+
#
|
90
|
+
# @return [ Options::Redacted, nil ] This object or nil if no changes were made.
|
91
|
+
#
|
92
|
+
# @since 2.1.0
|
93
|
+
def reject!
|
94
|
+
if block_given?
|
95
|
+
n_keys = keys.size
|
96
|
+
keys.each do |key|
|
97
|
+
delete(key) if yield(key, self[key])
|
98
|
+
end
|
99
|
+
n_keys == keys.size ? nil : self
|
100
|
+
else
|
101
|
+
to_enum
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
# Returns a new options object consisting of pairs for which the block returns true.
|
106
|
+
#
|
107
|
+
# @example Get a new options object with pairs for which the block returns true.
|
108
|
+
# ssl_options = options.select { |k, v| k =~ /ssl/ }
|
109
|
+
#
|
110
|
+
# @yieldparam [ String, Object ] The key as a string and its value.
|
111
|
+
#
|
112
|
+
# @return [ Options::Redacted ] A new options object.
|
113
|
+
#
|
114
|
+
# @since 2.1.0
|
115
|
+
def select(&block)
|
116
|
+
new_options = dup
|
117
|
+
new_options.select!(&block) || new_options
|
118
|
+
end
|
119
|
+
|
120
|
+
# Only keeps pairs for which the block returns true.
|
121
|
+
#
|
122
|
+
# @example Remove pairs from this object for which the block does not return true.
|
123
|
+
# options.select! { |k, v| k =~ /ssl/ }
|
124
|
+
#
|
125
|
+
# @yieldparam [ String, Object ] The key as a string and its value.
|
126
|
+
#
|
127
|
+
# @return [ Options::Redacted, nil ] This object or nil if no changes were made.
|
128
|
+
#
|
129
|
+
# @since 2.1.0
|
130
|
+
def select!
|
131
|
+
if block_given?
|
132
|
+
n_keys = keys.size
|
133
|
+
keys.each do |key|
|
134
|
+
delete(key) unless yield(key, self[key])
|
135
|
+
end
|
136
|
+
n_keys == keys.size ? nil : self
|
137
|
+
else
|
138
|
+
to_enum
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
private
|
143
|
+
|
144
|
+
def redacted_string(method)
|
145
|
+
'{' + reduce([]) do |list, (k, v)|
|
146
|
+
list << "#{k.send(method)}=>#{redact(k, v, method)}"
|
147
|
+
end.join(', ') + '}'
|
148
|
+
end
|
149
|
+
|
150
|
+
def redact(k, v, method)
|
151
|
+
return STRING_REPLACEMENT if SENSITIVE_OPTIONS.include?(k.to_sym)
|
152
|
+
v.send(method)
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
data/lib/mongo/options.rb
CHANGED
@@ -24,7 +24,7 @@ module Mongo
|
|
24
24
|
|
25
25
|
# Initializes a BitVector with a layout
|
26
26
|
#
|
27
|
-
# @param layout [Array<Symbol>] the array of fields in the bit vector
|
27
|
+
# @param layout [ Array<Symbol> ] the array of fields in the bit vector
|
28
28
|
def initialize(layout)
|
29
29
|
@masks = {}
|
30
30
|
layout.each_with_index do |field, index|
|
@@ -34,21 +34,23 @@ module Mongo
|
|
34
34
|
|
35
35
|
# Serializes vector by encoding each symbol according to its mask
|
36
36
|
#
|
37
|
-
# @param buffer [
|
38
|
-
# @param value [Array<Symbol>] Array of flags to encode
|
39
|
-
#
|
37
|
+
# @param buffer [ String ] Buffer to receive the serialized vector
|
38
|
+
# @param value [ Array<Symbol> ] Array of flags to encode
|
39
|
+
#
|
40
|
+
# @return [ String ] Buffer that received the serialized vector
|
40
41
|
def serialize(buffer, value)
|
41
42
|
bits = 0
|
42
43
|
value.each { |flag| bits |= @masks[flag] }
|
43
|
-
buffer
|
44
|
+
buffer.put_int32(bits)
|
44
45
|
end
|
45
46
|
|
46
47
|
# Deserializes vector by decoding the symbol according to its mask
|
47
48
|
#
|
48
|
-
# @param
|
49
|
-
#
|
50
|
-
|
51
|
-
|
49
|
+
# @param [ String ] buffer Buffer containing the vector to be deserialized.
|
50
|
+
#
|
51
|
+
# @return [ Array<Symbol> ] Flags contained in the vector
|
52
|
+
def deserialize(buffer)
|
53
|
+
vector = buffer.get_int32
|
52
54
|
flags = []
|
53
55
|
@masks.each do |flag, mask|
|
54
56
|
flags << flag if mask & vector != 0
|
@@ -43,8 +43,9 @@ module Mongo
|
|
43
43
|
def initialize(database, collection, selector, options = {})
|
44
44
|
@database = database
|
45
45
|
@namespace = "#{database}.#{collection}"
|
46
|
-
@selector
|
47
|
-
@flags
|
46
|
+
@selector = selector
|
47
|
+
@flags = options[:flags] || []
|
48
|
+
@upconverter = Upconverter.new(collection, selector, options)
|
48
49
|
end
|
49
50
|
|
50
51
|
# Return the event payload for monitoring.
|
@@ -56,11 +57,18 @@ module Mongo
|
|
56
57
|
#
|
57
58
|
# @since 2.1.0
|
58
59
|
def payload
|
59
|
-
{
|
60
|
+
{
|
61
|
+
command_name: 'delete',
|
62
|
+
database_name: @database,
|
63
|
+
command: upconverter.command,
|
64
|
+
request_id: request_id
|
65
|
+
}
|
60
66
|
end
|
61
67
|
|
62
68
|
private
|
63
69
|
|
70
|
+
attr_reader :upconverter
|
71
|
+
|
64
72
|
# The operation code required to specify a Delete message.
|
65
73
|
# @return [Fixnum] the operation code.
|
66
74
|
def op_code
|
@@ -84,6 +92,73 @@ module Mongo
|
|
84
92
|
# @!attribute
|
85
93
|
# @return [Hash] The selector for this Delete message.
|
86
94
|
field :selector, Document
|
95
|
+
|
96
|
+
# Converts legacy delete messages to the appropriare OP_COMMAND style
|
97
|
+
# message.
|
98
|
+
#
|
99
|
+
# @since 2.1.0
|
100
|
+
class Upconverter
|
101
|
+
|
102
|
+
# The delete command constant.
|
103
|
+
#
|
104
|
+
# @since 2.2.0
|
105
|
+
DELETE = 'delete'.freeze
|
106
|
+
|
107
|
+
# The deletes command constant.
|
108
|
+
#
|
109
|
+
# @since 2.2.0
|
110
|
+
DELETES = 'deletes'.freeze
|
111
|
+
|
112
|
+
# @return [ String ] collection The name of the collection.
|
113
|
+
attr_reader :collection
|
114
|
+
|
115
|
+
# @return [ BSON::Document, Hash ] filter The query filter or command.
|
116
|
+
attr_reader :filter
|
117
|
+
|
118
|
+
# @return [ Hash ] options The options.
|
119
|
+
attr_reader :options
|
120
|
+
|
121
|
+
# Instantiate the upconverter.
|
122
|
+
#
|
123
|
+
# @example Instantiate the upconverter.
|
124
|
+
# Upconverter.new('users', { name: 'test' })
|
125
|
+
#
|
126
|
+
# @param [ String ] collection The name of the collection.
|
127
|
+
# @param [ BSON::Document, Hash ] filter The filter or command.
|
128
|
+
#
|
129
|
+
# @since 2.1.0
|
130
|
+
def initialize(collection, filter, options)
|
131
|
+
@collection = collection
|
132
|
+
@filter = filter
|
133
|
+
@options = options
|
134
|
+
end
|
135
|
+
|
136
|
+
# Get the upconverted command.
|
137
|
+
#
|
138
|
+
# @example Get the command.
|
139
|
+
# upconverter.command
|
140
|
+
#
|
141
|
+
# @return [ BSON::Document ] The upconverted command.
|
142
|
+
#
|
143
|
+
# @since 2.1.0
|
144
|
+
def command
|
145
|
+
document = BSON::Document.new
|
146
|
+
document.store(DELETE, collection)
|
147
|
+
document.store(DELETES, [ BSON::Document.new(Message::Q => filter, Message::LIMIT => limit) ])
|
148
|
+
document.store(Message::ORDERED, true)
|
149
|
+
document
|
150
|
+
end
|
151
|
+
|
152
|
+
private
|
153
|
+
|
154
|
+
def limit
|
155
|
+
if options.key?(:flags)
|
156
|
+
options[:flags].include?(:single_remove) ? 1 : 0
|
157
|
+
else
|
158
|
+
0
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
87
162
|
end
|
88
163
|
end
|
89
164
|
end
|
@@ -41,6 +41,7 @@ module Mongo
|
|
41
41
|
@namespace = "#{database}.#{collection}"
|
42
42
|
@number_to_return = number_to_return
|
43
43
|
@cursor_id = cursor_id
|
44
|
+
@upconverter = Upconverter.new(collection, cursor_id, number_to_return)
|
44
45
|
end
|
45
46
|
|
46
47
|
# Return the event payload for monitoring.
|
@@ -53,9 +54,9 @@ module Mongo
|
|
53
54
|
# @since 2.1.0
|
54
55
|
def payload
|
55
56
|
{
|
56
|
-
command_name: '
|
57
|
+
command_name: 'getMore',
|
57
58
|
database_name: @database,
|
58
|
-
command:
|
59
|
+
command: upconverter.command,
|
59
60
|
request_id: request_id
|
60
61
|
}
|
61
62
|
end
|
@@ -74,6 +75,8 @@ module Mongo
|
|
74
75
|
|
75
76
|
private
|
76
77
|
|
78
|
+
attr_reader :upconverter
|
79
|
+
|
77
80
|
# The operation code required to specify a GetMore message.
|
78
81
|
# @return [Fixnum] the operation code.
|
79
82
|
def op_code
|
@@ -94,6 +97,60 @@ module Mongo
|
|
94
97
|
# @!attribute
|
95
98
|
# @return [Fixnum] The cursor id to get more documents from.
|
96
99
|
field :cursor_id, Int64
|
100
|
+
|
101
|
+
# Converts legacy getmore messages to the appropriare OP_COMMAND style
|
102
|
+
# message.
|
103
|
+
#
|
104
|
+
# @since 2.1.0
|
105
|
+
class Upconverter
|
106
|
+
|
107
|
+
# The get more constant.
|
108
|
+
#
|
109
|
+
# @since 2.2.0
|
110
|
+
GET_MORE = 'getMore'.freeze
|
111
|
+
|
112
|
+
# @return [ String ] collection The name of the collection.
|
113
|
+
attr_reader :collection
|
114
|
+
|
115
|
+
# @return [ Integer ] cursor_id The cursor id.
|
116
|
+
attr_reader :cursor_id
|
117
|
+
|
118
|
+
# @return [ Integer ] number_to_return The number of docs to return.
|
119
|
+
attr_reader :number_to_return
|
120
|
+
|
121
|
+
# Instantiate the upconverter.
|
122
|
+
#
|
123
|
+
# @example Instantiate the upconverter.
|
124
|
+
# Upconverter.new('users', 1, 1)
|
125
|
+
#
|
126
|
+
# @param [ String ] collection The name of the collection.
|
127
|
+
# @param [ Integer ] cursor_id The cursor id.
|
128
|
+
# @param [ Integer ] number_to_return The number of documents to
|
129
|
+
# return.
|
130
|
+
#
|
131
|
+
# @since 2.1.0
|
132
|
+
def initialize(collection, cursor_id, number_to_return)
|
133
|
+
@collection = collection
|
134
|
+
@cursor_id = cursor_id
|
135
|
+
@number_to_return = number_to_return
|
136
|
+
end
|
137
|
+
|
138
|
+
# Get the upconverted command.
|
139
|
+
#
|
140
|
+
# @example Get the command.
|
141
|
+
# upconverter.command
|
142
|
+
#
|
143
|
+
# @return [ BSON::Document ] The upconverted command.
|
144
|
+
#
|
145
|
+
# @since 2.1.0
|
146
|
+
def command
|
147
|
+
document = BSON::Document.new
|
148
|
+
document.store(GET_MORE, cursor_id)
|
149
|
+
document.store(Message::BATCH_SIZE, number_to_return)
|
150
|
+
document.store(Message::COLLECTION, collection)
|
151
|
+
document
|
152
|
+
end
|
153
|
+
end
|
97
154
|
end
|
98
155
|
end
|
99
156
|
end
|
@@ -53,6 +53,7 @@ module Mongo
|
|
53
53
|
@namespace = "#{database}.#{collection}"
|
54
54
|
@documents = documents
|
55
55
|
@flags = options[:flags] || []
|
56
|
+
@upconverter = Upconverter.new(collection, documents, options)
|
56
57
|
end
|
57
58
|
|
58
59
|
# Return the event payload for monitoring.
|
@@ -64,11 +65,18 @@ module Mongo
|
|
64
65
|
#
|
65
66
|
# @since 2.1.0
|
66
67
|
def payload
|
67
|
-
{
|
68
|
+
{
|
69
|
+
command_name: 'insert',
|
70
|
+
database_name: @database,
|
71
|
+
command: upconverter.command,
|
72
|
+
request_id: request_id
|
73
|
+
}
|
68
74
|
end
|
69
75
|
|
70
76
|
private
|
71
77
|
|
78
|
+
attr_reader :upconverter
|
79
|
+
|
72
80
|
# The operation code required to specify an Insert message.
|
73
81
|
# @return [Fixnum] the operation code.
|
74
82
|
def op_code
|
@@ -89,6 +97,70 @@ module Mongo
|
|
89
97
|
# @!attribute
|
90
98
|
# @return [Array<Hash>] The documents to insert.
|
91
99
|
field :documents, Document, true
|
100
|
+
|
101
|
+
# Converts legacy insert messages to the appropriare OP_COMMAND style
|
102
|
+
# message.
|
103
|
+
#
|
104
|
+
# @since 2.1.0
|
105
|
+
class Upconverter
|
106
|
+
|
107
|
+
# Insert field constant.
|
108
|
+
#
|
109
|
+
# @since 2.1.0
|
110
|
+
INSERT = 'insert'.freeze
|
111
|
+
|
112
|
+
# Documents field constant.
|
113
|
+
#
|
114
|
+
# @since 2.1.0
|
115
|
+
DOCUMENTS = 'documents'.freeze
|
116
|
+
|
117
|
+
# Write concern field constant.
|
118
|
+
#
|
119
|
+
# @since 2.1.0
|
120
|
+
WRITE_CONCERN = 'writeConcern'.freeze
|
121
|
+
|
122
|
+
# @return [ String ] collection The name of the collection.
|
123
|
+
attr_reader :collection
|
124
|
+
|
125
|
+
# @return [ Array<BSON::Document> ] documents The documents to insert.
|
126
|
+
attr_reader :documents
|
127
|
+
|
128
|
+
# @return [ Hash ] options The options.
|
129
|
+
attr_reader :options
|
130
|
+
|
131
|
+
# Instantiate the upconverter.
|
132
|
+
#
|
133
|
+
# @example Instantiate the upconverter.
|
134
|
+
# Upconverter.new('users', documents)
|
135
|
+
#
|
136
|
+
# @param [ String ] collection The name of the collection.
|
137
|
+
# @param [ Array<BSON::Document> ] documents The documents.
|
138
|
+
# @param [ Hash ] options The options.
|
139
|
+
#
|
140
|
+
# @since 2.1.0
|
141
|
+
def initialize(collection, documents, options)
|
142
|
+
@collection = collection
|
143
|
+
@documents = documents
|
144
|
+
@options = options
|
145
|
+
end
|
146
|
+
|
147
|
+
# Get the upconverted command.
|
148
|
+
#
|
149
|
+
# @example Get the command.
|
150
|
+
# upconverter.command
|
151
|
+
#
|
152
|
+
# @return [ BSON::Document ] The upconverted command.
|
153
|
+
#
|
154
|
+
# @since 2.1.0
|
155
|
+
def command
|
156
|
+
document = BSON::Document.new
|
157
|
+
document.store(INSERT, collection)
|
158
|
+
document.store(DOCUMENTS, documents)
|
159
|
+
document.store(Message::ORDERED, options.fetch(:ordered, true))
|
160
|
+
document.merge!(WRITE_CONCERN => options[:write_concern].options) if options[:write_concern]
|
161
|
+
document
|
162
|
+
end
|
163
|
+
end
|
92
164
|
end
|
93
165
|
end
|
94
166
|
end
|
@@ -28,11 +28,14 @@ module Mongo
|
|
28
28
|
# @example Kill the cursor on the server with id 1.
|
29
29
|
# KillCursors.new([1])
|
30
30
|
#
|
31
|
-
# @param
|
32
|
-
# @param
|
33
|
-
|
31
|
+
# @param [ Mongo::Database ] collection The collection.
|
32
|
+
# @param [ Mongo::Database ] database The database.
|
33
|
+
# @param [ Array<Fixnum> ] cursor_ids The cursor ids to kill.
|
34
|
+
def initialize(collection, database, cursor_ids)
|
35
|
+
@database = database
|
34
36
|
@cursor_ids = cursor_ids
|
35
37
|
@id_count = @cursor_ids.size
|
38
|
+
@upconverter = Upconverter.new(collection, cursor_ids)
|
36
39
|
end
|
37
40
|
|
38
41
|
# Return the event payload for monitoring.
|
@@ -44,11 +47,18 @@ module Mongo
|
|
44
47
|
#
|
45
48
|
# @since 2.1.0
|
46
49
|
def payload
|
47
|
-
{
|
50
|
+
{
|
51
|
+
command_name: 'killCursors',
|
52
|
+
database_name: @database,
|
53
|
+
command: upconverter.command,
|
54
|
+
request_id: request_id
|
55
|
+
}
|
48
56
|
end
|
49
57
|
|
50
58
|
private
|
51
59
|
|
60
|
+
attr_reader :upconverter
|
61
|
+
|
52
62
|
# The operation code required to specify +KillCursors+ message.
|
53
63
|
# @return [Fixnum] the operation code.
|
54
64
|
def op_code
|
@@ -65,6 +75,58 @@ module Mongo
|
|
65
75
|
# @!attribute
|
66
76
|
# @return [Array<Fixnum>] Cursors to kill.
|
67
77
|
field :cursor_ids, Int64, true
|
78
|
+
|
79
|
+
# Converts legacy insert messages to the appropriare OP_COMMAND style
|
80
|
+
# message.
|
81
|
+
#
|
82
|
+
# @since 2.1.0
|
83
|
+
class Upconverter
|
84
|
+
|
85
|
+
# The kill cursors constant.
|
86
|
+
#
|
87
|
+
# @since 2.2.0
|
88
|
+
KILL_CURSORS = 'killCursors'.freeze
|
89
|
+
|
90
|
+
# The cursors constant.
|
91
|
+
#
|
92
|
+
# @since 2.2.0
|
93
|
+
CURSORS = 'cursors'.freeze
|
94
|
+
|
95
|
+
# @return [ String ] collection The name of the collection.
|
96
|
+
attr_reader :collection
|
97
|
+
|
98
|
+
# @return [ Array<Integer> ] cursor_ids The cursor ids.
|
99
|
+
attr_reader :cursor_ids
|
100
|
+
|
101
|
+
# Instantiate the upconverter.
|
102
|
+
#
|
103
|
+
# @example Instantiate the upconverter.
|
104
|
+
# Upconverter.new('users', [ 1, 2, 3 ])
|
105
|
+
#
|
106
|
+
# @param [ String ] collection The name of the collection.
|
107
|
+
# @param [ Array<Integer> ] cursor_ids The cursor ids.
|
108
|
+
#
|
109
|
+
# @since 2.1.0
|
110
|
+
def initialize(collection, cursor_ids)
|
111
|
+
@collection = collection
|
112
|
+
@cursor_ids = cursor_ids
|
113
|
+
end
|
114
|
+
|
115
|
+
# Get the upconverted command.
|
116
|
+
#
|
117
|
+
# @example Get the command.
|
118
|
+
# upconverter.command
|
119
|
+
#
|
120
|
+
# @return [ BSON::Document ] The upconverted command.
|
121
|
+
#
|
122
|
+
# @since 2.1.0
|
123
|
+
def command
|
124
|
+
document = BSON::Document.new
|
125
|
+
document.store(KILL_CURSORS, collection)
|
126
|
+
document.store(CURSORS, cursor_ids)
|
127
|
+
document
|
128
|
+
end
|
129
|
+
end
|
68
130
|
end
|
69
131
|
end
|
70
132
|
end
|