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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d2c9b3e878a211c1145f6cbe09912ac0fa3c6463
|
4
|
+
data.tar.gz: d18c8e33629e8915fab3fb76edefb8cc631f65af
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a6ded8b81178ac9561d5f9a3a8ec83edb31dec5528b8365e83f7d24b1b673e23276c1061956db19879d10feb602dacfeb34bbc7f51e5875fd4593ebfea0aa1c0
|
7
|
+
data.tar.gz: 9431cb7dbb2b2b6a18292f454d84835ddbcee391f2a886bd93d398d3f9190a199f9d7a0f6fc2fc27eb95d32b59d900e6fc09317c2b66ec797fc12a42dabaf87c
|
checksums.yaml.gz.sig
CHANGED
data/lib/mongo/address/ipv4.rb
CHANGED
@@ -35,6 +35,11 @@ module Mongo
|
|
35
35
|
# @since 2.0.0
|
36
36
|
MATCH = Regexp.new('/\./').freeze
|
37
37
|
|
38
|
+
# Split value constant.
|
39
|
+
#
|
40
|
+
# @since 2.1.0
|
41
|
+
SPLIT = ':'.freeze
|
42
|
+
|
38
43
|
# Parse an IPv4 address into its host and port.
|
39
44
|
#
|
40
45
|
# @example Parse the address.
|
@@ -46,7 +51,7 @@ module Mongo
|
|
46
51
|
#
|
47
52
|
# @since 2.0.0
|
48
53
|
def self.parse(address)
|
49
|
-
parts = address.split(
|
54
|
+
parts = address.split(SPLIT)
|
50
55
|
host = parts[0]
|
51
56
|
port = (parts[1] || 27017).to_i
|
52
57
|
[ host, port ]
|
data/lib/mongo/address/unix.rb
CHANGED
@@ -60,7 +60,7 @@ module Mongo
|
|
60
60
|
# Get a socket for the provided address type, given the options.
|
61
61
|
#
|
62
62
|
# @example Get a Unix socket.
|
63
|
-
#
|
63
|
+
# address.socket(5)
|
64
64
|
#
|
65
65
|
# @param [ Float ] timeout The socket timeout.
|
66
66
|
# @param [ Hash ] ssl_options SSL options - ignored.
|
@@ -69,7 +69,7 @@ module Mongo
|
|
69
69
|
#
|
70
70
|
# @since 2.0.0
|
71
71
|
def socket(timeout, ssl_options = {})
|
72
|
-
Socket::Unix.new(host, timeout
|
72
|
+
Socket::Unix.new(host, timeout)
|
73
73
|
end
|
74
74
|
end
|
75
75
|
end
|
data/lib/mongo/address.rb
CHANGED
@@ -28,10 +28,16 @@ module Mongo
|
|
28
28
|
# Mapping from socket family to resolver class.
|
29
29
|
#
|
30
30
|
# @since 2.0.0
|
31
|
-
FAMILY_MAP = {
|
32
|
-
|
33
|
-
|
34
|
-
|
31
|
+
FAMILY_MAP = {
|
32
|
+
::Socket::PF_UNIX => Unix,
|
33
|
+
::Socket::AF_INET6 => IPv6,
|
34
|
+
::Socket::AF_INET => IPv4
|
35
|
+
}.freeze
|
36
|
+
|
37
|
+
# The localhost constant.
|
38
|
+
#
|
39
|
+
# @since 2.1.0
|
40
|
+
LOCALHOST = 'localhost'.freeze
|
35
41
|
|
36
42
|
# @return [ String ] seed The seed address.
|
37
43
|
attr_reader :seed
|
@@ -144,14 +150,16 @@ module Mongo
|
|
144
150
|
private
|
145
151
|
|
146
152
|
def initialize_resolver!(timeout, ssl_options)
|
147
|
-
|
153
|
+
return Unix.new(seed.downcase) if seed.downcase =~ Unix::MATCH
|
154
|
+
|
155
|
+
family = (host == LOCALHOST) ? ::Socket::AF_INET : ::Socket::AF_UNSPEC
|
148
156
|
error = nil
|
149
|
-
::Socket.getaddrinfo(host, nil, family, ::Socket::SOCK_STREAM).
|
157
|
+
::Socket.getaddrinfo(host, nil, family, ::Socket::SOCK_STREAM).each do |info|
|
150
158
|
begin
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
rescue IOError, SystemCallError => e
|
159
|
+
res = FAMILY_MAP[info[4]].new(info[3], port, host)
|
160
|
+
res.socket(timeout, ssl_options).connect!.close
|
161
|
+
return res
|
162
|
+
rescue IOError, SystemCallError, Error::SocketError => e
|
155
163
|
error = e
|
156
164
|
end
|
157
165
|
end
|
@@ -111,7 +111,7 @@ module Mongo
|
|
111
111
|
private
|
112
112
|
|
113
113
|
def validate!(reply)
|
114
|
-
raise Unauthorized.new(user) if reply.documents[0][
|
114
|
+
raise Unauthorized.new(user) if reply.documents[0][Operation::Result::OK] != 1
|
115
115
|
@nonce = reply.documents[0][Auth::NONCE]
|
116
116
|
@reply = reply
|
117
117
|
end
|
@@ -25,7 +25,7 @@ module Mongo
|
|
25
25
|
# The login message.
|
26
26
|
#
|
27
27
|
# @since 2.0.0
|
28
|
-
LOGIN = {
|
28
|
+
LOGIN = { saslStart: 1, autoAuthorize: 1 }.freeze
|
29
29
|
|
30
30
|
# @return [ Protocol::Reply ] reply The current reply in the
|
31
31
|
# conversation.
|
@@ -63,7 +63,7 @@ module Mongo
|
|
63
63
|
Protocol::Query.new(
|
64
64
|
Auth::EXTERNAL,
|
65
65
|
Database::COMMAND,
|
66
|
-
LOGIN.merge(
|
66
|
+
LOGIN.merge(payload: payload, mechanism: LDAP::MECHANISM),
|
67
67
|
limit: -1
|
68
68
|
)
|
69
69
|
end
|
@@ -82,8 +82,12 @@ module Mongo
|
|
82
82
|
|
83
83
|
private
|
84
84
|
|
85
|
+
def payload
|
86
|
+
BSON::Binary.new("\x00#{user.name}\x00#{user.password}")
|
87
|
+
end
|
88
|
+
|
85
89
|
def validate!(reply)
|
86
|
-
raise Unauthorized.new(user) if reply.documents[0][
|
90
|
+
raise Unauthorized.new(user) if reply.documents[0][Operation::Result::OK] != 1
|
87
91
|
@reply = reply
|
88
92
|
end
|
89
93
|
end
|
@@ -417,7 +417,7 @@ module Mongo
|
|
417
417
|
#
|
418
418
|
# @since 2.0.0
|
419
419
|
def without_proof
|
420
|
-
@
|
420
|
+
@without_proof ||= "c=biws,r=#{rnonce}"
|
421
421
|
end
|
422
422
|
|
423
423
|
# XOR operation for two strings.
|
@@ -429,9 +429,15 @@ module Mongo
|
|
429
429
|
first.bytes.zip(second.bytes).map{ |(a,b)| (a ^ b).chr }.join('')
|
430
430
|
end
|
431
431
|
|
432
|
+
def compare_digest(a, b)
|
433
|
+
check = a.bytesize ^ b.bytesize
|
434
|
+
a.bytes.zip(b.bytes){ |x, y| check |= x ^ y.to_i }
|
435
|
+
check == 0
|
436
|
+
end
|
437
|
+
|
432
438
|
def validate_final_message!(reply)
|
433
439
|
validate!(reply)
|
434
|
-
unless verifier
|
440
|
+
unless compare_digest(verifier, server_signature)
|
435
441
|
raise Error::InvalidSignature.new(verifier, server_signature)
|
436
442
|
end
|
437
443
|
end
|
@@ -442,7 +448,7 @@ module Mongo
|
|
442
448
|
end
|
443
449
|
|
444
450
|
def validate!(reply)
|
445
|
-
raise Unauthorized.new(user) unless reply.documents[0][
|
451
|
+
raise Unauthorized.new(user) unless reply.documents[0][Operation::Result::OK] == 1
|
446
452
|
@reply = reply
|
447
453
|
end
|
448
454
|
end
|
data/lib/mongo/auth/user/view.rb
CHANGED
@@ -90,13 +90,34 @@ module Mongo
|
|
90
90
|
def update(user_or_name, options = {})
|
91
91
|
user = generate(user_or_name, options)
|
92
92
|
Operation::Write::UpdateUser.new(
|
93
|
-
|
94
|
-
|
93
|
+
user: user,
|
94
|
+
db_name: database.name
|
95
95
|
).execute(next_primary.context)
|
96
96
|
end
|
97
97
|
|
98
|
+
# Get info for a particular user in the database.
|
99
|
+
#
|
100
|
+
# @example Get a particular user's info.
|
101
|
+
# view.info('emily')
|
102
|
+
#
|
103
|
+
# @param [ String ] name The user name.
|
104
|
+
#
|
105
|
+
# @return [ Hash ] A document containing information on a particular user.
|
106
|
+
#
|
107
|
+
# @since 2.1.0
|
108
|
+
def info(name)
|
109
|
+
user_query(name).documents
|
110
|
+
end
|
111
|
+
|
98
112
|
private
|
99
113
|
|
114
|
+
def user_query(name)
|
115
|
+
Operation::UserQuery.new(
|
116
|
+
user_name: name,
|
117
|
+
db_name: database.name
|
118
|
+
).execute(next_primary.context)
|
119
|
+
end
|
120
|
+
|
100
121
|
def generate(user, options)
|
101
122
|
user.is_a?(String) ? Auth::User.new({ user: user }.merge(options)) : user
|
102
123
|
end
|
@@ -0,0 +1,51 @@
|
|
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
|
+
class BulkWrite
|
17
|
+
|
18
|
+
# Defines behaviour around combiners
|
19
|
+
#
|
20
|
+
# @api private
|
21
|
+
#
|
22
|
+
# @since 2.1.0
|
23
|
+
module Combineable
|
24
|
+
|
25
|
+
# @return [ Array<Hash, BSON::Document> ] requests The provided requests.
|
26
|
+
attr_reader :requests
|
27
|
+
|
28
|
+
# Create the ordered combiner.
|
29
|
+
#
|
30
|
+
# @api private
|
31
|
+
#
|
32
|
+
# @example Create the ordered combiner.
|
33
|
+
# OrderedCombiner.new([{ insert_one: { _id: 0 }}])
|
34
|
+
#
|
35
|
+
# @param [ Array<Hash, BSON::Document> ] requests The bulk requests.
|
36
|
+
#
|
37
|
+
# @since 2.1.0
|
38
|
+
def initialize(requests)
|
39
|
+
@requests = requests
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def combine_requests(ops)
|
45
|
+
requests.reduce(ops) do |operations, request|
|
46
|
+
add(operations, request.keys.first, request.values.first)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,55 @@
|
|
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
|
+
class BulkWrite
|
17
|
+
|
18
|
+
# Combines groups of bulk write operations in order.
|
19
|
+
#
|
20
|
+
# @api private
|
21
|
+
#
|
22
|
+
# @since 2.1.0
|
23
|
+
class OrderedCombiner
|
24
|
+
include Transformable
|
25
|
+
include Validatable
|
26
|
+
include Combineable
|
27
|
+
|
28
|
+
# Combine the requests in order.
|
29
|
+
#
|
30
|
+
# @api private
|
31
|
+
#
|
32
|
+
# @example Combine the requests.
|
33
|
+
# combiner.combine
|
34
|
+
#
|
35
|
+
# @return [ Array<Hash> ] The combined requests.
|
36
|
+
#
|
37
|
+
# @since 2.1.0
|
38
|
+
def combine
|
39
|
+
combine_requests([])
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def add(operations, name, document)
|
45
|
+
operations.push({ name => []}) if next_group?(name, operations)
|
46
|
+
operations[-1][name].push(transform(name, document))
|
47
|
+
operations
|
48
|
+
end
|
49
|
+
|
50
|
+
def next_group?(name, operations)
|
51
|
+
!operations[-1] || !operations[-1].key?(name)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,191 @@
|
|
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
|
+
class BulkWrite
|
17
|
+
|
18
|
+
# Wraps a series of bulk write operations in a result object.
|
19
|
+
#
|
20
|
+
# @since 2.0.6
|
21
|
+
class Result
|
22
|
+
|
23
|
+
# Constant for number removed.
|
24
|
+
#
|
25
|
+
# @since 2.1.0
|
26
|
+
REMOVED_COUNT = 'n_removed'.freeze
|
27
|
+
|
28
|
+
# Constant for number inserted.
|
29
|
+
#
|
30
|
+
# @since 2.1.0
|
31
|
+
INSERTED_COUNT = 'n_inserted'.freeze
|
32
|
+
|
33
|
+
# Constant for inserted ids.
|
34
|
+
#
|
35
|
+
# @since 2.1.0
|
36
|
+
INSERTED_IDS = 'inserted_ids'.freeze
|
37
|
+
|
38
|
+
# Constant for number matched.
|
39
|
+
#
|
40
|
+
# @since 2.1.0
|
41
|
+
MATCHED_COUNT = 'n_matched'.freeze
|
42
|
+
|
43
|
+
# Constant for number modified.
|
44
|
+
#
|
45
|
+
# @since 2.1.0
|
46
|
+
MODIFIED_COUNT = 'n_modified'.freeze
|
47
|
+
|
48
|
+
# Constant for upserted.
|
49
|
+
#
|
50
|
+
# @since 2.1.0
|
51
|
+
UPSERTED = 'upserted'.freeze
|
52
|
+
|
53
|
+
# Constant for number upserted.
|
54
|
+
#
|
55
|
+
# @since 2.1.0
|
56
|
+
UPSERTED_COUNT = 'n_upserted'.freeze
|
57
|
+
|
58
|
+
# Constant for upserted ids.
|
59
|
+
#
|
60
|
+
# @since 2.1.0
|
61
|
+
UPSERTED_IDS = 'upserted_ids'.freeze
|
62
|
+
|
63
|
+
# The fields contained in the result document returned from executing the
|
64
|
+
# operations.
|
65
|
+
#
|
66
|
+
# @since 2.1.0.
|
67
|
+
FIELDS = [
|
68
|
+
INSERTED_COUNT,
|
69
|
+
REMOVED_COUNT,
|
70
|
+
MODIFIED_COUNT,
|
71
|
+
UPSERTED_COUNT,
|
72
|
+
MATCHED_COUNT,
|
73
|
+
Operation::Result::N
|
74
|
+
].freeze
|
75
|
+
|
76
|
+
# Returns the number of documents deleted.
|
77
|
+
#
|
78
|
+
# @example Get the number of deleted documents.
|
79
|
+
# result.deleted_count
|
80
|
+
#
|
81
|
+
# @return [ Integer ] The number deleted.
|
82
|
+
#
|
83
|
+
# @since 2.1.0
|
84
|
+
def deleted_count
|
85
|
+
@results[REMOVED_COUNT]
|
86
|
+
end
|
87
|
+
|
88
|
+
# Create the new result object from the results document.
|
89
|
+
#
|
90
|
+
# @example Create the new result.
|
91
|
+
# Result.new({ 'n_inserted' => 10 })
|
92
|
+
#
|
93
|
+
# @param [ BSON::Document, Hash ] results The results document.
|
94
|
+
#
|
95
|
+
# @since 2.1.0
|
96
|
+
def initialize(results)
|
97
|
+
@results = results
|
98
|
+
end
|
99
|
+
|
100
|
+
# Returns the number of documents inserted.
|
101
|
+
#
|
102
|
+
# @example Get the number of inserted documents.
|
103
|
+
# result.inserted_count
|
104
|
+
#
|
105
|
+
# @return [ Integer ] The number inserted.
|
106
|
+
#
|
107
|
+
# @since 2.1.0
|
108
|
+
def inserted_count
|
109
|
+
@results[INSERTED_COUNT]
|
110
|
+
end
|
111
|
+
|
112
|
+
# Get the inserted document ids, if the operation has inserts.
|
113
|
+
#
|
114
|
+
# @example Get the inserted ids.
|
115
|
+
# result.inserted_ids
|
116
|
+
#
|
117
|
+
# @return [ Array<BSON::ObjectId> ] The inserted ids.
|
118
|
+
#
|
119
|
+
# @since 2.1.0
|
120
|
+
def inserted_ids
|
121
|
+
@results[INSERTED_IDS]
|
122
|
+
end
|
123
|
+
|
124
|
+
# Returns the number of documents matched.
|
125
|
+
#
|
126
|
+
# @example Get the number of matched documents.
|
127
|
+
# result.matched_count
|
128
|
+
#
|
129
|
+
# @return [ Integer ] The number matched.
|
130
|
+
#
|
131
|
+
# @since 2.1.0
|
132
|
+
def matched_count
|
133
|
+
@results[MATCHED_COUNT]
|
134
|
+
end
|
135
|
+
|
136
|
+
# Returns the number of documents modified.
|
137
|
+
#
|
138
|
+
# @example Get the number of modified documents.
|
139
|
+
# result.modified_count
|
140
|
+
#
|
141
|
+
# @return [ Integer ] The number modified.
|
142
|
+
#
|
143
|
+
# @since 2.1.0
|
144
|
+
def modified_count
|
145
|
+
@results[MODIFIED_COUNT]
|
146
|
+
end
|
147
|
+
|
148
|
+
# Returns the number of documents upserted.
|
149
|
+
#
|
150
|
+
# @example Get the number of upserted documents.
|
151
|
+
# result.upserted_count
|
152
|
+
#
|
153
|
+
# @return [ Integer ] The number upserted.
|
154
|
+
#
|
155
|
+
# @since 2.1.0
|
156
|
+
def upserted_count
|
157
|
+
@results[UPSERTED_COUNT]
|
158
|
+
end
|
159
|
+
|
160
|
+
# Get the upserted document ids, if the operation has inserts.
|
161
|
+
#
|
162
|
+
# @example Get the upserted ids.
|
163
|
+
# result.upserted_ids
|
164
|
+
#
|
165
|
+
# @return [ Array<BSON::ObjectId> ] The upserted ids.
|
166
|
+
#
|
167
|
+
# @since 2.1.0
|
168
|
+
def upserted_ids
|
169
|
+
@results[UPSERTED_IDS]
|
170
|
+
end
|
171
|
+
|
172
|
+
# Validates the bulk write result.
|
173
|
+
#
|
174
|
+
# @example Validate the result.
|
175
|
+
# result.validate!
|
176
|
+
#
|
177
|
+
# @raise [ Error::BulkWriteError ] If the result contains errors.
|
178
|
+
#
|
179
|
+
# @return [ Result ] The result.
|
180
|
+
#
|
181
|
+
# @since 2.1.0
|
182
|
+
def validate!
|
183
|
+
if @results[Error::WRITE_ERRORS] || @results[Error::WRITE_CONCERN_ERRORS]
|
184
|
+
raise Error::BulkWriteError.new(@results)
|
185
|
+
else
|
186
|
+
self
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
@@ -0,0 +1,117 @@
|
|
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
|
+
class BulkWrite
|
17
|
+
|
18
|
+
# Combines bulk write results together.
|
19
|
+
#
|
20
|
+
# @api private
|
21
|
+
#
|
22
|
+
# @since 2.1.0
|
23
|
+
class ResultCombiner
|
24
|
+
|
25
|
+
# @return [ Integer ] count The count of documents in the entire batch.
|
26
|
+
attr_reader :count
|
27
|
+
|
28
|
+
# @return [ Hash ] results The results hash.
|
29
|
+
attr_reader :results
|
30
|
+
|
31
|
+
# Create the new result combiner.
|
32
|
+
#
|
33
|
+
# @api private
|
34
|
+
#
|
35
|
+
# @example Create the result combiner.
|
36
|
+
# ResultCombiner.new
|
37
|
+
#
|
38
|
+
# @since 2.1.0
|
39
|
+
def initialize
|
40
|
+
@results = {}
|
41
|
+
@count = 0
|
42
|
+
end
|
43
|
+
|
44
|
+
# Combines a result into the overall results.
|
45
|
+
#
|
46
|
+
# @api private
|
47
|
+
#
|
48
|
+
# @example Combine the result.
|
49
|
+
# combiner.combine!(result, count)
|
50
|
+
#
|
51
|
+
# @param [ Operation::Result ] result The result to combine.
|
52
|
+
# @param [ Integer ] count The count of requests in the batch.
|
53
|
+
#
|
54
|
+
# @since 2.1.0
|
55
|
+
def combine!(result, count)
|
56
|
+
combine_counts!(result)
|
57
|
+
combine_ids!(result)
|
58
|
+
combine_errors!(result)
|
59
|
+
@count += count
|
60
|
+
end
|
61
|
+
|
62
|
+
# Get the final result.
|
63
|
+
#
|
64
|
+
# @api private
|
65
|
+
#
|
66
|
+
# @example Get the final result.
|
67
|
+
# combinator.result
|
68
|
+
#
|
69
|
+
# @return [ BulkWrite::Result ] The final result.
|
70
|
+
#
|
71
|
+
# @since 2.1.0
|
72
|
+
def result
|
73
|
+
BulkWrite::Result.new(results).validate!
|
74
|
+
end
|
75
|
+
|
76
|
+
private
|
77
|
+
|
78
|
+
def combine_counts!(result)
|
79
|
+
Result::FIELDS.each do |field|
|
80
|
+
if result.respond_to?(field)
|
81
|
+
results.merge!(field => (results[field] || 0) + result.send(field))
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def combine_ids!(result)
|
87
|
+
if result.respond_to?(Result::INSERTED_IDS)
|
88
|
+
results.merge!(Result::INSERTED_IDS => result.inserted_ids)
|
89
|
+
end
|
90
|
+
if result.respond_to?(Result::UPSERTED)
|
91
|
+
results.merge!(Result::UPSERTED_IDS => result.upserted.map{ |doc| doc['_id'] })
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def combine_errors!(result)
|
96
|
+
combine_write_errors!(result)
|
97
|
+
combine_write_concern_errors!(result)
|
98
|
+
end
|
99
|
+
|
100
|
+
def combine_write_errors!(result)
|
101
|
+
if write_errors = result.aggregate_write_errors(count)
|
102
|
+
results.merge!(
|
103
|
+
Error::WRITE_ERRORS => ((results[Error::WRITE_ERRORS] || []) << write_errors).flatten
|
104
|
+
)
|
105
|
+
else
|
106
|
+
result.validate!
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def combine_write_concern_errors!(result)
|
111
|
+
if write_concern_errors = result.aggregate_write_concern_errors(count)
|
112
|
+
results.merge!(Error::WRITE_CONCERN_ERRORS => write_concern_errors)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|