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,103 @@
|
|
|
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
|
+
|
|
17
|
+
module Operation
|
|
18
|
+
|
|
19
|
+
# This module contains common functionality for splitting an operation
|
|
20
|
+
# into the specified number of children operations.
|
|
21
|
+
# An operation including this module must provide a method called
|
|
22
|
+
# #batch_key. It specifies the key of the spec array element to split.
|
|
23
|
+
#
|
|
24
|
+
# @since 2.0.0
|
|
25
|
+
module Batchable
|
|
26
|
+
|
|
27
|
+
# Slices this operation into the specified number of children operations.
|
|
28
|
+
#
|
|
29
|
+
# @params [ Integer ] n_batches The number of children operations to split
|
|
30
|
+
# this one into.
|
|
31
|
+
#
|
|
32
|
+
# @return [ Array ] An array of children operations.
|
|
33
|
+
#
|
|
34
|
+
# @since 2.0.0
|
|
35
|
+
def batch(n_batches)
|
|
36
|
+
items = spec[batch_key]
|
|
37
|
+
raise Exception, "Cannot batch" unless items.size >= n_batches
|
|
38
|
+
|
|
39
|
+
items_per_batch = items.size / n_batches
|
|
40
|
+
batches = items.each_slice(items_per_batch).to_a
|
|
41
|
+
index_batches = indexes.each_slice(items_per_batch).to_a
|
|
42
|
+
|
|
43
|
+
# #each_slice makes groups containing exactly items_per_batch number of items.
|
|
44
|
+
# You could therefore end up with more groups than n_batches, so put the
|
|
45
|
+
# remaining items in the last group.
|
|
46
|
+
if batches.size > n_batches
|
|
47
|
+
batches[n_batches - 1] << batches.pop(batches.size - n_batches)
|
|
48
|
+
batches[-1].flatten!
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
if index_batches.size > n_batches
|
|
52
|
+
index_batches[n_batches - 1] << index_batches.pop(index_batches.size - n_batches)
|
|
53
|
+
index_batches[-1].flatten!
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
batches.each_with_index.inject([]) do |children, (batch, i)|
|
|
57
|
+
spec_copy = spec.dup
|
|
58
|
+
spec_copy[:indexes] = index_batches[i]
|
|
59
|
+
spec_copy[batch_key] = batch
|
|
60
|
+
children << self.class.new(spec_copy)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Merge another operation with this one.
|
|
65
|
+
# Requires that the collection and database of the two ops are the same.
|
|
66
|
+
#
|
|
67
|
+
# @params[ Mongo::Operation ] The other operation.
|
|
68
|
+
#
|
|
69
|
+
# @return [ self ] This operation merged with the other one.
|
|
70
|
+
#
|
|
71
|
+
# @since 2.0.0
|
|
72
|
+
def merge!(other)
|
|
73
|
+
# @todo: use specific exception
|
|
74
|
+
raise Exception, "Cannot merge" unless self.class == other.class &&
|
|
75
|
+
coll_name == other.coll_name &&
|
|
76
|
+
db_name == other.db_name
|
|
77
|
+
@spec[batch_key] += other.spec[batch_key]
|
|
78
|
+
@spec[:indexes] = indexes + other.indexes
|
|
79
|
+
self
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Determine if the batch size exceeds a given maximum.
|
|
83
|
+
#
|
|
84
|
+
# @params[ Integer ] The max batch size.
|
|
85
|
+
#
|
|
86
|
+
# @return [ true, false ] If this operation exceeds the given batch size.
|
|
87
|
+
#
|
|
88
|
+
# @since 2.0.0
|
|
89
|
+
def valid_batch_size?(max)
|
|
90
|
+
spec[batch_key].size < max
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# Whether this operation can be split into batches.
|
|
94
|
+
#
|
|
95
|
+
# @return [ true, false ] If this operation can be split into batches.
|
|
96
|
+
#
|
|
97
|
+
# @since 2.0.0
|
|
98
|
+
def batchable?
|
|
99
|
+
spec[batch_key].size > 1
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
# Copyright (C) 2014-2015 MongoDB, Inc.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
module Mongo
|
|
16
|
+
module Operation
|
|
17
|
+
module Write
|
|
18
|
+
class BulkDelete
|
|
19
|
+
|
|
20
|
+
# Defines custom behaviour of results when deleting.
|
|
21
|
+
#
|
|
22
|
+
# @since 2.0.0
|
|
23
|
+
class Result < Operation::Result
|
|
24
|
+
|
|
25
|
+
attr_reader :indexes
|
|
26
|
+
|
|
27
|
+
# The aggregate number of deleted docs reported in the replies.
|
|
28
|
+
#
|
|
29
|
+
# @since 2.0.0
|
|
30
|
+
REMOVED = 'nRemoved'.freeze
|
|
31
|
+
|
|
32
|
+
# Gets the number of documents deleted.
|
|
33
|
+
#
|
|
34
|
+
# @example Get the deleted count.
|
|
35
|
+
# result.n_removed
|
|
36
|
+
#
|
|
37
|
+
# @return [ Integer ] The number of documents deleted.
|
|
38
|
+
#
|
|
39
|
+
# @since 2.0.0
|
|
40
|
+
def n_removed
|
|
41
|
+
return 0 unless acknowledged?
|
|
42
|
+
@replies.reduce(0) do |n, reply|
|
|
43
|
+
n += reply.documents.first[N]
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Set a list of indexes of the operations creating this result.
|
|
48
|
+
#
|
|
49
|
+
# @example Set the list of indexes.
|
|
50
|
+
# result.set_indexes([1,2,3])
|
|
51
|
+
#
|
|
52
|
+
# @return [ self ] The result.
|
|
53
|
+
#
|
|
54
|
+
# @since 2.0.0
|
|
55
|
+
def set_indexes(indexes)
|
|
56
|
+
@indexes = indexes
|
|
57
|
+
self
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Aggregate the write errors returned from this result.
|
|
61
|
+
#
|
|
62
|
+
# @example Aggregate the write errors.
|
|
63
|
+
# result.aggregate_write_errors
|
|
64
|
+
#
|
|
65
|
+
# @return [ Array ] The aggregate write errors.
|
|
66
|
+
#
|
|
67
|
+
# @since 2.0.0
|
|
68
|
+
def aggregate_write_errors
|
|
69
|
+
@replies.reduce(nil) do |errors, reply|
|
|
70
|
+
if write_errors = reply.documents.first['writeErrors']
|
|
71
|
+
errors ||= []
|
|
72
|
+
write_errors.each do |write_error|
|
|
73
|
+
errors << write_error.merge('index' => indexes[write_error['index']])
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
errors
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# Aggregate the write concern errors returned from this result.
|
|
81
|
+
#
|
|
82
|
+
# @example Aggregate the write concern errors.
|
|
83
|
+
# result.aggregate_write_concern_errors
|
|
84
|
+
#
|
|
85
|
+
# @return [ Array ] The aggregate write concern errors.
|
|
86
|
+
#
|
|
87
|
+
# @since 2.0.0
|
|
88
|
+
def aggregate_write_concern_errors
|
|
89
|
+
@replies.reduce(nil) do |errors, reply|
|
|
90
|
+
if write_concern_errors = reply.documents.first['writeConcernErrors']
|
|
91
|
+
errors ||= []
|
|
92
|
+
write_concern_errors.each do |write_concern_error|
|
|
93
|
+
errors << write_concern_error.merge('index' =>
|
|
94
|
+
indexes[write_concern_error['index']])
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
errors
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# Defines custom behaviour of results when deleting.
|
|
103
|
+
# For server versions < 2.5.5 (that don't use write commands).
|
|
104
|
+
#
|
|
105
|
+
# @since 2.0.0
|
|
106
|
+
class LegacyResult < Operation::Result
|
|
107
|
+
|
|
108
|
+
attr_reader :indexes
|
|
109
|
+
|
|
110
|
+
# Gets the number of documents deleted.
|
|
111
|
+
#
|
|
112
|
+
# @example Get the deleted count.
|
|
113
|
+
# result.n_removed
|
|
114
|
+
#
|
|
115
|
+
# @return [ Integer ] The number of documents deleted.
|
|
116
|
+
#
|
|
117
|
+
# @since 2.0.0
|
|
118
|
+
def n_removed
|
|
119
|
+
return 0 unless acknowledged?
|
|
120
|
+
@replies.reduce(0) do |n, reply|
|
|
121
|
+
n += reply.documents.first[N]
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
# Set a list of indexes of the operations creating this result.
|
|
126
|
+
#
|
|
127
|
+
# @example Set the list of indexes.
|
|
128
|
+
# result.set_indexes([1,2,3])
|
|
129
|
+
#
|
|
130
|
+
# @return [ self ] The result.
|
|
131
|
+
#
|
|
132
|
+
# @since 2.0.0
|
|
133
|
+
def set_indexes(indexes)
|
|
134
|
+
@indexes = indexes
|
|
135
|
+
self
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# Aggregate the write errors returned from this result.
|
|
139
|
+
#
|
|
140
|
+
# @example Aggregate the write errors.
|
|
141
|
+
# result.aggregate_write_errors
|
|
142
|
+
#
|
|
143
|
+
# @return [ Array ] The aggregate write errors.
|
|
144
|
+
#
|
|
145
|
+
# @since 2.0.0
|
|
146
|
+
def aggregate_write_errors
|
|
147
|
+
@replies.each_with_index.reduce(nil) do |errors, (reply, i)|
|
|
148
|
+
if reply_write_errors?(reply)
|
|
149
|
+
errors ||= []
|
|
150
|
+
errors << { 'errmsg' => reply.documents.first[Error::ERROR],
|
|
151
|
+
'index' => indexes[i],
|
|
152
|
+
'code' => reply.documents.first[Error::CODE] }
|
|
153
|
+
end
|
|
154
|
+
errors
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
# Aggregate the write concern errors returned from this result.
|
|
159
|
+
#
|
|
160
|
+
# @example Aggregate the write concern errors.
|
|
161
|
+
# result.aggregate_write_concern_errors
|
|
162
|
+
#
|
|
163
|
+
# @return [ Array ] The aggregate write concern errors.
|
|
164
|
+
#
|
|
165
|
+
# @since 2.0.0
|
|
166
|
+
def aggregate_write_concern_errors
|
|
167
|
+
@replies.each_with_index.reduce(nil) do |errors, (reply, i)|
|
|
168
|
+
# @todo: only raise if error is timeout
|
|
169
|
+
if error = reply_write_errors?(reply)
|
|
170
|
+
errors ||= []
|
|
171
|
+
note = reply.documents.first['wnote'] || reply.documents.first['jnote']
|
|
172
|
+
if note
|
|
173
|
+
code = reply.documents.first['code'] || Error::BAD_VALUE
|
|
174
|
+
error_string = "#{code}: #{note}"
|
|
175
|
+
else
|
|
176
|
+
code = reply.documents.first['code'] || Error::UNKNOWN_ERROR
|
|
177
|
+
error_string = "#{code}: #{error}"
|
|
178
|
+
end
|
|
179
|
+
errors << { 'errmsg' => error_string,
|
|
180
|
+
'index' => indexes[i],
|
|
181
|
+
'code' => code }
|
|
182
|
+
end
|
|
183
|
+
errors
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
private
|
|
188
|
+
|
|
189
|
+
def reply_write_errors?(reply)
|
|
190
|
+
reply.documents.first[Error::ERROR] ||
|
|
191
|
+
reply.documents.first[Error::ERRMSG]
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
end
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# Copyright (C) 2014-2015 MongoDB, Inc.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
module Mongo
|
|
16
|
+
module Operation
|
|
17
|
+
module Write
|
|
18
|
+
class BulkInsert
|
|
19
|
+
|
|
20
|
+
# Defines custom behaviour of results when inserting.
|
|
21
|
+
#
|
|
22
|
+
# @since 2.0.0
|
|
23
|
+
class Result < Operation::Result
|
|
24
|
+
|
|
25
|
+
attr_reader :indexes
|
|
26
|
+
|
|
27
|
+
# Gets the number of documents inserted.
|
|
28
|
+
#
|
|
29
|
+
# @example Get the number of documents inserted.
|
|
30
|
+
# result.n_inserted
|
|
31
|
+
#
|
|
32
|
+
# @return [ Integer ] The number of documents inserted.
|
|
33
|
+
#
|
|
34
|
+
# @since 2.0.0
|
|
35
|
+
def n_inserted
|
|
36
|
+
written_count
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Set a list of indexes of the operations creating this result.
|
|
40
|
+
#
|
|
41
|
+
# @example Set the list of indexes.
|
|
42
|
+
# result.set_indexes([1,2,3])
|
|
43
|
+
#
|
|
44
|
+
# @return [ self ] The result.
|
|
45
|
+
#
|
|
46
|
+
# @since 2.0.0
|
|
47
|
+
def set_indexes(indexes)
|
|
48
|
+
@indexes = indexes
|
|
49
|
+
self
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Aggregate the write errors returned from this result.
|
|
53
|
+
#
|
|
54
|
+
# @example Aggregate the write errors.
|
|
55
|
+
# result.aggregate_write_errors
|
|
56
|
+
#
|
|
57
|
+
# @return [ Array ] The aggregate write errors.
|
|
58
|
+
#
|
|
59
|
+
# @since 2.0.0
|
|
60
|
+
def aggregate_write_errors
|
|
61
|
+
@replies.reduce(nil) do |errors, reply|
|
|
62
|
+
if write_errors = reply.documents.first['writeErrors']
|
|
63
|
+
errors ||= []
|
|
64
|
+
write_errors.each do |write_error|
|
|
65
|
+
errors << write_error.merge('index' => indexes[write_error['index']])
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
errors
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Aggregate the write concern errors returned from this result.
|
|
73
|
+
#
|
|
74
|
+
# @example Aggregate the write concern errors.
|
|
75
|
+
# result.aggregate_write_concern_errors
|
|
76
|
+
#
|
|
77
|
+
# @return [ Array ] The aggregate write concern errors.
|
|
78
|
+
#
|
|
79
|
+
# @since 2.0.0
|
|
80
|
+
def aggregate_write_concern_errors
|
|
81
|
+
@replies.each_with_index.reduce(nil) do |errors, (reply, i)|
|
|
82
|
+
if write_concern_errors = reply.documents.first['writeConcernError']
|
|
83
|
+
errors ||= []
|
|
84
|
+
write_concern_errors.each do |write_concern_error|
|
|
85
|
+
errors << write_concern_error.merge('index' =>
|
|
86
|
+
indexes[write_concern_error['index']])
|
|
87
|
+
end
|
|
88
|
+
elsif reply.documents.first['errmsg']
|
|
89
|
+
errors ||= []
|
|
90
|
+
errors << { 'errmsg' => reply.documents.first['errmsg'],
|
|
91
|
+
'index' => indexes[i],
|
|
92
|
+
'code' => reply.documents.first['code'] }
|
|
93
|
+
end
|
|
94
|
+
errors
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Defines custom behaviour of results when inserting.
|
|
100
|
+
# For server versions < 2.5.5 (that don't use write commands).
|
|
101
|
+
#
|
|
102
|
+
# @since 2.0.0
|
|
103
|
+
class LegacyResult < Operation::Result
|
|
104
|
+
|
|
105
|
+
attr_reader :indexes
|
|
106
|
+
|
|
107
|
+
# Gets the number of documents inserted.
|
|
108
|
+
#
|
|
109
|
+
# @example Get the number of documents inserted.
|
|
110
|
+
# result.n_inserted
|
|
111
|
+
#
|
|
112
|
+
# @return [ Integer ] The number of documents inserted.
|
|
113
|
+
#
|
|
114
|
+
# @since 2.0.0
|
|
115
|
+
def n_inserted
|
|
116
|
+
return 0 unless acknowledged?
|
|
117
|
+
@replies.reduce(0) do |n, reply|
|
|
118
|
+
n += 1 unless reply_write_errors?(reply)
|
|
119
|
+
n
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# Set a list of indexes of the operations creating this result.
|
|
124
|
+
#
|
|
125
|
+
# @example Set the list of indexes.
|
|
126
|
+
# result.set_indexes([1,2,3])
|
|
127
|
+
#
|
|
128
|
+
# @return [ self ] The result.
|
|
129
|
+
#
|
|
130
|
+
# @since 2.0.0
|
|
131
|
+
def set_indexes(indexes)
|
|
132
|
+
@indexes = indexes
|
|
133
|
+
self
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
# Aggregate the write errors returned from this result.
|
|
137
|
+
#
|
|
138
|
+
# @example Aggregate the write errors.
|
|
139
|
+
# result.aggregate_write_errors
|
|
140
|
+
#
|
|
141
|
+
# @return [ Array ] The aggregate write errors.
|
|
142
|
+
#
|
|
143
|
+
# @since 2.0.0
|
|
144
|
+
def aggregate_write_errors
|
|
145
|
+
@replies.each_with_index.reduce(nil) do |errors, (reply, i)|
|
|
146
|
+
if reply_write_errors?(reply)
|
|
147
|
+
errors ||= []
|
|
148
|
+
errors << { 'errmsg' => reply.documents.first[Error::ERROR],
|
|
149
|
+
'index' => indexes[i],
|
|
150
|
+
'code' => reply.documents.first[Error::CODE] }
|
|
151
|
+
end
|
|
152
|
+
errors
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
# Aggregate the write concern errors returned from this result.
|
|
157
|
+
#
|
|
158
|
+
# @example Aggregate the write concern errors.
|
|
159
|
+
# result.aggregate_write_concern_errors
|
|
160
|
+
#
|
|
161
|
+
# @return [ Array ] The aggregate write concern errors.
|
|
162
|
+
#
|
|
163
|
+
# @since 2.0.0
|
|
164
|
+
def aggregate_write_concern_errors
|
|
165
|
+
@replies.each_with_index.reduce(nil) do |errors, (reply, i)|
|
|
166
|
+
# @todo: only raise if error is timeout
|
|
167
|
+
if error = reply_write_errors?(reply)
|
|
168
|
+
errors ||= []
|
|
169
|
+
note = reply.documents.first['wnote'] || reply.documents.first['jnote']
|
|
170
|
+
if note
|
|
171
|
+
code = reply.documents.first['code'] || "bad value constant"
|
|
172
|
+
error_string = "#{code}: #{note}"
|
|
173
|
+
else
|
|
174
|
+
code = reply.documents.first['code'] || "unknown error constant"
|
|
175
|
+
error_string = "#{code}: #{error}"
|
|
176
|
+
end
|
|
177
|
+
errors << { 'errmsg' => error_string,
|
|
178
|
+
'index' => indexes[i],
|
|
179
|
+
'code' => code }
|
|
180
|
+
end
|
|
181
|
+
errors
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
private
|
|
186
|
+
|
|
187
|
+
def reply_write_errors?(reply)
|
|
188
|
+
reply.documents.first[Error::ERROR] ||
|
|
189
|
+
reply.documents.first[Error::ERRMSG]
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
end
|