mongo 1.12.5 → 2.0.0.beta
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.tar.gz.sig +0 -0
- data/CONTRIBUTING.md +64 -0
- data/LICENSE +1 -1
- data/README.md +23 -125
- data/Rakefile +26 -21
- data/bin/mongo_console +6 -38
- data/lib/mongo.rb +23 -82
- data/lib/mongo/address.rb +111 -0
- data/lib/mongo/address/ipv4.rb +85 -0
- data/lib/mongo/address/ipv6.rb +85 -0
- data/lib/mongo/address/unix.rb +76 -0
- data/lib/mongo/auth.rb +108 -0
- data/lib/mongo/auth/cr.rb +44 -0
- data/lib/mongo/auth/cr/conversation.rb +119 -0
- data/lib/mongo/auth/executable.rb +52 -0
- data/lib/mongo/auth/ldap.rb +48 -0
- data/lib/mongo/auth/ldap/conversation.rb +92 -0
- data/lib/mongo/auth/roles.rb +104 -0
- data/lib/mongo/auth/scram.rb +53 -0
- data/lib/mongo/auth/scram/conversation.rb +450 -0
- data/lib/mongo/auth/user.rb +159 -0
- data/lib/mongo/auth/user/view.rb +102 -0
- data/lib/mongo/auth/x509.rb +48 -0
- data/lib/mongo/auth/x509/conversation.rb +92 -0
- data/lib/mongo/{gridfs.rb → bulk.rb} +2 -5
- data/lib/mongo/bulk/bulk_write.rb +307 -0
- data/lib/mongo/client.rb +233 -0
- data/lib/mongo/cluster.rb +203 -0
- data/lib/mongo/cluster/topology.rb +60 -0
- data/lib/mongo/cluster/topology/replica_set.rb +160 -0
- data/lib/mongo/cluster/topology/sharded.rb +132 -0
- data/lib/mongo/cluster/topology/standalone.rb +132 -0
- data/lib/mongo/cluster/topology/unknown.rb +155 -0
- data/lib/mongo/collection.rb +130 -1101
- data/lib/mongo/collection/view.rb +169 -0
- data/lib/mongo/collection/view/aggregation.rb +108 -0
- data/lib/mongo/collection/view/explainable.rb +49 -0
- data/lib/mongo/collection/view/immutable.rb +43 -0
- data/lib/mongo/collection/view/iterable.rb +48 -0
- data/lib/mongo/collection/view/map_reduce.rb +191 -0
- data/lib/mongo/collection/view/readable.rb +363 -0
- data/lib/mongo/collection/view/writable.rb +169 -0
- data/lib/mongo/cursor.rb +79 -680
- data/lib/mongo/database.rb +224 -0
- data/lib/mongo/database/view.rb +101 -0
- data/lib/mongo/error.rb +81 -0
- data/lib/mongo/error/bulk_write_failure.rb +41 -0
- data/lib/mongo/{utils/thread_local_variable_manager.rb → error/empty_batch.rb} +22 -8
- data/{test/functional/db_connection_test.rb → lib/mongo/error/invalid_bulk_operation.rb} +19 -8
- data/lib/mongo/error/invalid_collection_name.rb +39 -0
- data/lib/mongo/error/invalid_database_name.rb +39 -0
- data/{test/replica_set/ssl_test.rb → lib/mongo/error/invalid_document.rb} +21 -14
- data/lib/mongo/error/invalid_file.rb +38 -0
- data/lib/mongo/error/invalid_nonce.rb +46 -0
- data/lib/mongo/error/invalid_replacement_document.rb +39 -0
- data/lib/mongo/error/invalid_signature.rb +47 -0
- data/{test/functional/ssl_test.rb → lib/mongo/error/invalid_update_document.rb} +22 -12
- data/lib/mongo/error/max_bson_size.rb +40 -0
- data/lib/mongo/error/max_message_size.rb +42 -0
- data/lib/mongo/{utils.rb → error/need_primary_server.rb} +10 -6
- data/lib/mongo/{connection.rb → error/operation_failure.rb} +10 -6
- data/lib/mongo/error/parser.rb +77 -0
- data/lib/mongo/{connection/socket.rb → error/socket_error.rb} +10 -5
- data/lib/mongo/error/socket_timeout_error.rb +23 -0
- data/lib/mongo/error/unsupported_features.rb +43 -0
- data/lib/mongo/event.rb +40 -0
- data/lib/mongo/event/listeners.rb +63 -0
- data/lib/mongo/event/primary_elected.rb +53 -0
- data/lib/mongo/event/publisher.rb +42 -0
- data/lib/mongo/event/server_added.rb +53 -0
- data/lib/mongo/event/server_removed.rb +53 -0
- data/lib/mongo/event/subscriber.rb +41 -0
- data/lib/mongo/grid.rb +16 -0
- data/lib/mongo/grid/file.rb +94 -0
- data/lib/mongo/grid/file/chunk.rb +184 -0
- data/lib/mongo/grid/file/metadata.rb +223 -0
- data/lib/mongo/grid/fs.rb +149 -0
- data/lib/mongo/index.rb +64 -0
- data/lib/mongo/index/view.rb +205 -0
- data/lib/mongo/loggable.rb +126 -0
- data/lib/mongo/logger.rb +132 -0
- data/lib/mongo/operation.rb +26 -0
- data/lib/mongo/operation/aggregate.rb +100 -0
- data/lib/mongo/operation/aggregate/result.rb +84 -0
- data/lib/mongo/operation/batchable.rb +103 -0
- data/lib/mongo/operation/bulk_delete/result.rb +197 -0
- data/lib/mongo/operation/bulk_insert/result.rb +195 -0
- data/lib/mongo/operation/bulk_update/result.rb +295 -0
- data/lib/mongo/operation/command.rb +62 -0
- data/lib/mongo/operation/executable.rb +105 -0
- data/lib/mongo/operation/kill_cursors.rb +39 -0
- data/lib/mongo/operation/limited.rb +37 -0
- data/lib/mongo/operation/list_collections/result.rb +116 -0
- data/lib/mongo/operation/list_indexes/result.rb +118 -0
- data/lib/mongo/operation/map_reduce.rb +96 -0
- data/lib/mongo/operation/map_reduce/result.rb +122 -0
- data/lib/mongo/{functional.rb → operation/read.rb} +7 -7
- data/lib/mongo/operation/read/collections_info.rb +67 -0
- data/lib/mongo/operation/read/get_more.rb +71 -0
- data/lib/mongo/operation/read/indexes.rb +68 -0
- data/lib/mongo/operation/read/list_collections.rb +75 -0
- data/lib/mongo/operation/read/list_indexes.rb +77 -0
- data/lib/mongo/operation/read/query.rb +71 -0
- data/lib/mongo/operation/read_preferrable.rb +34 -0
- data/lib/mongo/operation/result.rb +259 -0
- data/lib/mongo/operation/specifiable.rb +380 -0
- data/lib/mongo/operation/write.rb +25 -0
- data/lib/mongo/operation/write/bulk_delete.rb +158 -0
- data/lib/mongo/operation/write/bulk_insert.rb +160 -0
- data/lib/mongo/operation/write/bulk_update.rb +167 -0
- data/lib/mongo/{connection/socket/socket_util.rb → operation/write/command.rb} +9 -24
- data/lib/mongo/operation/write/command/create_user.rb +43 -0
- data/lib/mongo/operation/write/command/delete.rb +56 -0
- data/lib/mongo/operation/write/command/drop_index.rb +51 -0
- data/lib/mongo/operation/write/command/ensure_index.rb +55 -0
- data/lib/mongo/operation/write/command/insert.rb +55 -0
- data/lib/mongo/operation/write/command/remove_user.rb +42 -0
- data/lib/mongo/operation/write/command/update.rb +60 -0
- data/lib/mongo/operation/write/command/writable.rb +61 -0
- data/lib/mongo/operation/write/create_index.rb +84 -0
- data/lib/mongo/operation/write/create_user.rb +75 -0
- data/lib/mongo/operation/write/delete.rb +91 -0
- data/lib/mongo/operation/write/drop_index.rb +62 -0
- data/lib/mongo/operation/write/insert.rb +88 -0
- data/lib/mongo/operation/write/remove_user.rb +70 -0
- data/lib/mongo/operation/write/update.rb +98 -0
- data/lib/mongo/protocol.rb +15 -0
- data/lib/mongo/protocol/bit_vector.rb +61 -0
- data/lib/mongo/protocol/delete.rb +94 -0
- data/lib/mongo/protocol/get_more.rb +99 -0
- data/lib/mongo/protocol/insert.rb +99 -0
- data/lib/mongo/protocol/kill_cursors.rb +74 -0
- data/lib/mongo/protocol/message.rb +252 -0
- data/lib/mongo/protocol/query.rb +147 -0
- data/lib/mongo/protocol/reply.rb +72 -0
- data/lib/mongo/protocol/serializers.rb +180 -0
- data/lib/mongo/protocol/update.rb +111 -0
- data/lib/mongo/server.rb +163 -0
- data/lib/mongo/server/connectable.rb +99 -0
- data/lib/mongo/server/connection.rb +133 -0
- data/lib/mongo/server/connection_pool.rb +141 -0
- data/lib/mongo/server/connection_pool/queue.rb +182 -0
- data/lib/mongo/server/context.rb +66 -0
- data/lib/mongo/server/description.rb +450 -0
- data/lib/mongo/server/description/features.rb +85 -0
- data/lib/mongo/server/description/inspector.rb +79 -0
- data/lib/mongo/server/description/inspector/primary_elected.rb +58 -0
- data/lib/mongo/server/description/inspector/server_added.rb +59 -0
- data/lib/mongo/server/description/inspector/server_removed.rb +59 -0
- data/lib/mongo/server/monitor.rb +160 -0
- data/lib/mongo/server/monitor/connection.rb +88 -0
- data/lib/mongo/server_selector.rb +81 -0
- data/lib/mongo/server_selector/nearest.rb +94 -0
- data/lib/mongo/server_selector/primary.rb +88 -0
- data/lib/mongo/server_selector/primary_preferred.rb +94 -0
- data/lib/mongo/server_selector/secondary.rb +91 -0
- data/lib/mongo/server_selector/secondary_preferred.rb +96 -0
- data/lib/mongo/server_selector/selectable.rb +209 -0
- data/lib/mongo/socket.rb +179 -0
- data/lib/mongo/socket/ssl.rb +108 -0
- data/lib/mongo/socket/tcp.rb +69 -0
- data/lib/mongo/socket/unix.rb +66 -0
- data/lib/mongo/uri.rb +504 -0
- data/lib/mongo/version.rb +21 -0
- data/lib/mongo/write_concern.rb +99 -0
- data/lib/mongo/write_concern/acknowledged.rb +38 -0
- data/lib/mongo/write_concern/normalizable.rb +73 -0
- data/lib/mongo/write_concern/unacknowledged.rb +43 -0
- data/mongo.gemspec +17 -14
- data/spec/mongo/address/ipv4_spec.rb +74 -0
- data/spec/mongo/address/ipv6_spec.rb +74 -0
- data/spec/mongo/address/unix_spec.rb +30 -0
- data/spec/mongo/address_spec.rb +206 -0
- data/spec/mongo/auth/cr_spec.rb +59 -0
- data/spec/mongo/auth/ldap_spec.rb +40 -0
- data/spec/mongo/auth/scram/conversation_spec.rb +197 -0
- data/spec/mongo/auth/scram_spec.rb +55 -0
- data/spec/mongo/auth/user/view_spec.rb +76 -0
- data/spec/mongo/auth/user_spec.rb +190 -0
- data/spec/mongo/auth/x509_spec.rb +40 -0
- data/spec/mongo/auth_spec.rb +65 -0
- data/spec/mongo/bulk/bulk_write_spec.rb +175 -0
- data/spec/mongo/client_spec.rb +564 -0
- data/spec/mongo/cluster/topology/replica_set_spec.rb +101 -0
- data/spec/mongo/cluster/topology/sharded_spec.rb +74 -0
- data/spec/mongo/cluster/topology/standalone_spec.rb +79 -0
- data/spec/mongo/cluster/topology_spec.rb +65 -0
- data/spec/mongo/cluster_spec.rb +129 -0
- data/spec/mongo/collection/view/aggregation_spec.rb +135 -0
- data/spec/mongo/collection/view/explainable_spec.rb +32 -0
- data/spec/mongo/collection/view/map_reduce_spec.rb +242 -0
- data/spec/mongo/collection/view/readable_spec.rb +603 -0
- data/spec/mongo/collection/view/writable_spec.rb +504 -0
- data/spec/mongo/collection/view_spec.rb +521 -0
- data/spec/mongo/collection_spec.rb +362 -0
- data/spec/mongo/cursor_spec.rb +295 -0
- data/spec/mongo/database_spec.rb +306 -0
- data/spec/mongo/error/parser_spec.rb +119 -0
- data/spec/mongo/event/publisher_spec.rb +50 -0
- data/spec/mongo/event/subscriber_spec.rb +34 -0
- data/spec/mongo/grid/file/chunk_spec.rb +226 -0
- data/spec/mongo/grid/file/metadata_spec.rb +69 -0
- data/spec/mongo/grid/file_spec.rb +138 -0
- data/spec/mongo/grid/fs_spec.rb +129 -0
- data/spec/mongo/index/view_spec.rb +226 -0
- data/spec/mongo/loggable_spec.rb +62 -0
- data/spec/mongo/logger_spec.rb +97 -0
- data/spec/mongo/operation/aggregate/result_spec.rb +80 -0
- data/spec/mongo/operation/aggregate_spec.rb +135 -0
- data/spec/mongo/operation/command_spec.rb +106 -0
- data/spec/mongo/operation/kill_cursors_spec.rb +66 -0
- data/spec/mongo/operation/limited_spec.rb +50 -0
- data/spec/mongo/operation/map_reduce_spec.rb +143 -0
- data/spec/mongo/operation/read/collections_info_spec.rb +40 -0
- data/spec/mongo/operation/read/get_more_spec.rb +81 -0
- data/spec/mongo/operation/read/indexes_spec.rb +31 -0
- data/spec/mongo/operation/read/query_spec.rb +84 -0
- data/spec/mongo/operation/result_spec.rb +275 -0
- data/spec/mongo/operation/specifiable_spec.rb +53 -0
- data/spec/mongo/operation/write/bulk_delete_spec.rb +473 -0
- data/spec/mongo/operation/write/bulk_insert_spec.rb +466 -0
- data/spec/mongo/operation/write/bulk_update_spec.rb +524 -0
- data/spec/mongo/operation/write/command/delete_spec.rb +116 -0
- data/spec/mongo/operation/write/command/insert_spec.rb +117 -0
- data/spec/mongo/operation/write/command/update_spec.rb +123 -0
- data/spec/mongo/operation/write/create_user_spec.rb +44 -0
- data/spec/mongo/operation/write/delete_spec.rb +178 -0
- data/spec/mongo/operation/write/drop_index_spec.rb +51 -0
- data/spec/mongo/operation/write/ensure_index_spec.rb +81 -0
- data/spec/mongo/operation/write/insert_spec.rb +231 -0
- data/spec/mongo/operation/write/remove_user_spec.rb +46 -0
- data/spec/mongo/operation/write/response_spec.rb +85 -0
- data/spec/mongo/operation/write/update_spec.rb +177 -0
- data/spec/mongo/protocol/delete_spec.rb +167 -0
- data/spec/mongo/protocol/get_more_spec.rb +146 -0
- data/spec/mongo/protocol/insert_spec.rb +161 -0
- data/spec/mongo/protocol/kill_cursors_spec.rb +101 -0
- data/spec/mongo/protocol/query_spec.rb +285 -0
- data/spec/mongo/protocol/reply_spec.rb +157 -0
- data/spec/mongo/protocol/update_spec.rb +186 -0
- data/spec/mongo/server/connection_pool/queue_spec.rb +170 -0
- data/spec/mongo/server/connection_pool_spec.rb +120 -0
- data/spec/mongo/server/connection_spec.rb +289 -0
- data/spec/mongo/server/description/features_spec.rb +138 -0
- data/spec/mongo/server/description/inspector/primary_elected_spec.rb +94 -0
- data/spec/mongo/server/description/inspector/server_added_spec.rb +92 -0
- data/spec/mongo/server/description/inspector/server_removed_spec.rb +95 -0
- data/spec/mongo/server/description_spec.rb +510 -0
- data/spec/mongo/server/monitor_spec.rb +130 -0
- data/spec/mongo/server_discovery_and_monitoring_spec.rb +103 -0
- data/spec/mongo/server_selection_rtt_spec.rb +104 -0
- data/spec/mongo/server_selection_spec.rb +89 -0
- data/spec/mongo/server_selector/nearest_spec.rb +250 -0
- data/spec/mongo/server_selector/primary_preferred_spec.rb +290 -0
- data/spec/mongo/server_selector/primary_spec.rb +114 -0
- data/spec/mongo/server_selector/secondary_preferred_spec.rb +252 -0
- data/spec/mongo/server_selector/secondary_spec.rb +196 -0
- data/spec/mongo/server_selector_spec.rb +101 -0
- data/spec/mongo/server_spec.rb +131 -0
- data/spec/mongo/uri_spec.rb +517 -0
- data/spec/mongo/write_concern/acknowledged_spec.rb +44 -0
- data/spec/mongo/write_concern/unacknowledged_spec.rb +15 -0
- data/spec/mongo_orchestration_spec.rb +70 -0
- data/spec/spec_helper.rb +148 -0
- data/spec/support/authorization.rb +245 -0
- data/spec/support/helpers.rb +140 -0
- data/spec/support/matchers.rb +37 -0
- data/spec/support/mongo_orchestration.rb +61 -0
- data/spec/support/mongo_orchestration/requestable.rb +109 -0
- data/spec/support/mongo_orchestration/standalone.rb +57 -0
- data/spec/support/sdam/rs/discover_arbiters.yml +41 -0
- data/spec/support/sdam/rs/discover_passives.yml +41 -0
- data/spec/support/sdam/rs/discover_primary.yml +40 -0
- data/spec/support/sdam/rs/discover_secondary.yml +41 -0
- data/spec/support/sdam/rs/discovery.yml +195 -0
- data/spec/support/sdam/rs/ghost_discovered.yml +39 -0
- data/spec/support/sdam/rs/hosts_differ_from_seeds.yml +34 -0
- data/spec/support/sdam/rs/member_reconfig.yml +68 -0
- data/spec/support/sdam/rs/member_standalone.yml +60 -0
- data/spec/support/sdam/rs/new_primary.yml +74 -0
- data/spec/support/sdam/rs/new_primary_wrong_set_name.yml +71 -0
- data/spec/support/sdam/rs/non_rs_member.yml +31 -0
- data/spec/support/sdam/rs/normalize_case.yml +49 -0
- data/spec/support/sdam/rs/primary_becomes_standalone.yml +52 -0
- data/spec/support/sdam/rs/primary_changes_set_name.yml +57 -0
- data/spec/support/sdam/rs/primary_disconnect.yml +56 -0
- data/spec/support/sdam/rs/primary_wrong_set_name.yml +27 -0
- data/spec/support/sdam/rs/response_from_removed.yml +63 -0
- data/spec/support/sdam/rs/rsother_discovered.yml +41 -0
- data/spec/support/sdam/rs/sec_not_auth.yml +49 -0
- data/spec/support/sdam/rs/secondary_wrong_set_name.yml +28 -0
- data/spec/support/sdam/rs/secondary_wrong_set_name_with_primary.yml +69 -0
- data/spec/support/sdam/rs/unexpected_mongos.yml +26 -0
- data/spec/support/sdam/rs/wrong_set_name.yml +35 -0
- data/spec/support/sdam/sharded/multiple_mongoses.yml +46 -0
- data/spec/support/sdam/sharded/non_mongos_removed.yml +41 -0
- data/spec/support/sdam/sharded/normalize_uri_case.yml +32 -0
- data/spec/support/sdam/single/direct_connection_external_ip.yml +34 -0
- data/spec/support/sdam/single/direct_connection_mongos.yml +33 -0
- data/spec/support/sdam/single/direct_connection_rsarbiter.yml +35 -0
- data/spec/support/sdam/single/direct_connection_rsprimary.yml +34 -0
- data/spec/support/sdam/single/direct_connection_rssecondary.yml +35 -0
- data/spec/support/sdam/single/direct_connection_slave.yml +32 -0
- data/spec/support/sdam/single/direct_connection_standalone.yml +32 -0
- data/spec/support/sdam/single/not_ok_response.yml +39 -0
- data/spec/support/sdam/single/standalone_removed.yml +32 -0
- data/spec/support/sdam/single/unavailable_seed.yml +28 -0
- data/spec/support/server_discovery_and_monitoring.rb +167 -0
- data/spec/support/server_selection.rb +140 -0
- data/spec/support/server_selection/rtt/first_value.yml +4 -0
- data/spec/support/server_selection/rtt/first_value_zero.yml +4 -0
- data/spec/support/server_selection/rtt/value_test_1.yml +4 -0
- data/spec/support/server_selection/rtt/value_test_2.yml +4 -0
- data/spec/support/server_selection/rtt/value_test_3.yml +4 -0
- data/spec/support/server_selection/rtt/value_test_4.yml +4 -0
- data/spec/support/server_selection/rtt/value_test_5.yml +4 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest.yml +32 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest_non_matching.yml +27 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Primary.yml +23 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred.yml +32 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.yml +27 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary.yml +32 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred.yml +32 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.yml +27 -0
- data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary_non_matching.yml +27 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest.yml +41 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest_non_matching.yml +34 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Primary.yml +33 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred.yml +39 -0
- data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.yml +36 -0
- data/spec/support/server_selection/selection/Sharded/read/SecondaryPreferred.yml +32 -0
- data/spec/support/server_selection/selection/Single/read/SecondaryPreferred.yml +23 -0
- data/spec/support/server_selection/selection/Unknown/read/SecondaryPreferred.yml +13 -0
- data/spec/support/server_selection_rtt.rb +41 -0
- data/spec/support/shared/bulk_write.rb +498 -0
- data/spec/support/shared/cursor.rb +38 -0
- data/spec/support/shared/operation.rb +77 -0
- data/spec/support/shared/protocol.rb +31 -0
- data/spec/support/shared/server_selector.rb +111 -0
- data/spec/support/shared/socket.rb +82 -0
- data/spec/support/travis.rb +14 -0
- metadata +523 -189
- metadata.gz.sig +0 -0
- data/VERSION +0 -1
- data/lib/mongo/bulk_write_collection_view.rb +0 -387
- data/lib/mongo/collection_writer.rb +0 -364
- data/lib/mongo/connection/node.rb +0 -249
- data/lib/mongo/connection/pool.rb +0 -340
- data/lib/mongo/connection/pool_manager.rb +0 -320
- data/lib/mongo/connection/sharding_pool_manager.rb +0 -67
- data/lib/mongo/connection/socket/ssl_socket.rb +0 -95
- data/lib/mongo/connection/socket/tcp_socket.rb +0 -87
- data/lib/mongo/connection/socket/unix_socket.rb +0 -39
- data/lib/mongo/db.rb +0 -808
- data/lib/mongo/exception.rb +0 -145
- data/lib/mongo/functional/authentication.rb +0 -455
- data/lib/mongo/functional/logging.rb +0 -85
- data/lib/mongo/functional/read_preference.rb +0 -183
- data/lib/mongo/functional/scram.rb +0 -556
- data/lib/mongo/functional/uri_parser.rb +0 -409
- data/lib/mongo/functional/write_concern.rb +0 -66
- data/lib/mongo/gridfs/grid.rb +0 -112
- data/lib/mongo/gridfs/grid_ext.rb +0 -53
- data/lib/mongo/gridfs/grid_file_system.rb +0 -163
- data/lib/mongo/gridfs/grid_io.rb +0 -484
- data/lib/mongo/legacy.rb +0 -140
- data/lib/mongo/mongo_client.rb +0 -697
- data/lib/mongo/mongo_replica_set_client.rb +0 -535
- data/lib/mongo/mongo_sharded_client.rb +0 -159
- data/lib/mongo/networking.rb +0 -372
- data/lib/mongo/utils/conversions.rb +0 -110
- data/lib/mongo/utils/core_ext.rb +0 -70
- data/lib/mongo/utils/server_version.rb +0 -69
- data/lib/mongo/utils/support.rb +0 -80
- data/test/functional/authentication_test.rb +0 -39
- data/test/functional/bulk_api_stress_test.rb +0 -133
- data/test/functional/bulk_write_collection_view_test.rb +0 -1198
- data/test/functional/client_test.rb +0 -627
- data/test/functional/collection_test.rb +0 -2175
- data/test/functional/collection_writer_test.rb +0 -83
- data/test/functional/conversions_test.rb +0 -163
- data/test/functional/cursor_fail_test.rb +0 -57
- data/test/functional/cursor_message_test.rb +0 -56
- data/test/functional/cursor_test.rb +0 -683
- data/test/functional/db_api_test.rb +0 -835
- data/test/functional/db_test.rb +0 -348
- data/test/functional/grid_file_system_test.rb +0 -285
- data/test/functional/grid_io_test.rb +0 -252
- data/test/functional/grid_test.rb +0 -273
- data/test/functional/pool_test.rb +0 -136
- data/test/functional/safe_test.rb +0 -98
- data/test/functional/support_test.rb +0 -62
- data/test/functional/timeout_test.rb +0 -60
- data/test/functional/uri_test.rb +0 -446
- data/test/functional/write_concern_test.rb +0 -118
- data/test/helpers/general.rb +0 -50
- data/test/helpers/test_unit.rb +0 -476
- data/test/replica_set/authentication_test.rb +0 -37
- data/test/replica_set/basic_test.rb +0 -189
- data/test/replica_set/client_test.rb +0 -393
- data/test/replica_set/connection_test.rb +0 -138
- data/test/replica_set/count_test.rb +0 -66
- data/test/replica_set/cursor_test.rb +0 -220
- data/test/replica_set/insert_test.rb +0 -157
- data/test/replica_set/max_values_test.rb +0 -151
- data/test/replica_set/pinning_test.rb +0 -105
- data/test/replica_set/query_test.rb +0 -73
- data/test/replica_set/read_preference_test.rb +0 -219
- data/test/replica_set/refresh_test.rb +0 -211
- data/test/replica_set/replication_ack_test.rb +0 -95
- data/test/sharded_cluster/basic_test.rb +0 -203
- data/test/shared/authentication/basic_auth_shared.rb +0 -260
- data/test/shared/authentication/bulk_api_auth_shared.rb +0 -249
- data/test/shared/authentication/gssapi_shared.rb +0 -176
- data/test/shared/authentication/sasl_plain_shared.rb +0 -96
- data/test/shared/authentication/scram_shared.rb +0 -92
- data/test/shared/ssl_shared.rb +0 -235
- data/test/test_helper.rb +0 -61
- data/test/threading/basic_test.rb +0 -120
- data/test/tools/mongo_config.rb +0 -708
- data/test/tools/mongo_config_test.rb +0 -160
- data/test/unit/client_test.rb +0 -381
- data/test/unit/collection_test.rb +0 -166
- data/test/unit/connection_test.rb +0 -335
- data/test/unit/cursor_test.rb +0 -307
- data/test/unit/db_test.rb +0 -136
- data/test/unit/grid_test.rb +0 -76
- data/test/unit/mongo_sharded_client_test.rb +0 -48
- data/test/unit/node_test.rb +0 -93
- data/test/unit/pool_manager_test.rb +0 -111
- data/test/unit/read_pref_test.rb +0 -406
- data/test/unit/read_test.rb +0 -159
- data/test/unit/safe_test.rb +0 -158
- data/test/unit/sharding_pool_manager_test.rb +0 -84
- data/test/unit/write_concern_test.rb +0 -175
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Copyright (C) 2014-2015 MongoDB, Inc.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the 'License');
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an 'AS IS' BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
require 'mongo/address/ipv4'
|
|
16
|
+
require 'mongo/address/ipv6'
|
|
17
|
+
require 'mongo/address/unix'
|
|
18
|
+
|
|
19
|
+
module Mongo
|
|
20
|
+
|
|
21
|
+
# Represents an address to a server, either with an IP address or socket
|
|
22
|
+
# path.
|
|
23
|
+
#
|
|
24
|
+
# @since 2.0.0
|
|
25
|
+
class Address
|
|
26
|
+
extend Forwardable
|
|
27
|
+
|
|
28
|
+
# Delegate the ip, host, and port methods to the resolver.
|
|
29
|
+
#
|
|
30
|
+
# @since 2.0.0
|
|
31
|
+
def_delegators :@resolver, :host, :port, :socket, :seed, :to_s
|
|
32
|
+
|
|
33
|
+
# @return [ Integer ] port The port to the connect to.
|
|
34
|
+
attr_reader :resolver
|
|
35
|
+
|
|
36
|
+
# Check equality of the address to another.
|
|
37
|
+
#
|
|
38
|
+
# @example Check address equality.
|
|
39
|
+
# address == other
|
|
40
|
+
#
|
|
41
|
+
# @param [ Object ] other The other object.
|
|
42
|
+
#
|
|
43
|
+
# @return [ true, false ] If the objects are equal.
|
|
44
|
+
#
|
|
45
|
+
# @since 2.0.0
|
|
46
|
+
def ==(other)
|
|
47
|
+
return false unless other.is_a?(Address)
|
|
48
|
+
host == other.host && port == other.port
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Calculate the hash value for the address.
|
|
52
|
+
#
|
|
53
|
+
# @example Calculate the hash value.
|
|
54
|
+
# address.hash
|
|
55
|
+
#
|
|
56
|
+
# @return [ Integer ] The hash value.
|
|
57
|
+
#
|
|
58
|
+
# @since 2.0.0
|
|
59
|
+
def hash
|
|
60
|
+
[ host, port ].hash
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Initialize the address.
|
|
64
|
+
#
|
|
65
|
+
# @example Initialize the address with a DNS entry and port.
|
|
66
|
+
# Mongo::Address.new("app.example.com:27017")
|
|
67
|
+
#
|
|
68
|
+
# @example Initialize the address with a DNS entry and no port.
|
|
69
|
+
# Mongo::Address.new("app.example.com")
|
|
70
|
+
#
|
|
71
|
+
# @example Initialize the address with an IPV4 address and port.
|
|
72
|
+
# Mongo::Address.new("127.0.0.1:27017")
|
|
73
|
+
#
|
|
74
|
+
# @example Initialize the address with an IPV4 address and no port.
|
|
75
|
+
# Mongo::Address.new("127.0.0.1")
|
|
76
|
+
#
|
|
77
|
+
# @example Initialize the address with an IPV6 address and port.
|
|
78
|
+
# Mongo::Address.new("[::1]:27017")
|
|
79
|
+
#
|
|
80
|
+
# @example Initialize the address with an IPV6 address and no port.
|
|
81
|
+
# Mongo::Address.new("[::1]")
|
|
82
|
+
#
|
|
83
|
+
# @example Initialize the address with a unix socket.
|
|
84
|
+
# Mongo::Address.new("/path/to/socket.sock")
|
|
85
|
+
#
|
|
86
|
+
# @param [ String ] seed The provided address.
|
|
87
|
+
# @param [ Hash ] options The address options.
|
|
88
|
+
#
|
|
89
|
+
# @since 2.0.0
|
|
90
|
+
def initialize(seed, options = {})
|
|
91
|
+
address = seed.downcase
|
|
92
|
+
case address
|
|
93
|
+
when Unix::MATCH then @resolver = Unix.new(address)
|
|
94
|
+
when IPv6::MATCH then @resolver = IPv6.new(address)
|
|
95
|
+
else @resolver = IPv4.new(address)
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Get a pretty printed address inspection.
|
|
100
|
+
#
|
|
101
|
+
# @example Get the address inspection.
|
|
102
|
+
# address.inspect
|
|
103
|
+
#
|
|
104
|
+
# @return [ String ] The nice inspection string.
|
|
105
|
+
#
|
|
106
|
+
# @since 2.0.0
|
|
107
|
+
def inspect
|
|
108
|
+
"#<Mongo::Address:0x#{object_id} address=#{resolver.to_s}>"
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Copyright (C) 2014-2015 MongoDB, Inc.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the 'License');
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an 'AS IS' BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
module Mongo
|
|
16
|
+
class Address
|
|
17
|
+
|
|
18
|
+
# Sets up resolution with IPv4 support if the address is an ip
|
|
19
|
+
# address.
|
|
20
|
+
#
|
|
21
|
+
# @since 2.0.0
|
|
22
|
+
class IPv4
|
|
23
|
+
|
|
24
|
+
# @return [ String ] host The original host name.
|
|
25
|
+
attr_reader :host
|
|
26
|
+
|
|
27
|
+
# @return [ Integer ] port The port.
|
|
28
|
+
attr_reader :port
|
|
29
|
+
|
|
30
|
+
# @return [ String ] seed The seed address.
|
|
31
|
+
attr_reader :seed
|
|
32
|
+
|
|
33
|
+
# The regular expression to use to match an IPv4 ip address.
|
|
34
|
+
#
|
|
35
|
+
# @since 2.0.0
|
|
36
|
+
MATCH = Regexp.new('/\./').freeze
|
|
37
|
+
|
|
38
|
+
# Initialize the IPv4 resolver.
|
|
39
|
+
#
|
|
40
|
+
# @example Initialize the resolver.
|
|
41
|
+
# IPv4.new("127.0.0.1:28011")
|
|
42
|
+
#
|
|
43
|
+
# @param [ String ] address The address to resolve.
|
|
44
|
+
#
|
|
45
|
+
# @since 2.0.0
|
|
46
|
+
def initialize(address)
|
|
47
|
+
parts = address.split(':')
|
|
48
|
+
@host = parts[0]
|
|
49
|
+
@port = (parts[1] || 27017).to_i
|
|
50
|
+
@seed = address
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Get a socket for the provided address type, given the options.
|
|
54
|
+
#
|
|
55
|
+
# @example Get an IPv4 socket.
|
|
56
|
+
# ipv4.socket(5, :ssl => true)
|
|
57
|
+
#
|
|
58
|
+
# @param [ Float ] timeout The socket timeout.
|
|
59
|
+
# @param [ Hash ] ssl_options SSL options.
|
|
60
|
+
#
|
|
61
|
+
# @return [ Pool::Socket::SSL, Pool::Socket::TCP ] The socket.
|
|
62
|
+
#
|
|
63
|
+
# @since 2.0.0
|
|
64
|
+
def socket(timeout, ssl_options = {})
|
|
65
|
+
unless ssl_options.empty?
|
|
66
|
+
Socket::SSL.new(host, port, timeout, Socket::PF_INET, ssl_options)
|
|
67
|
+
else
|
|
68
|
+
Socket::TCP.new(host, port, timeout, Socket::PF_INET)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Get the address as a string.
|
|
73
|
+
#
|
|
74
|
+
# @example Get the address as a string.
|
|
75
|
+
# ipv4.to_s
|
|
76
|
+
#
|
|
77
|
+
# @return [ String ] The nice string.
|
|
78
|
+
#
|
|
79
|
+
# @since 2.0.0
|
|
80
|
+
def to_s
|
|
81
|
+
"#{host}:#{port}"
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Copyright (C) 2014-2015 MongoDB, Inc.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the 'License');
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an 'AS IS' BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
module Mongo
|
|
16
|
+
class Address
|
|
17
|
+
|
|
18
|
+
# Sets up resolution with IPv6 support if the address is an ip
|
|
19
|
+
# address.
|
|
20
|
+
#
|
|
21
|
+
# @since 2.0.0
|
|
22
|
+
class IPv6
|
|
23
|
+
|
|
24
|
+
# @return [ String ] host The original host name.
|
|
25
|
+
attr_reader :host
|
|
26
|
+
|
|
27
|
+
# @return [ Integer ] port The port.
|
|
28
|
+
attr_reader :port
|
|
29
|
+
|
|
30
|
+
# @return [ String ] seed The seed address.
|
|
31
|
+
attr_reader :seed
|
|
32
|
+
|
|
33
|
+
# The regular expression to use to match an IPv6 ip address.
|
|
34
|
+
#
|
|
35
|
+
# @since 2.0.0
|
|
36
|
+
MATCH = Regexp.new('::').freeze
|
|
37
|
+
|
|
38
|
+
# Initialize the IPv6 resolver.
|
|
39
|
+
#
|
|
40
|
+
# @example Initialize the resolver.
|
|
41
|
+
# IPv6.new("[::1]:28011")
|
|
42
|
+
#
|
|
43
|
+
# @param [ String ] address The address to resolve.
|
|
44
|
+
#
|
|
45
|
+
# @since 2.0.0
|
|
46
|
+
def initialize(address)
|
|
47
|
+
parts = address.match(/\[(.+)\]:?(.+)?/)
|
|
48
|
+
@host = parts[1]
|
|
49
|
+
@port = (parts[2] || 27017).to_i
|
|
50
|
+
@seed = address
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Get a socket for the provided address type, given the options.
|
|
54
|
+
#
|
|
55
|
+
# @example Get an IPv6 socket.
|
|
56
|
+
# ipv4.socket(5, :ssl => true)
|
|
57
|
+
#
|
|
58
|
+
# @param [ Float ] timeout The socket timeout.
|
|
59
|
+
# @param [ Hash ] ssl_options SSL options.
|
|
60
|
+
#
|
|
61
|
+
# @return [ Pool::Socket::SSL, Pool::Socket::TCP ] The socket.
|
|
62
|
+
#
|
|
63
|
+
# @since 2.0.0
|
|
64
|
+
def socket(timeout, ssl_options = {})
|
|
65
|
+
unless ssl_options.empty?
|
|
66
|
+
Socket::SSL.new(host, port, timeout, Socket::PF_INET6, ssl_options)
|
|
67
|
+
else
|
|
68
|
+
Socket::TCP.new(host, port, timeout, Socket::PF_INET6)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Get the address as a string.
|
|
73
|
+
#
|
|
74
|
+
# @example Get the address as a string.
|
|
75
|
+
# ipv4.to_s
|
|
76
|
+
#
|
|
77
|
+
# @return [ String ] The nice string.
|
|
78
|
+
#
|
|
79
|
+
# @since 2.0.0
|
|
80
|
+
def to_s
|
|
81
|
+
"#{host}:#{port}"
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Copyright (C) 2014-2015 MongoDB, Inc.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the 'License');
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an 'AS IS' BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
module Mongo
|
|
16
|
+
class Address
|
|
17
|
+
|
|
18
|
+
# Sets up socket addresses.
|
|
19
|
+
#
|
|
20
|
+
# @since 2.0.0
|
|
21
|
+
class Unix
|
|
22
|
+
|
|
23
|
+
# @return [ String ] host The original host name.
|
|
24
|
+
attr_reader :host
|
|
25
|
+
|
|
26
|
+
# @return [ nil ] port Will always be nil.
|
|
27
|
+
attr_reader :port
|
|
28
|
+
|
|
29
|
+
# @return [ String ] seed The seed address.
|
|
30
|
+
attr_reader :seed
|
|
31
|
+
|
|
32
|
+
# The regular expression to use to match a socket path.
|
|
33
|
+
#
|
|
34
|
+
# @since 2.0.0
|
|
35
|
+
MATCH = Regexp.new('\.sock').freeze
|
|
36
|
+
|
|
37
|
+
# Initialize the socket resolver.
|
|
38
|
+
#
|
|
39
|
+
# @example Initialize the resolver.
|
|
40
|
+
# Sock.new("/path/to/socket.sock")
|
|
41
|
+
#
|
|
42
|
+
# @param [ String ] address The socket path.
|
|
43
|
+
#
|
|
44
|
+
# @since 2.0.0
|
|
45
|
+
def initialize(address)
|
|
46
|
+
@host = address
|
|
47
|
+
@seed = address
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Get a socket for the provided address type, given the options.
|
|
51
|
+
#
|
|
52
|
+
# @example Get a Unix socket.
|
|
53
|
+
# ipv4.socket(5)
|
|
54
|
+
#
|
|
55
|
+
# @param [ Float ] timeout The socket timeout.
|
|
56
|
+
# @param [ Hash ] ssl_options SSL options - ignored.
|
|
57
|
+
#
|
|
58
|
+
# @return [ Pool::Socket::Unix ] The socket.
|
|
59
|
+
#
|
|
60
|
+
# @since 2.0.0
|
|
61
|
+
def socket(timeout, ssl_options = {})
|
|
62
|
+
Socket::Unix.new(host, timeout, Socket::AF_UNIX)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Get the address as a string.
|
|
66
|
+
#
|
|
67
|
+
# @example Get the address as a string.
|
|
68
|
+
# ipv4.to_s
|
|
69
|
+
#
|
|
70
|
+
# @return [ String ] The nice string.
|
|
71
|
+
#
|
|
72
|
+
# @since 2.0.0
|
|
73
|
+
alias :to_s :host
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
data/lib/mongo/auth.rb
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# Copyright (C) 2014-2015 MongoDB, Inc.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
require 'mongo/auth/executable'
|
|
16
|
+
require 'mongo/auth/cr'
|
|
17
|
+
require 'mongo/auth/ldap'
|
|
18
|
+
require 'mongo/auth/scram'
|
|
19
|
+
require 'mongo/auth/user'
|
|
20
|
+
require 'mongo/auth/x509'
|
|
21
|
+
require 'mongo/auth/roles'
|
|
22
|
+
|
|
23
|
+
module Mongo
|
|
24
|
+
|
|
25
|
+
# This namespace contains all authentication related behaviour.
|
|
26
|
+
#
|
|
27
|
+
# @since 2.0.0
|
|
28
|
+
module Auth
|
|
29
|
+
extend self
|
|
30
|
+
|
|
31
|
+
# The external database name.
|
|
32
|
+
#
|
|
33
|
+
# @since 2.0.0
|
|
34
|
+
EXTERNAL = '$external'.freeze
|
|
35
|
+
|
|
36
|
+
# Constant for the nonce command.
|
|
37
|
+
#
|
|
38
|
+
# @since 2.0.0
|
|
39
|
+
GET_NONCE = { getnonce: 1 }.freeze
|
|
40
|
+
|
|
41
|
+
# Constant for the nonce field.
|
|
42
|
+
#
|
|
43
|
+
# @since 2.0.0
|
|
44
|
+
NONCE = 'nonce'.freeze
|
|
45
|
+
|
|
46
|
+
# Map the symbols parsed from the URI connection string to strategies.
|
|
47
|
+
#
|
|
48
|
+
# @since 2.0.0
|
|
49
|
+
SOURCES = {
|
|
50
|
+
mongodb_cr: CR,
|
|
51
|
+
mongodb_x509: X509,
|
|
52
|
+
plain: LDAP,
|
|
53
|
+
scram: SCRAM
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
# Get the authorization strategy for the provided auth mechanism.
|
|
57
|
+
#
|
|
58
|
+
# @example Get the strategy.
|
|
59
|
+
# Auth.get(:mongodb_cr)
|
|
60
|
+
#
|
|
61
|
+
# @param [ Symbol ] mechanism The authorization mechanism.
|
|
62
|
+
#
|
|
63
|
+
# @return [ CR, X509, LDAP, Kerberos ] The auth strategy.
|
|
64
|
+
#
|
|
65
|
+
# @since 2.0.0
|
|
66
|
+
def get(user)
|
|
67
|
+
mechanism = user.mechanism
|
|
68
|
+
raise InvalidMechanism.new(mechanism) if !SOURCES.has_key?(mechanism)
|
|
69
|
+
SOURCES[mechanism].new(user)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Raised when trying to get an invalid authorization mechanism.
|
|
73
|
+
#
|
|
74
|
+
# @since 2.0.0
|
|
75
|
+
class InvalidMechanism < RuntimeError
|
|
76
|
+
|
|
77
|
+
# Instantiate the new error.
|
|
78
|
+
#
|
|
79
|
+
# @example Instantiate the error.
|
|
80
|
+
# Mongo::Auth::InvalidMechanism.new(:test)
|
|
81
|
+
#
|
|
82
|
+
# @param [ Symbol ] mechanism The provided mechanism.
|
|
83
|
+
#
|
|
84
|
+
# @since 2.0.0
|
|
85
|
+
def initialize(mechanism)
|
|
86
|
+
super("#{mechanism.inspect} is invalid, please use mongodb_cr, mongodb_x509, gssapi or plain.")
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# Raised when a user is not authorized on a database.
|
|
91
|
+
#
|
|
92
|
+
# @since 2.0.0
|
|
93
|
+
class Unauthorized < RuntimeError
|
|
94
|
+
|
|
95
|
+
# Instantiate the new error.
|
|
96
|
+
#
|
|
97
|
+
# @example Instantiate the error.
|
|
98
|
+
# Mongo::Auth::Unauthorized.new(user)
|
|
99
|
+
#
|
|
100
|
+
# @param [ Mongo::Auth::User ] user The unauthorized user.
|
|
101
|
+
#
|
|
102
|
+
# @since 2.0.0
|
|
103
|
+
def initialize(user)
|
|
104
|
+
super("User #{user.name} is not authorized to access #{user.database}.")
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|