mongo 2.15.0 → 2.16.0.alpha1
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 +1 -1
- data/README.md +1 -1
- data/lib/mongo/bulk_write.rb +2 -2
- data/lib/mongo/client.rb +45 -5
- data/lib/mongo/cluster/periodic_executor.rb +4 -3
- data/lib/mongo/cluster/reapers/cursor_reaper.rb +76 -43
- data/lib/mongo/cluster/sdam_flow.rb +9 -3
- data/lib/mongo/cluster/topology/base.rb +13 -9
- data/lib/mongo/cluster/topology/load_balanced.rb +102 -0
- data/lib/mongo/cluster/topology.rb +28 -8
- data/lib/mongo/cluster.rb +136 -51
- data/lib/mongo/collection/view/aggregation.rb +5 -10
- data/lib/mongo/collection/view/builder/aggregation.rb +6 -5
- data/lib/mongo/collection/view/builder/map_reduce.rb +12 -49
- data/lib/mongo/collection/view/builder.rb +0 -4
- data/lib/mongo/collection/view/iterable.rb +58 -24
- data/lib/mongo/collection/view/map_reduce.rb +39 -15
- data/lib/mongo/collection/view/readable.rb +60 -51
- data/lib/mongo/collection/view/writable.rb +178 -175
- data/lib/mongo/collection/view.rb +15 -21
- data/lib/mongo/collection.rb +13 -13
- data/lib/mongo/cursor/kill_spec.rb +38 -0
- data/lib/mongo/cursor.rb +72 -31
- data/lib/mongo/database/view.rb +1 -1
- data/lib/mongo/error/bad_load_balancer_target.rb +26 -0
- data/lib/mongo/error/missing_service_id.rb +26 -0
- data/lib/mongo/error/no_service_connection_available.rb +49 -0
- data/lib/mongo/error/notable.rb +7 -0
- data/lib/mongo/error.rb +3 -0
- data/lib/mongo/grid/fs_bucket.rb +21 -2
- data/lib/mongo/id.rb +7 -5
- data/lib/mongo/index/view.rb +22 -41
- data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +7 -4
- data/lib/mongo/monitoring/event/command_failed.rb +1 -1
- data/lib/mongo/monitoring/event/command_started.rb +2 -0
- data/lib/mongo/monitoring/publishable.rb +2 -2
- data/lib/mongo/operation/aggregate/command.rb +8 -0
- data/lib/mongo/operation/context.rb +19 -1
- data/lib/mongo/operation/count/command.rb +6 -0
- data/lib/mongo/operation/count/op_msg.rb +6 -0
- data/lib/mongo/operation/create/command.rb +7 -1
- data/lib/mongo/operation/create/op_msg.rb +7 -0
- data/lib/mongo/operation/create_index/command.rb +17 -1
- data/lib/mongo/operation/create_index/op_msg.rb +17 -4
- data/lib/mongo/operation/delete/command.rb +6 -3
- data/lib/mongo/operation/delete/legacy.rb +9 -2
- data/lib/mongo/operation/delete/op_msg.rb +8 -1
- data/lib/mongo/operation/distinct/command.rb +6 -0
- data/lib/mongo/operation/distinct/op_msg.rb +7 -0
- data/lib/mongo/operation/explain/command.rb +13 -1
- data/lib/mongo/operation/explain/legacy.rb +12 -5
- data/lib/mongo/operation/explain/op_msg.rb +9 -1
- data/lib/mongo/operation/find/builder/command.rb +110 -0
- data/lib/mongo/{collection/view → operation/find}/builder/flags.rb +10 -14
- data/lib/mongo/operation/find/builder/legacy.rb +123 -0
- data/lib/mongo/{collection/view → operation/find}/builder/modifiers.rb +31 -25
- data/lib/mongo/{cursor → operation/find}/builder.rb +4 -4
- data/lib/mongo/operation/find/command.rb +9 -0
- data/lib/mongo/operation/find/legacy.rb +10 -1
- data/lib/mongo/operation/find/op_msg.rb +12 -0
- data/lib/mongo/operation/find.rb +1 -0
- data/lib/mongo/operation/get_more/command.rb +1 -0
- data/lib/mongo/operation/get_more/command_builder.rb +38 -0
- data/lib/mongo/operation/get_more/op_msg.rb +1 -0
- data/lib/mongo/operation/get_more.rb +1 -0
- data/lib/mongo/operation/kill_cursors/command.rb +8 -0
- data/lib/mongo/operation/kill_cursors/command_builder.rb +35 -0
- data/lib/mongo/operation/kill_cursors/legacy.rb +2 -1
- data/lib/mongo/operation/kill_cursors/op_msg.rb +10 -0
- data/lib/mongo/operation/kill_cursors.rb +1 -0
- data/lib/mongo/operation/map_reduce/command.rb +8 -0
- data/lib/mongo/operation/map_reduce/op_msg.rb +1 -1
- data/lib/mongo/operation/shared/executable.rb +15 -1
- data/lib/mongo/operation/shared/polymorphic_operation.rb +1 -1
- data/lib/mongo/operation/shared/read_preference_supported.rb +3 -1
- data/lib/mongo/operation/shared/response_handling.rb +1 -0
- data/lib/mongo/operation/shared/sessions_supported.rb +12 -12
- data/lib/mongo/operation/shared/specifiable.rb +11 -29
- data/lib/mongo/operation/shared/validatable.rb +87 -0
- data/lib/mongo/operation/shared/write.rb +1 -1
- data/lib/mongo/operation/update/command.rb +6 -3
- data/lib/mongo/operation/update/legacy.rb +19 -11
- data/lib/mongo/operation/update/op_msg.rb +7 -4
- data/lib/mongo/operation/write_command/command.rb +51 -0
- data/lib/mongo/operation/write_command/op_msg.rb +43 -0
- data/lib/mongo/operation/write_command.rb +32 -0
- data/lib/mongo/operation.rb +10 -0
- data/lib/mongo/protocol/query.rb +35 -18
- data/lib/mongo/server/connection.rb +25 -3
- data/lib/mongo/server/connection_base.rb +12 -1
- data/lib/mongo/server/connection_common.rb +38 -1
- data/lib/mongo/server/connection_pool/generation_manager.rb +71 -0
- data/lib/mongo/server/connection_pool.rb +100 -27
- data/lib/mongo/server/description/features.rb +17 -16
- data/lib/mongo/server/description/load_balancer.rb +33 -0
- data/lib/mongo/server/description.rb +85 -6
- data/lib/mongo/server/monitor/connection.rb +5 -6
- data/lib/mongo/server/monitor.rb +2 -1
- data/lib/mongo/server/pending_connection.rb +47 -31
- data/lib/mongo/server/push_monitor.rb +6 -0
- data/lib/mongo/server.rb +73 -26
- data/lib/mongo/server_selector/base.rb +5 -1
- data/lib/mongo/session/session_pool.rb +11 -0
- data/lib/mongo/session.rb +21 -1
- data/lib/mongo/socket/ocsp_verifier.rb +6 -37
- data/lib/mongo/uri/options_mapper.rb +1 -0
- data/lib/mongo/uri/srv_protocol.rb +6 -8
- data/lib/mongo/uri.rb +18 -0
- data/lib/mongo/utils.rb +0 -7
- data/lib/mongo/version.rb +1 -1
- data/mongo.gemspec +1 -1
- data/spec/integration/auth_spec.rb +31 -1
- data/spec/integration/awaited_ismaster_spec.rb +1 -1
- data/spec/integration/bulk_write_spec.rb +1 -1
- data/spec/integration/change_stream_spec.rb +3 -3
- data/spec/integration/client_construction_spec.rb +54 -0
- data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +1 -1
- data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +1 -1
- data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +1 -1
- data/spec/integration/client_side_encryption/data_key_spec.rb +1 -1
- data/spec/integration/client_spec.rb +2 -0
- data/spec/integration/command_monitoring_spec.rb +1 -1
- data/spec/integration/command_spec.rb +1 -1
- data/spec/integration/connection_spec.rb +52 -35
- data/spec/integration/crud_spec.rb +174 -1
- data/spec/integration/cursor_pinning_spec.rb +121 -0
- data/spec/integration/cursor_reaping_spec.rb +8 -4
- data/spec/integration/fork_reconnect_spec.rb +1 -5
- data/spec/integration/get_more_spec.rb +1 -1
- data/spec/integration/heartbeat_events_spec.rb +1 -1
- data/spec/integration/map_reduce_spec.rb +77 -0
- data/spec/integration/query_cache_spec.rb +47 -2
- data/spec/integration/query_cache_transactions_spec.rb +1 -1
- data/spec/integration/read_concern_spec.rb +1 -1
- data/spec/integration/read_preference_spec.rb +1 -1
- data/spec/integration/reconnect_spec.rb +30 -12
- data/spec/integration/retryable_errors_spec.rb +1 -1
- data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +1 -1
- data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +1 -1
- data/spec/integration/sdam_error_handling_spec.rb +5 -3
- data/spec/integration/sdam_events_spec.rb +35 -19
- data/spec/integration/sdam_prose_spec.rb +1 -1
- data/spec/integration/server_monitor_spec.rb +1 -0
- data/spec/integration/server_selector_spec.rb +22 -5
- data/spec/integration/server_spec.rb +2 -0
- data/spec/integration/srv_monitoring_spec.rb +1 -1
- data/spec/integration/step_down_spec.rb +1 -1
- data/spec/integration/transaction_pinning_spec.rb +120 -0
- data/spec/integration/versioned_api_examples_spec.rb +45 -0
- data/spec/integration/x509_auth_spec.rb +1 -1
- data/spec/lite_spec_helper.rb +1 -2
- data/spec/mongo/address/unix_spec.rb +1 -0
- data/spec/mongo/auth/cr_spec.rb +2 -3
- data/spec/mongo/auth/ldap_spec.rb +2 -3
- data/spec/mongo/auth/scram_spec.rb +2 -3
- data/spec/mongo/auth/user/view_spec.rb +1 -1
- data/spec/mongo/auth/x509_spec.rb +2 -3
- data/spec/mongo/bulk_write_spec.rb +3 -3
- data/spec/mongo/client_construction_spec.rb +259 -28
- data/spec/mongo/client_spec.rb +6 -4
- data/spec/mongo/cluster/cursor_reaper_spec.rb +36 -21
- data/spec/mongo/cluster/periodic_executor_spec.rb +3 -1
- data/spec/mongo/cluster_spec.rb +44 -3
- data/spec/mongo/collection/view/aggregation_spec.rb +1 -1
- data/spec/mongo/collection/view/builder/find_command_spec.rb +4 -0
- data/spec/mongo/collection/view/builder/op_query_spec.rb +4 -0
- data/spec/mongo/collection/view/map_reduce_spec.rb +1 -1
- data/spec/mongo/collection_crud_spec.rb +7 -2
- data/spec/mongo/collection_ddl_spec.rb +1 -1
- data/spec/mongo/collection_spec.rb +1 -1
- data/spec/mongo/cursor/builder/get_more_command_spec.rb +4 -0
- data/spec/mongo/cursor/builder/op_get_more_spec.rb +4 -0
- data/spec/mongo/cursor_spec.rb +15 -5
- data/spec/mongo/database_spec.rb +15 -15
- data/spec/mongo/error/operation_failure_heavy_spec.rb +1 -1
- data/spec/mongo/grid/fs_bucket_spec.rb +18 -12
- data/spec/mongo/grid/stream/write_spec.rb +3 -9
- data/spec/mongo/grid/stream_spec.rb +1 -1
- data/spec/mongo/index/view_spec.rb +2 -2
- data/spec/mongo/operation/delete/op_msg_spec.rb +1 -1
- data/spec/mongo/{collection/view → operation/find}/builder/flags_spec.rb +2 -2
- data/spec/mongo/{collection/view → operation/find}/builder/modifiers_spec.rb +2 -2
- data/spec/mongo/operation/find/legacy_spec.rb +1 -0
- data/spec/mongo/operation/insert/bulk_spec.rb +1 -1
- data/spec/mongo/operation/insert/op_msg_spec.rb +1 -1
- data/spec/mongo/operation/kill_cursors_spec.rb +4 -1
- data/spec/mongo/operation/read_preference_legacy_spec.rb +4 -0
- data/spec/mongo/operation/read_preference_op_msg_spec.rb +2 -0
- data/spec/mongo/operation/update/bulk_spec.rb +1 -1
- data/spec/mongo/operation/update/op_msg_spec.rb +1 -1
- data/spec/mongo/query_cache_spec.rb +6 -2
- data/spec/mongo/server/connection_common_spec.rb +62 -11
- data/spec/mongo/server/connection_pool_spec.rb +73 -7
- data/spec/mongo/server/connection_spec.rb +138 -43
- data/spec/mongo/server/description_spec.rb +1 -1
- data/spec/mongo/server/monitor_spec.rb +4 -3
- data/spec/mongo/session/session_pool_spec.rb +42 -10
- data/spec/mongo/session_transaction_spec.rb +15 -30
- data/spec/mongo/socket/unix_spec.rb +1 -0
- data/spec/mongo/uri_option_parsing_spec.rb +38 -5
- data/spec/runners/change_streams/test.rb +1 -1
- data/spec/runners/cmap.rb +1 -1
- data/spec/runners/connection_string.rb +7 -3
- data/spec/runners/crud/operation.rb +5 -3
- data/spec/runners/crud/requirement.rb +1 -0
- data/spec/runners/crud.rb +1 -1
- data/spec/runners/sdam.rb +2 -1
- data/spec/runners/transactions/test.rb +2 -2
- data/spec/runners/unified/assertions.rb +2 -3
- data/spec/runners/unified/event_subscriber.rb +2 -2
- data/spec/runners/unified/test.rb +3 -0
- data/spec/runners/unified.rb +1 -1
- data/spec/shared/lib/mrss/constraints.rb +11 -5
- data/spec/shared/lib/mrss/event_subscriber.rb +200 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +17 -12
- data/spec/shared/share/Dockerfile.erb +2 -1
- data/spec/shared/shlib/server.sh +70 -20
- data/spec/spec_tests/change_streams_spec.rb +1 -1
- data/spec/spec_tests/cmap_spec.rb +4 -1
- data/spec/spec_tests/command_monitoring_spec.rb +2 -2
- data/spec/spec_tests/data/command_monitoring/find.yml +9 -9
- data/spec/spec_tests/data/crud/read/aggregate-collation.yml +2 -1
- data/spec/spec_tests/data/crud/read/aggregate-out.yml +1 -0
- data/spec/spec_tests/data/crud/read/count-collation.yml +2 -1
- data/spec/spec_tests/data/crud/read/distinct-collation.yml +2 -1
- data/spec/spec_tests/data/crud/read/find-collation.yml +2 -1
- data/spec/spec_tests/data/crud/write/bulkWrite-collation.yml +2 -1
- data/spec/spec_tests/data/crud/write/deleteMany-collation.yml +2 -1
- data/spec/spec_tests/data/crud/write/deleteOne-collation.yml +2 -1
- data/spec/spec_tests/data/crud/write/findOneAndDelete-collation.yml +3 -2
- data/spec/spec_tests/data/crud/write/findOneAndReplace-collation.yml +2 -1
- data/spec/spec_tests/data/crud/write/findOneAndUpdate-collation.yml +3 -2
- data/spec/spec_tests/data/crud/write/replaceOne-collation.yml +3 -2
- data/spec/spec_tests/data/crud/write/updateMany-collation.yml +2 -1
- data/spec/spec_tests/data/crud/write/updateOne-collation.yml +2 -1
- data/spec/spec_tests/data/load_balancers/event-monitoring.yml +99 -0
- data/spec/spec_tests/data/load_balancers/lb-connection-establishment.yml +36 -0
- data/spec/spec_tests/data/load_balancers/non-lb-connection-establishment.yml +56 -0
- data/spec/spec_tests/data/load_balancers/server-selection.yml +50 -0
- data/spec/spec_tests/data/retryable_reads/changeStreams-client.watch-serverErrors.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/changeStreams-client.watch.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/changeStreams-db.coll.watch-serverErrors.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/changeStreams-db.coll.watch.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/changeStreams-db.watch-serverErrors.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/changeStreams-db.watch.yml +1 -1
- data/spec/spec_tests/data/retryable_reads/mapReduce.yml +3 -1
- data/spec/spec_tests/data/sdam/load-balanced/discover_load_balancer.yml +25 -0
- data/spec/spec_tests/data/sdam_integration/find-network-error.yml +2 -0
- data/spec/spec_tests/data/sdam_integration/find-shutdown-error.yml +2 -0
- data/spec/spec_tests/data/sdam_integration/hello-command-error.yml +3 -1
- data/spec/spec_tests/data/sdam_integration/hello-network-error.yml +3 -1
- data/spec/spec_tests/data/sdam_integration/hello-timeout.yml +2 -0
- data/spec/spec_tests/data/sdam_integration/insert-network-error.yml +2 -0
- data/spec/spec_tests/data/sdam_integration/insert-shutdown-error.yml +2 -0
- data/spec/spec_tests/data/sdam_monitoring/load_balancer.yml +65 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-directConnection.yml +13 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-replicaSet-errors.yml +6 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-multiple-hosts.yml +5 -0
- data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-txt.yml +10 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/direct-connection-false.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/direct-connection-true.yml +0 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/encoded-userinfo-and-db.yml +15 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/loadBalanced-false-txt.yml +10 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/longer-parent-in-return.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/misformatted-option.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/no-results.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/not-enough-parts.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/one-result-default-port.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/one-txt-record-multiple-strings.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/one-txt-record.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch1.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch2.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch3.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch4.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch5.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/returned-parent-too-short.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/returned-parent-wrong.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/two-results-default-port.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/two-results-nonstandard-port.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/two-txt-records.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-not-allowed-option.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-with-overridden-ssl-option.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-with-overridden-uri-option.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-with-unallowed-option.yml +0 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/uri-with-admin-database.yml +13 -0
- data/spec/spec_tests/data/seed_list_discovery/replica-set/uri-with-auth.yml +12 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/uri-with-port.yml +0 -0
- data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/uri-with-two-hosts.yml +0 -0
- data/spec/spec_tests/data/transactions/retryable-abort-errorLabels.yml +2 -0
- data/spec/spec_tests/data/transactions/retryable-abort.yml +2 -0
- data/spec/spec_tests/data/transactions/retryable-commit-errorLabels.yml +2 -0
- data/spec/spec_tests/data/transactions/retryable-commit.yml +2 -0
- data/spec/spec_tests/data/transactions/retryable-writes.yml +2 -0
- data/spec/spec_tests/data/uri_options/connection-options.yml +60 -0
- data/spec/spec_tests/load_balancers_spec.rb +15 -0
- data/spec/spec_tests/retryable_reads_spec.rb +2 -2
- data/spec/spec_tests/retryable_writes_spec.rb +1 -1
- data/spec/spec_tests/sdam_integration_spec.rb +1 -1
- data/spec/spec_tests/sdam_monitoring_spec.rb +10 -5
- data/spec/spec_tests/sdam_spec.rb +1 -1
- data/spec/spec_tests/seed_list_discovery_spec.rb +118 -0
- data/spec/spec_tests/uri_options_spec.rb +4 -4
- data/spec/stress/fork_reconnect_stress_spec.rb +1 -5
- data/spec/stress/push_monitor_close_spec.rb +44 -0
- data/spec/support/certificates/atlas-ocsp-ca.crt +82 -90
- data/spec/support/certificates/atlas-ocsp.crt +127 -122
- data/spec/support/common_shortcuts.rb +2 -3
- data/spec/support/matchers.rb +13 -0
- data/spec/support/shared/auth_context.rb +16 -0
- data/spec/support/shared/session.rb +2 -2
- data/spec/support/spec_config.rb +9 -10
- data/spec/support/using_hash.rb +31 -0
- data/spec/support/utils.rb +1 -1
- data.tar.gz.sig +2 -4
- metadata +1050 -1004
- metadata.gz.sig +0 -0
- data/lib/mongo/collection/view/builder/find_command.rb +0 -173
- data/lib/mongo/collection/view/builder/op_query.rb +0 -94
- data/lib/mongo/cursor/builder/get_more_command.rb +0 -80
- data/lib/mongo/cursor/builder/kill_cursors_command.rb +0 -111
- data/lib/mongo/cursor/builder/op_get_more.rb +0 -64
- data/lib/mongo/cursor/builder/op_kill_cursors.rb +0 -106
- data/lib/mongo/server/context.rb +0 -72
- data/spec/mongo/cursor/builder/op_kill_cursors_spec.rb +0 -66
- data/spec/runners/unified/using_hash.rb +0 -34
- data/spec/spec_tests/dns_seedlist_discovery_spec.rb +0 -79
- data/spec/support/event_subscriber.rb +0 -221
@@ -1,64 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
# encoding: utf-8
|
3
|
-
|
4
|
-
# Copyright (C) 2015-2020 MongoDB Inc.
|
5
|
-
#
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
-
# you may not use this file except in compliance with the License.
|
8
|
-
# You may obtain a copy of the License at
|
9
|
-
#
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
-
#
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
-
# See the License for the specific language governing permissions and
|
16
|
-
# limitations under the License.
|
17
|
-
|
18
|
-
module Mongo
|
19
|
-
class Cursor
|
20
|
-
module Builder
|
21
|
-
|
22
|
-
# Encapsulates behavior around generating an OP_GET_MORE specification.
|
23
|
-
#
|
24
|
-
# @since 2.2.0
|
25
|
-
class OpGetMore
|
26
|
-
extend Forwardable
|
27
|
-
|
28
|
-
# @return [ Cursor ] cursor The cursor.
|
29
|
-
attr_reader :cursor
|
30
|
-
|
31
|
-
def_delegators :@cursor, :collection_name, :database, :to_return
|
32
|
-
|
33
|
-
# Create the new builder.
|
34
|
-
#
|
35
|
-
# @example Create the builder.
|
36
|
-
# OpGetMore.new(cursor)
|
37
|
-
#
|
38
|
-
# @param [ Cursor ] cursor The cursor.
|
39
|
-
#
|
40
|
-
# @since 2.2.0
|
41
|
-
def initialize(cursor)
|
42
|
-
@cursor = cursor
|
43
|
-
end
|
44
|
-
|
45
|
-
# Get the specification.
|
46
|
-
#
|
47
|
-
# @example Get the specification.
|
48
|
-
# op_get_more.specification
|
49
|
-
#
|
50
|
-
# @return [ Hash ] The specification.
|
51
|
-
#
|
52
|
-
# @since 2.2.0
|
53
|
-
def specification
|
54
|
-
{
|
55
|
-
:to_return => to_return,
|
56
|
-
:cursor_id => BSON::Int64.new(cursor.id),
|
57
|
-
:db_name => database.name,
|
58
|
-
:coll_name => collection_name,
|
59
|
-
}
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
@@ -1,106 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
# encoding: utf-8
|
3
|
-
|
4
|
-
# Copyright (C) 2015-2020 MongoDB Inc.
|
5
|
-
#
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
-
# you may not use this file except in compliance with the License.
|
8
|
-
# You may obtain a copy of the License at
|
9
|
-
#
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
-
#
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
-
# See the License for the specific language governing permissions and
|
16
|
-
# limitations under the License.
|
17
|
-
|
18
|
-
module Mongo
|
19
|
-
class Cursor
|
20
|
-
module Builder
|
21
|
-
|
22
|
-
# Encapsulates behavior around generating an OP_KILL_CURSORS specification.
|
23
|
-
#
|
24
|
-
# @since 2.2.0
|
25
|
-
class OpKillCursors
|
26
|
-
extend Forwardable
|
27
|
-
|
28
|
-
# @return [ Cursor ] cursor The cursor.
|
29
|
-
attr_reader :cursor
|
30
|
-
|
31
|
-
def_delegators :@cursor, :collection_name, :database
|
32
|
-
|
33
|
-
# Create the new builder.
|
34
|
-
#
|
35
|
-
# @example Create the builder.
|
36
|
-
# OpKillCursors.new(cursor)
|
37
|
-
#
|
38
|
-
# @param [ Cursor ] cursor The cursor.
|
39
|
-
#
|
40
|
-
# @since 2.2.0
|
41
|
-
def initialize(cursor)
|
42
|
-
@cursor = cursor
|
43
|
-
end
|
44
|
-
|
45
|
-
# Get the specification.
|
46
|
-
#
|
47
|
-
# @example Get the specification.
|
48
|
-
# op_kill_cursors.specification
|
49
|
-
#
|
50
|
-
# @return [ Hash ] The specification.
|
51
|
-
#
|
52
|
-
# @since 2.2.0
|
53
|
-
def specification
|
54
|
-
{
|
55
|
-
coll_name: collection_name,
|
56
|
-
db_name: database.name,
|
57
|
-
cursor_ids: [ BSON::Int64.new(cursor.id) ],
|
58
|
-
}
|
59
|
-
end
|
60
|
-
|
61
|
-
class << self
|
62
|
-
|
63
|
-
# Update a specification's list of cursor ids.
|
64
|
-
#
|
65
|
-
# @example Update a specification's list of cursor ids.
|
66
|
-
# OpKillCursors.update_cursors(spec, ids)
|
67
|
-
#
|
68
|
-
# @return [ Hash ] The specification.
|
69
|
-
# @return [ Array<Integer> ] The ids to update with.
|
70
|
-
#
|
71
|
-
# @since 2.3.0
|
72
|
-
def update_cursors(spec, ids)
|
73
|
-
# Ruby 2.5+ can & BSON::Int64 instances.
|
74
|
-
# Ruby 2.4 and earlier cannot.
|
75
|
-
# Convert stored ids to Ruby integers for compatibility with
|
76
|
-
# older Rubies.
|
77
|
-
ids = get_cursors_list(spec) & ids
|
78
|
-
ids = ids.map do |cursor_id|
|
79
|
-
BSON::Int64.new(cursor_id)
|
80
|
-
end
|
81
|
-
spec.merge!(cursor_ids: ids)
|
82
|
-
end
|
83
|
-
|
84
|
-
# Get the list of cursor ids from a spec generated by this Builder.
|
85
|
-
#
|
86
|
-
# @example Get the list of cursor ids.
|
87
|
-
# OpKillCursors.cursors(spec)
|
88
|
-
#
|
89
|
-
# @return [ Array<Integer> ] The cursor ids.
|
90
|
-
#
|
91
|
-
# @since 2.3.0
|
92
|
-
def get_cursors_list(spec)
|
93
|
-
spec[:cursor_ids].map do |value|
|
94
|
-
if value.respond_to?(:value)
|
95
|
-
# bson-ruby >= 4.6.0
|
96
|
-
value.value
|
97
|
-
else
|
98
|
-
value.instance_variable_get('@integer')
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
data/lib/mongo/server/context.rb
DELETED
@@ -1,72 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
# encoding: utf-8
|
3
|
-
|
4
|
-
# Copyright (C) 2014-2020 MongoDB Inc.
|
5
|
-
#
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the 'License');
|
7
|
-
# you may not use this file except in compliance with the License.
|
8
|
-
# You may obtain a copy of the License at
|
9
|
-
#
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
-
#
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
13
|
-
# distributed under the License is distributed on an 'AS IS' BASIS,
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
-
# See the License for the specific language governing permissions and
|
16
|
-
# limitations under the License.
|
17
|
-
|
18
|
-
module Mongo
|
19
|
-
class Server
|
20
|
-
|
21
|
-
# Represents a context in which messages are sent to the server on a
|
22
|
-
# connection.
|
23
|
-
#
|
24
|
-
# @since 2.0.0
|
25
|
-
#
|
26
|
-
# @deprecated Will be removed in version 3.0
|
27
|
-
class Context
|
28
|
-
extend Forwardable
|
29
|
-
|
30
|
-
# Instantiate a server context.
|
31
|
-
#
|
32
|
-
# @example Instantiate a server context.
|
33
|
-
# Mongo::Server::Context.new(server)
|
34
|
-
#
|
35
|
-
# @param [ Mongo::Server ] server The server the context is for.
|
36
|
-
#
|
37
|
-
# @since 2.0.0
|
38
|
-
def initialize(server)
|
39
|
-
@server = server
|
40
|
-
end
|
41
|
-
|
42
|
-
# @return [ Mongo::Server ] server The server the context is for.
|
43
|
-
attr_reader :server
|
44
|
-
|
45
|
-
# Delegate state checks to the server.
|
46
|
-
def_delegators :@server,
|
47
|
-
:cluster,
|
48
|
-
:features,
|
49
|
-
:max_wire_version,
|
50
|
-
:max_write_batch_size,
|
51
|
-
:mongos?,
|
52
|
-
:primary?,
|
53
|
-
:secondary?,
|
54
|
-
:standalone?
|
55
|
-
|
56
|
-
# Execute a block of code with a connection, that is checked out of the
|
57
|
-
# pool and then checked back in.
|
58
|
-
#
|
59
|
-
# @example Send a message with the connection.
|
60
|
-
# context.with_connection do |connection|
|
61
|
-
# connection.dispatch([ command ])
|
62
|
-
# end
|
63
|
-
#
|
64
|
-
# @return [ Object ] The result of the block execution.
|
65
|
-
#
|
66
|
-
# @since 2.0.0
|
67
|
-
def with_connection(&block)
|
68
|
-
server.pool.with_connection(&block)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
@@ -1,66 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
# encoding: utf-8
|
3
|
-
|
4
|
-
require 'spec_helper'
|
5
|
-
|
6
|
-
describe Mongo::Cursor::Builder::OpKillCursors do
|
7
|
-
|
8
|
-
let(:reply) do
|
9
|
-
Mongo::Protocol::Reply.allocate.tap do |reply|
|
10
|
-
allow(reply).to receive(:cursor_id).and_return(8000)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
let(:description) do
|
15
|
-
Mongo::Server::Description.new(
|
16
|
-
double('description address'),
|
17
|
-
{ 'minWireVersion' => 0, 'maxWireVersion' => 2 }
|
18
|
-
)
|
19
|
-
end
|
20
|
-
|
21
|
-
let(:result) do
|
22
|
-
Mongo::Operation::Result.new(reply, description)
|
23
|
-
end
|
24
|
-
|
25
|
-
let(:view) do
|
26
|
-
Mongo::Collection::View.new(
|
27
|
-
authorized_collection,
|
28
|
-
{},
|
29
|
-
tailable: true,
|
30
|
-
max_time_ms: 100
|
31
|
-
)
|
32
|
-
end
|
33
|
-
|
34
|
-
let(:cursor) do
|
35
|
-
Mongo::Cursor.new(view, result, authorized_primary)
|
36
|
-
end
|
37
|
-
|
38
|
-
let(:builder) do
|
39
|
-
described_class.new(cursor)
|
40
|
-
end
|
41
|
-
|
42
|
-
describe '#specification' do
|
43
|
-
|
44
|
-
let(:specification) do
|
45
|
-
builder.specification
|
46
|
-
end
|
47
|
-
|
48
|
-
it 'includes the cursor ids' do
|
49
|
-
expect(specification[:cursor_ids]).to eq([BSON::Int64.new(8000)])
|
50
|
-
end
|
51
|
-
|
52
|
-
it 'includes the database name' do
|
53
|
-
expect(specification[:db_name]).to eq(SpecConfig.instance.test_db)
|
54
|
-
end
|
55
|
-
|
56
|
-
it 'includes the collection name' do
|
57
|
-
expect(specification[:coll_name]).to eq(TEST_COLL)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
describe '.get_cursors_list' do
|
62
|
-
it 'returns integer cursor ids' do
|
63
|
-
expect(described_class.get_cursors_list(builder.specification)).to eq([8000])
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
# encoding: utf-8
|
3
|
-
|
4
|
-
module Unified
|
5
|
-
|
6
|
-
class UsingHash < Hash
|
7
|
-
def use(key)
|
8
|
-
wrap(self[key]).tap do
|
9
|
-
delete(key)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
def use!(key)
|
14
|
-
wrap(fetch(key)).tap do
|
15
|
-
delete(key)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
def wrap(v)
|
22
|
-
case v
|
23
|
-
when Hash
|
24
|
-
self.class[v]
|
25
|
-
when Array
|
26
|
-
v.map do |subv|
|
27
|
-
wrap(subv)
|
28
|
-
end
|
29
|
-
else
|
30
|
-
v
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
@@ -1,79 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
# encoding: utf-8
|
3
|
-
|
4
|
-
require 'lite_spec_helper'
|
5
|
-
|
6
|
-
require 'runners/connection_string'
|
7
|
-
|
8
|
-
describe 'DNS Seedlist Discovery' do
|
9
|
-
require_external_connectivity
|
10
|
-
|
11
|
-
include Mongo::ConnectionString
|
12
|
-
|
13
|
-
DNS_SEEDLIST_DISCOVERY_TESTS.each do |test_path|
|
14
|
-
|
15
|
-
spec = YAML.load(File.read(test_path))
|
16
|
-
|
17
|
-
test = Mongo::ConnectionString::Test.new(spec)
|
18
|
-
|
19
|
-
context(File.basename(test_path)) do
|
20
|
-
|
21
|
-
context 'when the uri is invalid', if: test.raise_error? do
|
22
|
-
|
23
|
-
let(:valid_errors) do
|
24
|
-
[
|
25
|
-
Mongo::Error::InvalidTXTRecord,
|
26
|
-
Mongo::Error::NoSRVRecords,
|
27
|
-
Mongo::Error::InvalidURI,
|
28
|
-
Mongo::Error::MismatchedDomain,
|
29
|
-
]
|
30
|
-
end
|
31
|
-
|
32
|
-
let(:error) do
|
33
|
-
e = nil
|
34
|
-
begin; test.uri; rescue => ex; e = ex; end
|
35
|
-
e
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'raises an error' do
|
39
|
-
expect(valid_errors).to include(error.class)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
context 'when the uri is valid', unless: test.raise_error? do
|
44
|
-
|
45
|
-
it 'does not raise an exception' do
|
46
|
-
expect(test.uri).to be_a(Mongo::URI::SRVProtocol)
|
47
|
-
end
|
48
|
-
|
49
|
-
if test.seeds
|
50
|
-
# DNS seed list tests specify both seeds and hosts.
|
51
|
-
# To get the hosts, the client must do SDAM (as required in the
|
52
|
-
# spec tests' description), but this isn't testing DNS seed list -
|
53
|
-
# it is testing SDAM. Plus, all of the hosts are always the same.
|
54
|
-
# If seed list is given in the expectations, just test the seed
|
55
|
-
# list and not the expanded hosts.
|
56
|
-
it 'creates a client with the correct seeds' do
|
57
|
-
expect(test.client).to have_hosts(test, test.seeds)
|
58
|
-
end
|
59
|
-
else
|
60
|
-
it 'creates a client with the correct hosts' do
|
61
|
-
expect(test.client).to have_hosts(test, test.hosts)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
it 'creates a client with the correct options' do
|
66
|
-
mapped = Mongo::URI::OptionsMapper.new.ruby_to_smc(test.client.options)
|
67
|
-
# Connection string spec tests do not use canonical URI option names
|
68
|
-
actual = Utils.downcase_keys(mapped)
|
69
|
-
expected = Utils.downcase_keys(test.options)
|
70
|
-
# SRV tests use ssl URI option instead of tls one
|
71
|
-
if expected.key?('ssl') && !expected.key?('tls')
|
72
|
-
expected['tls'] = expected.delete('ssl')
|
73
|
-
end
|
74
|
-
actual.should == expected
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
@@ -1,221 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
# encoding: utf-8
|
3
|
-
|
4
|
-
# Test event subscriber.
|
5
|
-
#
|
6
|
-
# @since 2.5.0
|
7
|
-
class EventSubscriber
|
8
|
-
|
9
|
-
# The mappings of event names to types.
|
10
|
-
#
|
11
|
-
# @since 2.4.0
|
12
|
-
MAPPINGS = {
|
13
|
-
'topology_opening_event' => Mongo::Monitoring::Event::TopologyOpening,
|
14
|
-
'topology_description_changed_event' => Mongo::Monitoring::Event::TopologyChanged,
|
15
|
-
'topology_closed_event' => Mongo::Monitoring::Event::TopologyClosed,
|
16
|
-
'server_opening_event' => Mongo::Monitoring::Event::ServerOpening,
|
17
|
-
'server_description_changed_event' => Mongo::Monitoring::Event::ServerDescriptionChanged,
|
18
|
-
'server_closed_event' => Mongo::Monitoring::Event::ServerClosed
|
19
|
-
}.freeze
|
20
|
-
|
21
|
-
# All events.
|
22
|
-
attr_reader :all_events
|
23
|
-
|
24
|
-
# The started events.
|
25
|
-
#
|
26
|
-
# @since 2.5.0
|
27
|
-
attr_reader :started_events
|
28
|
-
|
29
|
-
# The succeeded events.
|
30
|
-
#
|
31
|
-
# @since 2.5.0
|
32
|
-
attr_reader :succeeded_events
|
33
|
-
|
34
|
-
# The failed events.
|
35
|
-
#
|
36
|
-
# @since 2.5.0
|
37
|
-
attr_reader :failed_events
|
38
|
-
|
39
|
-
attr_reader :published_events
|
40
|
-
|
41
|
-
# @param [ String ] name Optional name for the event subscriber.
|
42
|
-
def initialize(name: nil)
|
43
|
-
@mutex = Mutex.new
|
44
|
-
clear_events!
|
45
|
-
@name = name
|
46
|
-
end
|
47
|
-
|
48
|
-
def to_s
|
49
|
-
%Q`#<EventSubscriber:#{@name ? "\"#{@name}\"" : '%x' % object_id} \
|
50
|
-
started=#{started_events.length} \
|
51
|
-
succeeded=#{succeeded_events.length} \
|
52
|
-
failed=#{failed_events.length} \
|
53
|
-
published=#{published_events.length}>`
|
54
|
-
end
|
55
|
-
|
56
|
-
alias :inspect :to_s
|
57
|
-
|
58
|
-
# Event retrieval
|
59
|
-
|
60
|
-
def select_started_events(cls)
|
61
|
-
started_events.select do |event|
|
62
|
-
event.is_a?(cls)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
def select_succeeded_events(cls)
|
67
|
-
succeeded_events.select do |event|
|
68
|
-
event.is_a?(cls)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
def select_completed_events(*classes)
|
73
|
-
(succeeded_events + failed_events).select do |event|
|
74
|
-
classes.any? { |c| c === event }
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
def select_published_events(cls)
|
79
|
-
published_events.select do |event|
|
80
|
-
event.is_a?(cls)
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
# Filters command started events for the specified command name.
|
85
|
-
def command_started_events(command_name)
|
86
|
-
started_events.select do |event|
|
87
|
-
event.command[command_name]
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
def non_auth_command_started_events
|
92
|
-
started_events.reject do |event|
|
93
|
-
%w(authenticate getnonce saslSstart saslContinue).any? do |cmd|
|
94
|
-
event.command[cmd]
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
# Locates command stated events for the specified command name,
|
100
|
-
# asserts that there is exactly one such event, and returns it.
|
101
|
-
def single_command_started_event(command_name, include_auth: false)
|
102
|
-
events = if include_auth
|
103
|
-
started_events
|
104
|
-
else
|
105
|
-
non_auth_command_started_events
|
106
|
-
end
|
107
|
-
events.select! do |event|
|
108
|
-
event.command[command_name]
|
109
|
-
end
|
110
|
-
if events.length != 1
|
111
|
-
raise "Expected a single #{command_name} event but we have #{events.length}"
|
112
|
-
end
|
113
|
-
events.first
|
114
|
-
end
|
115
|
-
|
116
|
-
# Get the first succeeded event published for the name, and then delete it.
|
117
|
-
#
|
118
|
-
# @param [ String ] name The event name.
|
119
|
-
#
|
120
|
-
# @return [ Event ] The matching event.
|
121
|
-
def first_event(name)
|
122
|
-
cls = MAPPINGS[name]
|
123
|
-
if cls.nil?
|
124
|
-
raise ArgumentError, "Bogus event name #{name}"
|
125
|
-
end
|
126
|
-
matching = succeeded_events.find do |event|
|
127
|
-
cls === event
|
128
|
-
end
|
129
|
-
succeeded_events.delete(matching)
|
130
|
-
matching
|
131
|
-
end
|
132
|
-
|
133
|
-
# Event recording
|
134
|
-
|
135
|
-
# Cache the started event.
|
136
|
-
#
|
137
|
-
# @param [ Event ] event The event.
|
138
|
-
#
|
139
|
-
# @since 2.5.0
|
140
|
-
def started(event)
|
141
|
-
@mutex.synchronize do
|
142
|
-
started_events << event
|
143
|
-
all_events << event
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
# Cache the succeeded event.
|
148
|
-
#
|
149
|
-
# @param [ Event ] event The event.
|
150
|
-
#
|
151
|
-
# @since 2.5.0
|
152
|
-
def succeeded(event)
|
153
|
-
@mutex.synchronize do
|
154
|
-
succeeded_events << event
|
155
|
-
all_events << event
|
156
|
-
end
|
157
|
-
end
|
158
|
-
|
159
|
-
# Cache the failed event.
|
160
|
-
#
|
161
|
-
# @param [ Event ] event The event.
|
162
|
-
#
|
163
|
-
# @since 2.5.0
|
164
|
-
def failed(event)
|
165
|
-
@mutex.synchronize do
|
166
|
-
failed_events << event
|
167
|
-
all_events << event
|
168
|
-
end
|
169
|
-
end
|
170
|
-
|
171
|
-
def published(event)
|
172
|
-
@mutex.synchronize do
|
173
|
-
published_events << event
|
174
|
-
all_events << event
|
175
|
-
end
|
176
|
-
end
|
177
|
-
|
178
|
-
# Clear all cached events.
|
179
|
-
#
|
180
|
-
# @since 2.5.1
|
181
|
-
def clear_events!
|
182
|
-
@all_events = []
|
183
|
-
@started_events = []
|
184
|
-
@succeeded_events = []
|
185
|
-
@failed_events = []
|
186
|
-
@published_events = []
|
187
|
-
self
|
188
|
-
end
|
189
|
-
end
|
190
|
-
|
191
|
-
# Only handles succeeded events correctly.
|
192
|
-
class PhasedEventSubscriber < EventSubscriber
|
193
|
-
def initialize
|
194
|
-
super
|
195
|
-
@phase_events = {}
|
196
|
-
end
|
197
|
-
|
198
|
-
def phase_finished(phase_index)
|
199
|
-
@phase_events[phase_index] = succeeded_events
|
200
|
-
@succeeded_events = []
|
201
|
-
end
|
202
|
-
|
203
|
-
def phase_events(phase_index)
|
204
|
-
@phase_events[phase_index]
|
205
|
-
end
|
206
|
-
|
207
|
-
def event_count
|
208
|
-
@phase_events.inject(0) do |sum, event|
|
209
|
-
sum + event.length
|
210
|
-
end
|
211
|
-
end
|
212
|
-
end
|
213
|
-
|
214
|
-
class VerboseEventSubscriber < EventSubscriber
|
215
|
-
%w(started succeeded failed published).each do |meth|
|
216
|
-
define_method(meth) do |event|
|
217
|
-
puts event.summary
|
218
|
-
super(event)
|
219
|
-
end
|
220
|
-
end
|
221
|
-
end
|