mongo 2.5.3 → 2.6.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 +5 -5
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/LICENSE +1 -1
- data/README.md +3 -2
- data/lib/mongo.rb +2 -2
- data/lib/mongo/address.rb +10 -2
- data/lib/mongo/address/ipv4.rb +1 -1
- data/lib/mongo/address/ipv6.rb +26 -5
- data/lib/mongo/address/unix.rb +1 -1
- data/lib/mongo/auth.rb +10 -3
- data/lib/mongo/auth/cr.rb +4 -1
- data/lib/mongo/auth/cr/conversation.rb +4 -1
- data/lib/mongo/auth/ldap.rb +1 -1
- data/lib/mongo/auth/ldap/conversation.rb +1 -1
- data/lib/mongo/auth/roles.rb +1 -1
- data/lib/mongo/auth/scram.rb +24 -7
- data/lib/mongo/auth/scram/conversation.rb +52 -19
- data/lib/mongo/auth/stringprep.rb +114 -0
- data/lib/mongo/auth/stringprep/profiles/sasl.rb +73 -0
- data/lib/mongo/auth/stringprep/tables.rb +3232 -0
- data/lib/mongo/auth/stringprep/unicode_normalize/normalize.rb +174 -0
- data/lib/mongo/auth/stringprep/unicode_normalize/tables.rb +1170 -0
- data/lib/mongo/auth/user.rb +14 -3
- data/lib/mongo/auth/user/view.rb +1 -1
- data/lib/mongo/auth/x509.rb +1 -1
- data/lib/mongo/auth/x509/conversation.rb +1 -1
- data/lib/mongo/bson.rb +1 -1
- data/lib/mongo/bulk_write.rb +8 -8
- data/lib/mongo/bulk_write/combineable.rb +1 -1
- data/lib/mongo/bulk_write/ordered_combiner.rb +1 -1
- data/lib/mongo/bulk_write/result.rb +1 -1
- data/lib/mongo/bulk_write/result_combiner.rb +4 -4
- data/lib/mongo/bulk_write/transformable.rb +1 -1
- data/lib/mongo/bulk_write/unordered_combiner.rb +1 -1
- data/lib/mongo/bulk_write/validatable.rb +1 -1
- data/lib/mongo/client.rb +115 -24
- data/lib/mongo/cluster.rb +17 -10
- data/lib/mongo/cluster/app_metadata.rb +7 -1
- data/lib/mongo/cluster/periodic_executor.rb +1 -1
- data/lib/mongo/cluster/reapers/socket_reaper.rb +1 -1
- data/lib/mongo/cluster/topology.rb +12 -2
- data/lib/mongo/cluster/topology/replica_set.rb +9 -1
- data/lib/mongo/cluster/topology/sharded.rb +1 -1
- data/lib/mongo/cluster/topology/single.rb +1 -1
- data/lib/mongo/cluster/topology/unknown.rb +1 -1
- data/lib/mongo/collection.rb +75 -19
- data/lib/mongo/collection/view.rb +1 -1
- data/lib/mongo/collection/view/aggregation.rb +1 -1
- data/lib/mongo/collection/view/builder.rb +1 -1
- data/lib/mongo/collection/view/builder/aggregation.rb +3 -3
- data/lib/mongo/collection/view/builder/find_command.rb +1 -1
- data/lib/mongo/collection/view/builder/flags.rb +1 -1
- data/lib/mongo/collection/view/builder/map_reduce.rb +1 -1
- data/lib/mongo/collection/view/builder/modifiers.rb +1 -1
- data/lib/mongo/collection/view/builder/op_query.rb +1 -1
- data/lib/mongo/collection/view/change_stream.rb +193 -17
- data/lib/mongo/collection/view/change_stream/retryable.rb +3 -20
- data/lib/mongo/collection/view/explainable.rb +1 -1
- data/lib/mongo/collection/view/immutable.rb +1 -1
- data/lib/mongo/collection/view/iterable.rb +2 -2
- data/lib/mongo/collection/view/map_reduce.rb +1 -1
- data/lib/mongo/collection/view/readable.rb +108 -29
- data/lib/mongo/collection/view/writable.rb +3 -3
- data/lib/mongo/cursor.rb +44 -4
- data/lib/mongo/cursor/builder.rb +1 -1
- data/lib/mongo/cursor/builder/get_more_command.rb +1 -1
- data/lib/mongo/cursor/builder/kill_cursors_command.rb +1 -1
- data/lib/mongo/cursor/builder/op_get_more.rb +1 -1
- data/lib/mongo/cursor/builder/op_kill_cursors.rb +1 -1
- data/lib/mongo/database.rb +46 -3
- data/lib/mongo/database/view.rb +11 -11
- data/lib/mongo/dbref.rb +1 -1
- data/lib/mongo/error.rb +57 -1
- data/lib/mongo/error/bulk_write_error.rb +2 -2
- data/lib/mongo/error/change_stream_resumable.rb +37 -0
- data/lib/mongo/error/closed_stream.rb +1 -1
- data/lib/mongo/error/extra_file_chunk.rb +1 -1
- data/lib/mongo/error/failed_stringprep_validation.rb +38 -0
- data/lib/mongo/error/file_not_found.rb +1 -1
- data/lib/mongo/error/insufficient_iteration_count.rb +38 -0
- data/lib/mongo/error/invalid_application_name.rb +1 -1
- data/lib/mongo/error/invalid_bulk_operation.rb +1 -1
- data/lib/mongo/error/invalid_bulk_operation_type.rb +1 -1
- data/lib/mongo/error/invalid_collection_name.rb +1 -1
- data/lib/mongo/error/invalid_database_name.rb +1 -1
- data/lib/mongo/error/invalid_document.rb +1 -1
- data/lib/mongo/error/invalid_file.rb +1 -1
- data/lib/mongo/error/invalid_file_revision.rb +1 -1
- data/lib/mongo/error/invalid_min_pool_size.rb +1 -1
- data/lib/mongo/error/invalid_nonce.rb +1 -1
- data/lib/mongo/error/invalid_read_option.rb +35 -0
- data/lib/mongo/error/invalid_replacement_document.rb +1 -1
- data/lib/mongo/error/invalid_server_preference.rb +1 -1
- data/lib/mongo/error/invalid_session.rb +1 -1
- data/lib/mongo/error/invalid_signature.rb +1 -1
- data/lib/mongo/error/invalid_transaction_operation.rb +82 -0
- data/lib/mongo/error/invalid_txt_record.rb +1 -1
- data/lib/mongo/error/invalid_update_document.rb +1 -1
- data/lib/mongo/error/invalid_uri.rb +1 -1
- data/lib/mongo/error/invalid_write_concern.rb +1 -1
- data/lib/mongo/error/max_bson_size.rb +1 -1
- data/lib/mongo/error/max_message_size.rb +1 -1
- data/lib/mongo/error/mismatched_domain.rb +1 -1
- data/lib/mongo/error/missing_file_chunk.rb +1 -1
- data/lib/mongo/error/missing_resume_token.rb +1 -1
- data/lib/mongo/error/multi_index_drop.rb +1 -1
- data/lib/mongo/error/need_primary_server.rb +1 -1
- data/lib/mongo/error/no_server_available.rb +1 -1
- data/lib/mongo/error/no_srv_records.rb +1 -1
- data/lib/mongo/error/operation_failure.rb +108 -14
- data/lib/mongo/error/parser.rb +50 -1
- data/lib/mongo/error/socket_error.rb +5 -2
- data/lib/mongo/error/socket_timeout_error.rb +5 -2
- data/lib/mongo/error/unchangeable_collection_option.rb +1 -1
- data/lib/mongo/error/unexpected_chunk_length.rb +1 -1
- data/lib/mongo/error/unexpected_response.rb +1 -1
- data/lib/mongo/error/unknown_payload_type.rb +1 -1
- data/lib/mongo/error/unsupported_array_filters.rb +1 -1
- data/lib/mongo/error/unsupported_collation.rb +1 -1
- data/lib/mongo/error/unsupported_features.rb +1 -1
- data/lib/mongo/error/unsupported_message_type.rb +1 -1
- data/lib/mongo/error/write_retryable.rb +27 -0
- data/lib/mongo/event.rb +10 -9
- data/lib/mongo/event/base.rb +33 -0
- data/lib/mongo/event/description_changed.rb +2 -2
- data/lib/mongo/event/listeners.rb +1 -1
- data/lib/mongo/event/member_discovered.rb +4 -2
- data/lib/mongo/event/primary_elected.rb +2 -2
- data/lib/mongo/event/publisher.rb +1 -1
- data/lib/mongo/event/standalone_discovered.rb +2 -2
- data/lib/mongo/event/subscriber.rb +1 -1
- data/lib/mongo/grid.rb +1 -1
- data/lib/mongo/grid/file.rb +1 -1
- data/lib/mongo/grid/file/chunk.rb +3 -3
- data/lib/mongo/grid/file/info.rb +26 -3
- data/lib/mongo/grid/fs_bucket.rb +1 -1
- data/lib/mongo/grid/stream.rb +1 -1
- data/lib/mongo/grid/stream/read.rb +1 -1
- data/lib/mongo/grid/stream/write.rb +1 -1
- data/lib/mongo/index.rb +1 -1
- data/lib/mongo/index/view.rb +1 -1
- data/lib/mongo/loggable.rb +1 -1
- data/lib/mongo/logger.rb +1 -1
- data/lib/mongo/monitoring.rb +99 -62
- data/lib/mongo/monitoring/command_log_subscriber.rb +2 -2
- data/lib/mongo/monitoring/event.rb +2 -1
- data/lib/mongo/monitoring/event/command_failed.rb +19 -6
- data/lib/mongo/monitoring/event/command_started.rb +14 -3
- data/lib/mongo/monitoring/event/command_succeeded.rb +5 -3
- data/lib/mongo/monitoring/event/secure.rb +1 -1
- data/lib/mongo/monitoring/event/server_closed.rb +2 -2
- data/lib/mongo/monitoring/event/server_description_changed.rb +2 -2
- data/lib/mongo/monitoring/event/server_opening.rb +11 -2
- data/lib/mongo/monitoring/event/topology_changed.rb +13 -2
- data/lib/mongo/monitoring/event/topology_closed.rb +2 -2
- data/lib/mongo/monitoring/event/topology_opening.rb +11 -2
- data/lib/mongo/monitoring/publishable.rb +10 -6
- data/lib/mongo/monitoring/sdam_log_subscriber.rb +1 -1
- data/lib/mongo/monitoring/server_closed_log_subscriber.rb +1 -1
- data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +1 -1
- data/lib/mongo/monitoring/server_opening_log_subscriber.rb +1 -1
- data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +1 -1
- data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +1 -1
- data/lib/mongo/operation/aggregate/op_msg.rb +3 -0
- data/lib/mongo/operation/create/op_msg.rb +9 -0
- data/lib/mongo/operation/create_index/op_msg.rb +9 -0
- data/lib/mongo/operation/create_user/command.rb +1 -1
- data/lib/mongo/operation/create_user/op_msg.rb +10 -1
- data/lib/mongo/operation/delete/op_msg.rb +3 -0
- data/lib/mongo/operation/distinct/op_msg.rb +9 -0
- data/lib/mongo/operation/drop/op_msg.rb +9 -0
- data/lib/mongo/operation/drop_database/op_msg.rb +9 -0
- data/lib/mongo/operation/drop_index/op_msg.rb +9 -0
- data/lib/mongo/operation/explain/op_msg.rb +3 -0
- data/lib/mongo/operation/find/op_msg.rb +3 -0
- data/lib/mongo/operation/get_more.rb +1 -1
- data/lib/mongo/operation/get_more/command.rb +1 -1
- data/lib/mongo/operation/get_more/legacy.rb +1 -1
- data/lib/mongo/operation/get_more/op_msg.rb +3 -0
- data/lib/mongo/operation/indexes/op_msg.rb +3 -0
- data/lib/mongo/operation/indexes/result.rb +1 -1
- data/lib/mongo/operation/insert/bulk_result.rb +32 -2
- data/lib/mongo/operation/insert/op_msg.rb +3 -0
- data/lib/mongo/operation/insert/result.rb +1 -1
- data/lib/mongo/operation/kill_cursors/op_msg.rb +9 -0
- data/lib/mongo/operation/list_collections/op_msg.rb +3 -0
- data/lib/mongo/operation/list_collections/result.rb +5 -1
- data/lib/mongo/operation/map_reduce/op_msg.rb +3 -0
- data/lib/mongo/operation/map_reduce/result.rb +1 -1
- data/lib/mongo/operation/parallel_scan/op_msg.rb +3 -0
- data/lib/mongo/operation/remove_user/op_msg.rb +9 -0
- data/lib/mongo/operation/result.rb +27 -14
- data/lib/mongo/operation/shared/executable.rb +1 -0
- data/lib/mongo/operation/shared/sessions_supported.rb +78 -7
- data/lib/mongo/operation/shared/specifiable.rb +18 -2
- data/lib/mongo/operation/shared/write_concern_supported.rb +1 -1
- data/lib/mongo/operation/update/op_msg.rb +3 -0
- data/lib/mongo/operation/update_user/command.rb +1 -1
- data/lib/mongo/operation/update_user/op_msg.rb +10 -1
- data/lib/mongo/operation/users_info/op_msg.rb +3 -0
- data/lib/mongo/options.rb +1 -1
- data/lib/mongo/options/mapper.rb +1 -1
- data/lib/mongo/options/redacted.rb +1 -1
- data/lib/mongo/protocol/bit_vector.rb +1 -1
- data/lib/mongo/protocol/compressed.rb +1 -1
- data/lib/mongo/protocol/delete.rb +1 -1
- data/lib/mongo/protocol/get_more.rb +7 -7
- data/lib/mongo/protocol/insert.rb +1 -1
- data/lib/mongo/protocol/kill_cursors.rb +1 -1
- data/lib/mongo/protocol/message.rb +5 -5
- data/lib/mongo/protocol/msg.rb +9 -7
- data/lib/mongo/protocol/query.rb +1 -1
- data/lib/mongo/protocol/registry.rb +1 -1
- data/lib/mongo/protocol/reply.rb +10 -10
- data/lib/mongo/protocol/serializers.rb +1 -1
- data/lib/mongo/protocol/update.rb +1 -1
- data/lib/mongo/retryable.rb +22 -14
- data/lib/mongo/server.rb +1 -1
- data/lib/mongo/server/connectable.rb +1 -1
- data/lib/mongo/server/connection.rb +16 -4
- data/lib/mongo/server/connection_pool.rb +1 -1
- data/lib/mongo/server/connection_pool/queue.rb +1 -1
- data/lib/mongo/server/context.rb +1 -1
- data/lib/mongo/server/description.rb +14 -2
- data/lib/mongo/server/description/features.rb +10 -9
- data/lib/mongo/server/description/inspector.rb +1 -1
- data/lib/mongo/server/description/inspector/description_changed.rb +1 -1
- data/lib/mongo/server/description/inspector/member_discovered.rb +1 -1
- data/lib/mongo/server/description/inspector/primary_elected.rb +1 -1
- data/lib/mongo/server/description/inspector/standalone_discovered.rb +1 -1
- data/lib/mongo/server/monitor.rb +15 -3
- data/lib/mongo/server/monitor/connection.rb +1 -1
- data/lib/mongo/server_selector.rb +1 -1
- data/lib/mongo/server_selector/nearest.rb +1 -1
- data/lib/mongo/server_selector/primary.rb +1 -1
- data/lib/mongo/server_selector/primary_preferred.rb +1 -1
- data/lib/mongo/server_selector/secondary.rb +1 -1
- data/lib/mongo/server_selector/secondary_preferred.rb +1 -1
- data/lib/mongo/server_selector/selectable.rb +7 -2
- data/lib/mongo/session.rb +389 -12
- data/lib/mongo/session/server_session.rb +7 -2
- data/lib/mongo/session/session_pool.rb +1 -1
- data/lib/mongo/socket.rb +1 -1
- data/lib/mongo/socket/ssl.rb +1 -1
- data/lib/mongo/socket/tcp.rb +1 -1
- data/lib/mongo/socket/unix.rb +1 -1
- data/lib/mongo/uri.rb +6 -4
- data/lib/mongo/uri/srv_protocol.rb +1 -1
- data/lib/mongo/version.rb +2 -2
- data/lib/mongo/write_concern.rb +1 -1
- data/lib/mongo/write_concern/acknowledged.rb +1 -1
- data/lib/mongo/write_concern/normalizable.rb +1 -1
- data/lib/mongo/write_concern/unacknowledged.rb +1 -1
- data/mongo.gemspec +4 -1
- data/spec/atlas/atlas_connectivity_spec.rb +54 -0
- data/spec/integration/bulk_insert_spec.rb +78 -0
- data/spec/integration/change_stream_spec.rb +365 -0
- data/spec/integration/command_monitoring_spec.rb +92 -0
- data/spec/lite_spec_helper.rb +63 -0
- data/spec/mongo/address/ipv6_spec.rb +29 -1
- data/spec/mongo/address_spec.rb +34 -0
- data/spec/mongo/auth/scram/conversation_spec.rb +326 -120
- data/spec/mongo/auth/scram/negotiation_spec.rb +574 -0
- data/spec/mongo/auth/scram_spec.rb +107 -38
- data/spec/mongo/auth/stringprep/profiles/sasl_spec.rb +113 -0
- data/spec/mongo/auth/stringprep_spec.rb +188 -0
- data/spec/mongo/auth/user/view_spec.rb +5 -2
- data/spec/mongo/auth/user_spec.rb +1 -1
- data/spec/mongo/bulk_write/result_spec.rb +120 -0
- data/spec/mongo/bulk_write_spec.rb +42 -2
- data/spec/mongo/client_spec.rb +121 -9
- data/spec/mongo/cluster/app_metadata_spec.rb +14 -1
- data/spec/mongo/cluster/topology_spec.rb +1 -23
- data/spec/mongo/collection/view/change_stream_spec.rb +62 -180
- data/spec/mongo/collection_spec.rb +45 -12
- data/spec/mongo/cursor/builder/get_more_command_spec.rb +7 -7
- data/spec/mongo/cursor_spec.rb +2 -2
- data/spec/mongo/database_spec.rb +3 -3
- data/spec/mongo/docs_examples_spec.rb +194 -0
- data/spec/mongo/error/operation_failure_spec.rb +152 -0
- data/spec/mongo/error/parser_spec.rb +127 -0
- data/spec/mongo/grid/fs_bucket_spec.rb +32 -0
- data/spec/mongo/grid/stream/write_spec.rb +40 -1
- data/spec/mongo/monitoring/event/command_failed_spec.rb +30 -0
- data/spec/mongo/monitoring/event/command_started_spec.rb +26 -4
- data/spec/mongo/monitoring/event/command_succeeded_spec.rb +29 -7
- data/spec/mongo/monitoring_spec.rb +28 -3
- data/spec/mongo/protocol/get_more_spec.rb +2 -2
- data/spec/mongo/retryable_spec.rb +252 -34
- data/spec/mongo/retryable_writes_spec.rb +468 -544
- data/spec/mongo/server/connection_spec.rb +5 -5
- data/spec/mongo/server/description_spec.rb +23 -6
- data/spec/mongo/session/server_session_spec.rb +2 -2
- data/spec/mongo/session/session_pool_spec.rb +2 -2
- data/spec/mongo/transactions_examples_spec.rb +227 -0
- data/spec/mongo/transactions_spec.rb +44 -0
- data/spec/spec_helper.rb +135 -49
- data/spec/spec_tests/change_streams_spec.rb +42 -0
- data/spec/{mongo → spec_tests}/command_monitoring_spec.rb +8 -2
- data/spec/{mongo → spec_tests}/connection_string_spec.rb +1 -1
- data/spec/{mongo → spec_tests}/crud_spec.rb +5 -7
- data/spec/{mongo → spec_tests}/dns_seedlist_discovery_spec.rb +1 -1
- data/spec/{mongo → spec_tests}/gridfs_spec.rb +0 -0
- data/spec/{mongo → spec_tests}/max_staleness_spec.rb +0 -0
- data/spec/spec_tests/retryable_writes_spec.rb +78 -0
- data/spec/{mongo → spec_tests}/sdam_monitoring_spec.rb +4 -3
- data/spec/{mongo → spec_tests}/sdam_spec.rb +7 -7
- data/spec/{mongo → spec_tests}/server_selection_rtt_spec.rb +0 -0
- data/spec/{mongo → spec_tests}/server_selection_spec.rb +0 -0
- data/spec/support/authorization.rb +18 -6
- data/spec/support/change_streams.rb +265 -0
- data/spec/support/change_streams/operation.rb +62 -0
- data/spec/support/change_streams_tests/change-streams-errors.yml +53 -0
- data/spec/support/change_streams_tests/change-streams.yml +299 -0
- data/spec/support/command_monitoring.rb +1 -1
- data/spec/support/command_monitoring/bulkWrite.yml +4 -28
- data/spec/support/command_monitoring/command.yml +19 -0
- data/spec/support/command_monitoring/find.yml +17 -19
- data/spec/support/command_monitoring/insertMany.yml +2 -8
- data/spec/support/command_monitoring/unacknowledgedBulkWrite.yml +34 -0
- data/spec/support/connection_string.rb +1 -1
- data/spec/support/constraints.rb +56 -0
- data/spec/support/crud.rb +9 -4
- data/spec/support/crud/read.rb +24 -3
- data/spec/support/crud/write.rb +7 -2
- data/spec/support/crud_tests/read/count-collation.yml +12 -2
- data/spec/support/crud_tests/read/count.yml +43 -5
- data/spec/support/gridfs.rb +1 -1
- data/spec/support/primary_socket.rb +21 -0
- data/spec/support/retryable_writes_tests/bulkWrite-serverErrors.yml +90 -0
- data/spec/support/retryable_writes_tests/bulkWrite.yml +99 -1
- data/spec/support/retryable_writes_tests/deleteOne-serverErrors.yml +50 -0
- data/spec/support/retryable_writes_tests/deleteOne.yml +10 -1
- data/spec/support/retryable_writes_tests/findOneAndDelete-serverErrors.yml +50 -0
- data/spec/support/retryable_writes_tests/findOneAndDelete.yml +39 -30
- data/spec/support/retryable_writes_tests/findOneAndReplace-serverErrors.yml +54 -0
- data/spec/support/retryable_writes_tests/findOneAndReplace.yml +9 -0
- data/spec/support/retryable_writes_tests/findOneAndUpdate-serverErrors.yml +54 -0
- data/spec/support/retryable_writes_tests/findOneAndUpdate.yml +9 -0
- data/spec/support/retryable_writes_tests/insertMany-serverErrors.yml +59 -0
- data/spec/support/retryable_writes_tests/insertMany.yml +11 -6
- data/spec/support/retryable_writes_tests/insertOne-serverErrors.yml +471 -0
- data/spec/support/retryable_writes_tests/insertOne.yml +9 -0
- data/spec/support/retryable_writes_tests/replaceOne-serverErrors.yml +58 -0
- data/spec/support/retryable_writes_tests/replaceOne.yml +9 -0
- data/spec/support/retryable_writes_tests/updateOne-serverErrors.yml +58 -0
- data/spec/support/retryable_writes_tests/updateOne.yml +71 -53
- data/spec/support/sdam/rs/normalize_case_me.yml +100 -0
- data/spec/support/sdam/sharded/compatible.yml +38 -0
- data/spec/support/sdam/sharded/mongos_disconnect.yml +9 -3
- data/spec/support/sdam/sharded/multiple_mongoses.yml +6 -2
- data/spec/support/sdam/sharded/non_mongos_removed.yml +6 -2
- data/spec/support/sdam/sharded/too_new.yml +36 -0
- data/spec/support/sdam/sharded/too_old.yml +36 -0
- data/spec/support/sdam/single/compatible.yml +26 -0
- data/spec/support/sdam/single/direct_connection_external_ip.yml +3 -1
- data/spec/support/sdam/single/direct_connection_mongos.yml +3 -1
- data/spec/support/sdam/single/direct_connection_rsarbiter.yml +3 -1
- data/spec/support/sdam/single/direct_connection_rsprimary.yml +3 -1
- data/spec/support/sdam/single/direct_connection_rssecondary.yml +3 -1
- data/spec/support/sdam/single/direct_connection_slave.yml +3 -1
- data/spec/support/sdam/single/direct_connection_standalone.yml +3 -1
- data/spec/support/sdam/single/not_ok_response.yml +6 -2
- data/spec/support/sdam/single/standalone_removed.yml +3 -1
- data/spec/support/sdam/single/too_new.yml +26 -0
- data/spec/support/sdam/single/too_old.yml +24 -0
- data/spec/support/shared/session.rb +107 -0
- data/spec/support/transactions.rb +391 -0
- data/spec/support/transactions/operation.rb +373 -0
- data/spec/support/transactions_tests/abort.yml +403 -0
- data/spec/support/transactions_tests/bulk.yml +267 -0
- data/spec/support/transactions_tests/causal-consistency.yml +173 -0
- data/spec/support/transactions_tests/commit.yml +593 -0
- data/spec/support/transactions_tests/delete.yml +184 -0
- data/spec/support/transactions_tests/error-labels.yml +948 -0
- data/spec/support/transactions_tests/errors.yml +125 -0
- data/spec/support/transactions_tests/findOneAndDelete.yml +126 -0
- data/spec/support/transactions_tests/findOneAndReplace.yml +140 -0
- data/spec/support/transactions_tests/findOneAndUpdate.yml +228 -0
- data/spec/support/transactions_tests/insert.yml +264 -0
- data/spec/support/transactions_tests/isolation.yml +125 -0
- data/spec/support/transactions_tests/read-pref.yml +340 -0
- data/spec/support/transactions_tests/reads.yml +298 -0
- data/spec/support/transactions_tests/retryable-abort.yml +1292 -0
- data/spec/support/transactions_tests/retryable-commit.yml +1332 -0
- data/spec/support/transactions_tests/retryable-writes.yml +208 -0
- data/spec/support/transactions_tests/run-command.yml +189 -0
- data/spec/support/transactions_tests/transaction-options.yml +877 -0
- data/spec/support/transactions_tests/update.yml +246 -0
- data/spec/support/transactions_tests/write-concern.yml +236 -0
- metadata +494 -359
- metadata.gz.sig +0 -0
- data/lib/csasl/csasl.bundle +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 8c5dc91c26dc7d6d0a6c9f50e39c6d7b53130d08e75611d9f2a81162ed5a53e2
|
4
|
+
data.tar.gz: ceb6c12c3e4a7e5b9552fa8501b8faa6835ce110a6f32e6df8e8c65f53599b76
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 94c8eeb0c0afa60bd77ad0fc8139bfa818e9b3d1ac1d7e1656d92cf91e50d0481d3e9bb275bd3f5143b540036e5acc314e573e79c5891ad85003b05eadfc695e
|
7
|
+
data.tar.gz: 94e7a7f089b67ec901c8182f96d9a020ba67143b5e0823d3c39f0fa7dfa8cc7e0132a40df65a64c2c308b2d255316dbac4e20180b70bbeaa5680b3ef55e6f70e
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/LICENSE
CHANGED
@@ -175,7 +175,7 @@
|
|
175
175
|
|
176
176
|
END OF TERMS AND CONDITIONS
|
177
177
|
|
178
|
-
Copyright (C) 2009-
|
178
|
+
Copyright (C) 2009-2018 MongoDB, Inc.
|
179
179
|
|
180
180
|
Licensed under the Apache License, Version 2.0 (the "License");
|
181
181
|
you may not use this file except in compliance with the License.
|
data/README.md
CHANGED
@@ -5,7 +5,8 @@ The officially supported Ruby driver for [MongoDB](http://www.mongodb.org).
|
|
5
5
|
Documentation
|
6
6
|
-----
|
7
7
|
|
8
|
-
|
8
|
+
High level documentation and usage examples are located
|
9
|
+
[here](http://docs.mongodb.org/ecosystem/drivers/ruby/).
|
9
10
|
|
10
11
|
API docs can be found [here](http://api.mongodb.org/ruby/).
|
11
12
|
|
@@ -65,7 +66,7 @@ Full release notes and release history are available [here](https://github.com/m
|
|
65
66
|
License
|
66
67
|
-----
|
67
68
|
|
68
|
-
Copyright (C) 2009-
|
69
|
+
Copyright (C) 2009-2018 MongoDB, Inc.
|
69
70
|
|
70
71
|
Licensed under the Apache License, Version 2.0 (the "License");
|
71
72
|
you may not use this file except in compliance with the License.
|
data/lib/mongo.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2014-
|
1
|
+
# Copyright (C) 2014-2018 MongoDB, Inc.
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -27,11 +27,11 @@ require 'mongo/event'
|
|
27
27
|
require 'mongo/address'
|
28
28
|
require 'mongo/auth'
|
29
29
|
require 'mongo/protocol'
|
30
|
-
require 'mongo/client'
|
31
30
|
require 'mongo/cluster'
|
32
31
|
require 'mongo/cursor'
|
33
32
|
require 'mongo/collection'
|
34
33
|
require 'mongo/database'
|
34
|
+
require 'mongo/client' # Purposely out-of-order so that database is loaded first
|
35
35
|
require 'mongo/dbref'
|
36
36
|
require 'mongo/grid'
|
37
37
|
require 'mongo/index'
|
data/lib/mongo/address.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2014-
|
1
|
+
# Copyright (C) 2014-2018 MongoDB, Inc.
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the 'License');
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -159,7 +159,15 @@ module Mongo
|
|
159
159
|
#
|
160
160
|
# @since 2.0.0
|
161
161
|
def to_s
|
162
|
-
|
162
|
+
if port
|
163
|
+
if host.include?(':')
|
164
|
+
"[#{host}]:#{port}"
|
165
|
+
else
|
166
|
+
"#{host}:#{port}"
|
167
|
+
end
|
168
|
+
else
|
169
|
+
host
|
170
|
+
end
|
163
171
|
end
|
164
172
|
|
165
173
|
# Connect a socket.
|
data/lib/mongo/address/ipv4.rb
CHANGED
data/lib/mongo/address/ipv6.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2014-
|
1
|
+
# Copyright (C) 2014-2018 MongoDB, Inc.
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the 'License');
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -12,6 +12,8 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
|
+
require 'ipaddr'
|
16
|
+
|
15
17
|
module Mongo
|
16
18
|
class Address
|
17
19
|
|
@@ -38,7 +40,7 @@ module Mongo
|
|
38
40
|
# Parse an IPv6 address into its host and port.
|
39
41
|
#
|
40
42
|
# @example Parse the address.
|
41
|
-
#
|
43
|
+
# IPv6.parse("[::1]:28011")
|
42
44
|
#
|
43
45
|
# @param [ String ] address The address to parse.
|
44
46
|
#
|
@@ -46,9 +48,28 @@ module Mongo
|
|
46
48
|
#
|
47
49
|
# @since 2.0.0
|
48
50
|
def self.parse(address)
|
49
|
-
|
50
|
-
|
51
|
-
|
51
|
+
# IPAddr's parser handles IP address only, not port.
|
52
|
+
# Therefore we need to handle the port ourselves
|
53
|
+
if address =~ /[\[\]]/
|
54
|
+
parts = address.match(/\A\[(.+)\](?::(\d+))?\z/)
|
55
|
+
if parts.nil?
|
56
|
+
raise ArgumentError, "Invalid IPv6 address: #{address}"
|
57
|
+
end
|
58
|
+
host = parts[1]
|
59
|
+
port = (parts[2] || 27017).to_i
|
60
|
+
else
|
61
|
+
host = address
|
62
|
+
port = 27017
|
63
|
+
end
|
64
|
+
# Validate host.
|
65
|
+
# This will raise IPAddr::InvalidAddressError
|
66
|
+
# on newer rubies which is a subclass of ArgumentError
|
67
|
+
# if host is invalid
|
68
|
+
begin
|
69
|
+
IPAddr.new(host)
|
70
|
+
rescue ArgumentError
|
71
|
+
raise ArgumentError, "Invalid IPv6 address: #{address}"
|
72
|
+
end
|
52
73
|
[ host, port ]
|
53
74
|
end
|
54
75
|
|
data/lib/mongo/address/unix.rb
CHANGED
data/lib/mongo/auth.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2014-
|
1
|
+
# Copyright (C) 2014-2018 MongoDB, Inc.
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -18,6 +18,7 @@ require 'mongo/auth/scram'
|
|
18
18
|
require 'mongo/auth/user'
|
19
19
|
require 'mongo/auth/x509'
|
20
20
|
require 'mongo/auth/roles'
|
21
|
+
require 'mongo/auth/stringprep'
|
21
22
|
|
22
23
|
module Mongo
|
23
24
|
|
@@ -49,7 +50,8 @@ module Mongo
|
|
49
50
|
mongodb_cr: CR,
|
50
51
|
mongodb_x509: X509,
|
51
52
|
plain: LDAP,
|
52
|
-
scram: SCRAM
|
53
|
+
scram: SCRAM,
|
54
|
+
scram256: SCRAM,
|
53
55
|
}
|
54
56
|
|
55
57
|
# Get the authorization strategy for the provided auth mechanism.
|
@@ -65,7 +67,12 @@ module Mongo
|
|
65
67
|
def get(user)
|
66
68
|
mechanism = user.mechanism
|
67
69
|
raise InvalidMechanism.new(mechanism) if !SOURCES.has_key?(mechanism)
|
68
|
-
SOURCES[mechanism]
|
70
|
+
case SOURCES[mechanism]
|
71
|
+
when SCRAM
|
72
|
+
SOURCES[mechanism].new(user, mechanism)
|
73
|
+
else
|
74
|
+
SOURCES[mechanism].new(user)
|
75
|
+
end
|
69
76
|
end
|
70
77
|
|
71
78
|
# Raised when trying to get an invalid authorization mechanism.
|
data/lib/mongo/auth/cr.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2014-
|
1
|
+
# Copyright (C) 2014-2018 MongoDB Inc.
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -20,6 +20,9 @@ module Mongo
|
|
20
20
|
# Defines behaviour for MongoDB-CR authentication.
|
21
21
|
#
|
22
22
|
# @since 2.0.0
|
23
|
+
# @deprecated MONGODB-CR authentication mechanism is deprecated
|
24
|
+
# as of MongoDB 3.6. Support for it in the Ruby driver will be
|
25
|
+
# removed in driver version 3.0. Please use SCRAM instead.
|
23
26
|
class CR
|
24
27
|
|
25
28
|
# The authentication mechinism string.
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2014 MongoDB Inc.
|
1
|
+
# Copyright (C) 2014-2018 MongoDB Inc.
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -20,6 +20,9 @@ module Mongo
|
|
20
20
|
# client and server.
|
21
21
|
#
|
22
22
|
# @since 2.0.0
|
23
|
+
# @deprecated MONGODB-CR authentication mechanism is deprecated
|
24
|
+
# as of MongoDB 3.6. Support for it in the Ruby driver will be
|
25
|
+
# removed in driver version 3.0. Please use SCRAM instead.
|
23
26
|
class Conversation
|
24
27
|
|
25
28
|
# The login message base.
|
data/lib/mongo/auth/ldap.rb
CHANGED
data/lib/mongo/auth/roles.rb
CHANGED
data/lib/mongo/auth/scram.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2014 MongoDB Inc.
|
1
|
+
# Copyright (C) 2014-2018 MongoDB Inc.
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -17,15 +17,29 @@ require 'mongo/auth/scram/conversation'
|
|
17
17
|
module Mongo
|
18
18
|
module Auth
|
19
19
|
|
20
|
-
# Defines behaviour for SCRAM
|
20
|
+
# Defines behaviour for SCRAM authentication.
|
21
21
|
#
|
22
22
|
# @since 2.0.0
|
23
23
|
class SCRAM
|
24
24
|
|
25
|
-
# The authentication
|
25
|
+
# The authentication mechanism string for SCRAM-SHA-1.
|
26
26
|
#
|
27
|
-
# @since 2.
|
28
|
-
|
27
|
+
# @since 2.6.0
|
28
|
+
SCRAM_SHA_1_MECHANISM = 'SCRAM-SHA-1'.freeze
|
29
|
+
|
30
|
+
# The authentication mechanism string for SCRAM-SHA-256.
|
31
|
+
#
|
32
|
+
# @since 2.6.0
|
33
|
+
SCRAM_SHA_256_MECHANISM = 'SCRAM-SHA-256'.freeze
|
34
|
+
|
35
|
+
|
36
|
+
# Map the user-specified authentication mechanism to the proper names of the mechanisms.
|
37
|
+
#
|
38
|
+
# @since 2.6.0
|
39
|
+
MECHANISMS = {
|
40
|
+
scram: SCRAM_SHA_1_MECHANISM,
|
41
|
+
scram256: SCRAM_SHA_256_MECHANISM
|
42
|
+
}.freeze
|
29
43
|
|
30
44
|
# @return [ Mongo::Auth::User ] The user to authenticate.
|
31
45
|
attr_reader :user
|
@@ -49,12 +63,15 @@ module Mongo
|
|
49
63
|
#
|
50
64
|
# @param [ Mongo::Connection ] connection The connection to log into.
|
51
65
|
# on.
|
66
|
+
# @param [ String ] mechanism The auth mechanism to use (either 'SCRAM-SHA-1' or
|
67
|
+
# 'SCRAM-SHA-256');
|
52
68
|
#
|
53
69
|
# @return [ Protocol::Message ] The authentication response.
|
54
70
|
#
|
55
71
|
# @since 2.0.0
|
56
|
-
def login(connection)
|
57
|
-
|
72
|
+
def login(connection, mechanism = nil)
|
73
|
+
mechanism ||= user.mechanism || :scram
|
74
|
+
conversation = Conversation.new(user, MECHANISMS[mechanism])
|
58
75
|
reply = connection.dispatch([ conversation.start(connection) ])
|
59
76
|
connection.update_cluster_time(Operation::Result.new(reply))
|
60
77
|
reply = connection.dispatch([ conversation.continue(reply, connection) ])
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2014 MongoDB Inc.
|
1
|
+
# Copyright (C) 2014-2018 MongoDB Inc.
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -40,11 +40,6 @@ module Mongo
|
|
40
40
|
# @since 2.0.0
|
41
41
|
CLIENT_KEY = 'Client Key'.freeze
|
42
42
|
|
43
|
-
# The digest to use for encryption.
|
44
|
-
#
|
45
|
-
# @since 2.0.0
|
46
|
-
DIGEST = OpenSSL::Digest::SHA1.new.freeze
|
47
|
-
|
48
43
|
# The key for the done field in the responses.
|
49
44
|
#
|
50
45
|
# @since 2.0.0
|
@@ -60,6 +55,13 @@ module Mongo
|
|
60
55
|
# @since 2.0.0
|
61
56
|
ITERATIONS = /i=(\d+)/.freeze
|
62
57
|
|
58
|
+
# The minimum iteration count for SCRAM-SHA-256.
|
59
|
+
#
|
60
|
+
# @api private
|
61
|
+
#
|
62
|
+
# @since 2.6.0
|
63
|
+
MIN_ITER_COUNT = 4096
|
64
|
+
|
63
65
|
# The payload field.
|
64
66
|
#
|
65
67
|
# @since 2.0.0
|
@@ -178,7 +180,7 @@ module Mongo
|
|
178
180
|
# @since 2.0.0
|
179
181
|
def start(connection = nil)
|
180
182
|
if connection && connection.features.op_msg_enabled?
|
181
|
-
selector = CLIENT_FIRST_MESSAGE.merge(payload: client_first_message, mechanism:
|
183
|
+
selector = CLIENT_FIRST_MESSAGE.merge(payload: client_first_message, mechanism: @mechanism)
|
182
184
|
selector[Protocol::Msg::DATABASE_IDENTIFIER] = user.auth_source
|
183
185
|
cluster_time = connection.mongos? && connection.cluster_time
|
184
186
|
selector[Operation::CLUSTER_TIME] = cluster_time if cluster_time
|
@@ -187,7 +189,7 @@ module Mongo
|
|
187
189
|
Protocol::Query.new(
|
188
190
|
user.auth_source,
|
189
191
|
Database::COMMAND,
|
190
|
-
CLIENT_FIRST_MESSAGE.merge(payload: client_first_message, mechanism:
|
192
|
+
CLIENT_FIRST_MESSAGE.merge(payload: client_first_message, mechanism: @mechanism),
|
191
193
|
limit: -1
|
192
194
|
)
|
193
195
|
end
|
@@ -208,15 +210,16 @@ module Mongo
|
|
208
210
|
# Create the new conversation.
|
209
211
|
#
|
210
212
|
# @example Create the new conversation.
|
211
|
-
# Conversation.new(user)
|
213
|
+
# Conversation.new(user, mechanism)
|
212
214
|
#
|
213
215
|
# @param [ Auth::User ] user The user to converse about.
|
214
216
|
#
|
215
217
|
# @since 2.0.0
|
216
|
-
def initialize(user)
|
218
|
+
def initialize(user, mechanism)
|
217
219
|
@user = user
|
218
220
|
@nonce = SecureRandom.base64
|
219
221
|
@client_key = user.send(:client_key)
|
222
|
+
@mechanism = mechanism
|
220
223
|
end
|
221
224
|
|
222
225
|
private
|
@@ -339,12 +342,23 @@ module Mongo
|
|
339
342
|
#
|
340
343
|
# @since 2.0.0
|
341
344
|
def hi(data)
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
345
|
+
case @mechanism
|
346
|
+
when SCRAM::SCRAM_SHA_256_MECHANISM
|
347
|
+
OpenSSL::PKCS5.pbkdf2_hmac(
|
348
|
+
data,
|
349
|
+
Base64.strict_decode64(salt),
|
350
|
+
iterations,
|
351
|
+
digest.size,
|
352
|
+
digest
|
353
|
+
)
|
354
|
+
else
|
355
|
+
OpenSSL::PKCS5.pbkdf2_hmac_sha1(
|
356
|
+
data,
|
357
|
+
Base64.strict_decode64(salt),
|
358
|
+
iterations,
|
359
|
+
digest.size
|
360
|
+
)
|
361
|
+
end
|
348
362
|
end
|
349
363
|
|
350
364
|
# HMAC algorithm implementation.
|
@@ -364,7 +378,12 @@ module Mongo
|
|
364
378
|
#
|
365
379
|
# @since 2.0.0
|
366
380
|
def iterations
|
367
|
-
@iterations ||= payload_data.match(ITERATIONS)[1].to_i
|
381
|
+
@iterations ||= payload_data.match(ITERATIONS)[1].to_i.tap do |i|
|
382
|
+
if i < MIN_ITER_COUNT
|
383
|
+
raise Error::InsufficientIterationCount.new(
|
384
|
+
Error::InsufficientIterationCount.message(MIN_ITER_COUNT, 1))
|
385
|
+
end
|
386
|
+
end
|
368
387
|
end
|
369
388
|
|
370
389
|
# Get the data from the returned payload.
|
@@ -402,7 +421,7 @@ module Mongo
|
|
402
421
|
#
|
403
422
|
# @since 2.0.0
|
404
423
|
def salted_password
|
405
|
-
@salted_password ||= hi(
|
424
|
+
@salted_password ||= hi(hashed_password)
|
406
425
|
end
|
407
426
|
|
408
427
|
# Server key algorithm implementation.
|
@@ -492,8 +511,22 @@ module Mongo
|
|
492
511
|
|
493
512
|
private
|
494
513
|
|
514
|
+
def hashed_password
|
515
|
+
case @mechanism
|
516
|
+
when SCRAM::SCRAM_SHA_256_MECHANISM
|
517
|
+
user.sasl_prepped_hashed_password
|
518
|
+
else
|
519
|
+
user.hashed_password
|
520
|
+
end
|
521
|
+
end
|
522
|
+
|
495
523
|
def digest
|
496
|
-
@digest ||=
|
524
|
+
@digest ||= case @mechanism
|
525
|
+
when SCRAM::SCRAM_SHA_256_MECHANISM
|
526
|
+
OpenSSL::Digest::SHA256.new.freeze
|
527
|
+
else
|
528
|
+
OpenSSL::Digest::SHA1.new.freeze
|
529
|
+
end
|
497
530
|
end
|
498
531
|
end
|
499
532
|
end
|