mongo 2.0.6 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +5 -2
- data/lib/mongo/address/ipv4.rb +6 -1
- data/lib/mongo/address/unix.rb +2 -2
- data/lib/mongo/address.rb +18 -10
- data/lib/mongo/auth/cr/conversation.rb +1 -1
- data/lib/mongo/auth/ldap/conversation.rb +7 -3
- data/lib/mongo/auth/scram/conversation.rb +9 -3
- data/lib/mongo/auth/user/view.rb +23 -2
- data/lib/mongo/auth/x509/conversation.rb +1 -1
- data/lib/mongo/bulk_write/combineable.rb +51 -0
- data/lib/mongo/bulk_write/ordered_combiner.rb +55 -0
- data/lib/mongo/bulk_write/result.rb +191 -0
- data/lib/mongo/bulk_write/result_combiner.rb +117 -0
- data/lib/mongo/bulk_write/transformable.rb +132 -0
- data/lib/mongo/bulk_write/unordered_combiner.rb +52 -0
- data/lib/mongo/bulk_write/validatable.rb +62 -0
- data/lib/mongo/bulk_write.rb +159 -23
- data/lib/mongo/client.rb +52 -16
- data/lib/mongo/cluster/topology/replica_set.rb +27 -9
- data/lib/mongo/cluster/topology/sharded.rb +1 -1
- data/lib/mongo/cluster/topology/unknown.rb +5 -2
- data/lib/mongo/cluster.rb +42 -7
- data/lib/mongo/collection/view/aggregation.rb +48 -9
- data/lib/mongo/collection/view/immutable.rb +6 -6
- data/lib/mongo/collection/view/iterable.rb +18 -4
- data/lib/mongo/collection/view/map_reduce.rb +58 -17
- data/lib/mongo/collection/view/readable.rb +173 -42
- data/lib/mongo/collection/view/writable.rb +37 -23
- data/lib/mongo/collection/view.rb +2 -2
- data/lib/mongo/collection.rb +370 -33
- data/lib/mongo/cursor.rb +15 -3
- data/lib/mongo/database/view.rb +5 -4
- data/lib/mongo/database.rb +14 -4
- data/lib/mongo/dbref.rb +113 -0
- data/lib/mongo/error/closed_stream.rb +34 -0
- data/lib/mongo/error/extra_file_chunk.rb +34 -0
- data/lib/mongo/error/{invalid_uri_option.rb → file_not_found.rb} +11 -12
- data/lib/mongo/error/invalid_file.rb +2 -2
- data/lib/mongo/error/invalid_file_revision.rb +37 -0
- data/lib/mongo/error/invalid_uri.rb +5 -4
- data/lib/mongo/error/missing_file_chunk.rb +38 -0
- data/lib/mongo/error/operation_failure.rb +1 -1
- data/lib/mongo/error/parser.rb +1 -1
- data/lib/mongo/error/unchangeable_collection_option.rb +38 -0
- data/lib/mongo/error/unexpected_chunk_length.rb +39 -0
- data/lib/mongo/error.rb +13 -2
- data/lib/mongo/event/description_changed.rb +1 -1
- data/lib/mongo/grid/file/chunk.rb +6 -6
- data/lib/mongo/grid/file/{metadata.rb → info.rb} +41 -39
- data/lib/mongo/grid/file.rb +13 -10
- data/lib/mongo/grid/fs_bucket.rb +448 -0
- data/lib/mongo/grid/stream/read.rb +208 -0
- data/lib/mongo/grid/stream/write.rb +187 -0
- data/lib/mongo/grid/stream.rb +64 -0
- data/lib/mongo/grid.rb +2 -1
- data/lib/mongo/index/view.rb +3 -3
- data/lib/mongo/index.rb +5 -0
- data/lib/mongo/loggable.rb +34 -57
- data/lib/mongo/logger.rb +16 -78
- data/lib/mongo/monitoring/command_log_subscriber.rb +112 -0
- data/lib/mongo/monitoring/event/command_failed.rb +96 -0
- data/lib/mongo/monitoring/event/command_started.rb +89 -0
- data/lib/mongo/monitoring/event/command_succeeded.rb +118 -0
- data/lib/mongo/monitoring/event/secure.rb +58 -0
- data/lib/mongo/monitoring/event.rb +18 -0
- data/lib/mongo/monitoring/publishable.rb +106 -0
- data/lib/mongo/monitoring.rb +195 -0
- data/lib/mongo/operation/{aggregate.rb → commands/aggregate.rb} +3 -41
- data/lib/mongo/operation/commands/collections_info/result.rb +39 -0
- data/lib/mongo/operation/commands/collections_info.rb +68 -0
- data/lib/mongo/operation/{command.rb → commands/command.rb} +2 -18
- data/lib/mongo/operation/commands/indexes.rb +70 -0
- data/lib/mongo/operation/commands/list_collections/result.rb +112 -0
- data/lib/mongo/operation/commands/list_collections.rb +54 -0
- data/lib/mongo/operation/commands/list_indexes/result.rb +116 -0
- data/lib/mongo/operation/commands/list_indexes.rb +56 -0
- data/lib/mongo/operation/{map_reduce → commands/map_reduce}/result.rb +1 -1
- data/lib/mongo/operation/{map_reduce.rb → commands/map_reduce.rb} +3 -41
- data/lib/mongo/operation/commands/parallel_scan/result.rb +72 -0
- data/lib/mongo/operation/commands/parallel_scan.rb +56 -0
- data/lib/mongo/operation/commands/user_query.rb +69 -0
- data/lib/mongo/{bulk_write/ordered_bulk_write.rb → operation/commands/users_info/result.rb} +18 -30
- data/lib/mongo/operation/commands/users_info.rb +53 -0
- data/lib/mongo/operation/commands.rb +24 -0
- data/lib/mongo/operation/executable.rb +4 -68
- data/lib/mongo/operation/kill_cursors.rb +3 -3
- data/lib/mongo/operation/read/get_more.rb +2 -22
- data/lib/mongo/{bulk_write/unordered_bulk_write.rb → operation/read/query/result.rb} +20 -26
- data/lib/mongo/operation/read/query.rb +4 -21
- data/lib/mongo/operation/read.rb +0 -4
- data/lib/mongo/operation/{read_preferrable.rb → read_preference.rb} +3 -2
- data/lib/mongo/operation/result.rb +13 -1
- data/lib/mongo/operation/specifiable.rb +42 -0
- data/lib/mongo/operation/write/bulk/bulkable.rb +82 -0
- data/lib/mongo/operation/write/bulk/delete/result.rb +74 -0
- data/lib/mongo/operation/write/bulk/delete.rb +71 -0
- data/lib/mongo/operation/write/bulk/insert/result.rb +129 -0
- data/lib/mongo/operation/write/bulk/insert.rb +96 -0
- data/lib/mongo/operation/write/bulk/legacy_mergable.rb +87 -0
- data/lib/mongo/operation/write/bulk/mergable.rb +71 -0
- data/lib/mongo/operation/write/bulk/update/result.rb +174 -0
- data/lib/mongo/operation/write/bulk/update.rb +81 -0
- data/lib/mongo/operation/write/bulk.rb +6 -3
- data/lib/mongo/operation/write/command/create_index.rb +0 -1
- data/lib/mongo/operation/write/command/create_user.rb +0 -1
- data/lib/mongo/operation/write/command/delete.rb +0 -1
- data/lib/mongo/operation/write/command/drop_index.rb +0 -1
- data/lib/mongo/operation/write/command/insert.rb +0 -1
- data/lib/mongo/operation/write/command/remove_user.rb +0 -1
- data/lib/mongo/operation/write/command/update.rb +0 -1
- data/lib/mongo/operation/write/command/update_user.rb +0 -1
- data/lib/mongo/operation/write/command/writable.rb +13 -18
- data/lib/mongo/operation/write/create_index.rb +4 -27
- data/lib/mongo/operation/write/create_user.rb +4 -30
- data/lib/mongo/operation/write/delete.rb +6 -29
- data/lib/mongo/operation/write/drop_index.rb +3 -3
- data/lib/mongo/operation/write/gle.rb +48 -0
- data/lib/mongo/operation/write/idable.rb +5 -0
- data/lib/mongo/operation/write/insert.rb +2 -24
- data/lib/mongo/operation/write/remove_user.rb +4 -27
- data/lib/mongo/operation/write/update.rb +13 -36
- data/lib/mongo/operation/write/update_user.rb +4 -30
- data/lib/mongo/operation/write/write_command_enabled.rb +53 -0
- data/lib/mongo/operation/write.rb +2 -0
- data/lib/mongo/operation.rb +32 -4
- data/lib/mongo/options/mapper.rb +4 -2
- data/lib/mongo/options/redacted.rb +156 -0
- data/lib/mongo/options.rb +1 -0
- data/lib/mongo/protocol/delete.rb +75 -15
- data/lib/mongo/protocol/get_more.rb +65 -13
- data/lib/mongo/protocol/insert.rb +85 -13
- data/lib/mongo/protocol/kill_cursors.rb +59 -14
- data/lib/mongo/protocol/message.rb +12 -12
- data/lib/mongo/protocol/query.rb +163 -37
- data/lib/mongo/protocol/reply.rb +103 -0
- data/lib/mongo/protocol/serializers.rb +1 -1
- data/lib/mongo/protocol/update.rb +82 -14
- data/lib/mongo/retryable.rb +83 -0
- data/lib/mongo/server/connectable.rb +21 -25
- data/lib/mongo/server/connection.rb +75 -4
- data/lib/mongo/server/connection_pool/queue.rb +15 -0
- data/lib/mongo/server/connection_pool.rb +12 -0
- data/lib/mongo/server/description/features.rb +2 -1
- data/lib/mongo/server/description.rb +52 -1
- data/lib/mongo/server/monitor/connection.rb +26 -2
- data/lib/mongo/server/monitor.rb +19 -3
- data/lib/mongo/server.rb +39 -5
- data/lib/mongo/server_selector/selectable.rb +40 -31
- data/lib/mongo/server_selector.rb +19 -10
- data/lib/mongo/socket/ssl.rb +28 -16
- data/lib/mongo/socket/tcp.rb +3 -3
- data/lib/mongo/socket/unix.rb +5 -8
- data/lib/mongo/socket.rb +11 -4
- data/lib/mongo/uri.rb +248 -137
- data/lib/mongo/version.rb +1 -1
- data/lib/mongo.rb +5 -3
- data/spec/mongo/address/unix_spec.rb +1 -1
- data/spec/mongo/address_spec.rb +25 -0
- data/spec/mongo/auth/cr_spec.rb +9 -1
- data/spec/mongo/auth/ldap/conversation_spec.rb +43 -0
- data/spec/mongo/auth/ldap_spec.rb +9 -1
- data/spec/mongo/auth/scram_spec.rb +9 -1
- data/spec/mongo/auth/user/view_spec.rb +26 -1
- data/spec/mongo/auth/x509_spec.rb +9 -1
- data/spec/mongo/bulk_write/ordered_combiner_spec.rb +271 -0
- data/spec/mongo/bulk_write/unordered_combiner_spec.rb +239 -0
- data/spec/mongo/bulk_write_spec.rb +428 -0
- data/spec/mongo/client_spec.rb +167 -17
- data/spec/mongo/cluster/topology/replica_set_spec.rb +18 -9
- data/spec/mongo/cluster/topology/sharded_spec.rb +11 -3
- data/spec/mongo/cluster/topology/single_spec.rb +12 -4
- data/spec/mongo/cluster_spec.rb +55 -10
- data/spec/mongo/collection/view/aggregation_spec.rb +188 -1
- data/spec/mongo/collection/view/explainable_spec.rb +1 -1
- data/spec/mongo/collection/view/immutable_spec.rb +103 -0
- data/spec/mongo/collection/view/map_reduce_spec.rb +99 -4
- data/spec/mongo/collection/view/readable_spec.rb +238 -6
- data/spec/mongo/collection/view/writable_spec.rb +4 -4
- data/spec/mongo/collection/view_spec.rb +459 -71
- data/spec/mongo/collection_spec.rb +1291 -9
- data/spec/mongo/command_monitoring_spec.rb +51 -0
- data/spec/mongo/connection_string_spec.rb +115 -0
- data/spec/mongo/crud_spec.rb +2 -2
- data/spec/mongo/cursor_spec.rb +3 -3
- data/spec/mongo/database_spec.rb +47 -11
- data/spec/mongo/dbref_spec.rb +149 -0
- data/spec/mongo/grid/file/chunk_spec.rb +5 -5
- data/spec/mongo/grid/file/{metadata_spec.rb → info_spec.rb} +29 -17
- data/spec/mongo/grid/file_spec.rb +8 -8
- data/spec/mongo/grid/fs_bucket_spec.rb +1020 -0
- data/spec/mongo/grid/stream/read_spec.rb +275 -0
- data/spec/mongo/grid/stream/write_spec.rb +440 -0
- data/spec/mongo/grid/stream_spec.rb +48 -0
- data/spec/mongo/gridfs_spec.rb +50 -0
- data/spec/mongo/logger_spec.rb +0 -40
- data/spec/mongo/monitoring/command_log_subscriber_spec.rb +76 -0
- data/spec/mongo/monitoring/event/command_started_spec.rb +26 -0
- data/spec/mongo/monitoring/event/command_succeeded_spec.rb +26 -0
- data/spec/mongo/monitoring/event/secure_spec.rb +57 -0
- data/spec/mongo/monitoring_spec.rb +168 -0
- data/spec/mongo/operation/commands/aggregate_spec.rb +69 -0
- data/spec/mongo/operation/{read → commands}/collections_info_spec.rb +1 -1
- data/spec/mongo/operation/{command_spec.rb → commands/command_spec.rb} +0 -18
- data/spec/mongo/operation/{read → commands}/indexes_spec.rb +1 -1
- data/spec/mongo/operation/{map_reduce_spec.rb → commands/map_reduce_spec.rb} +1 -19
- data/spec/mongo/operation/kill_cursors_spec.rb +1 -17
- data/spec/mongo/operation/read/get_more_spec.rb +0 -16
- data/spec/mongo/operation/read/query_spec.rb +19 -16
- data/spec/mongo/operation/{read_preferrable_spec.rb → read_preference_spec.rb} +11 -11
- data/spec/mongo/operation/write/bulk/{bulk_delete_spec.rb → delete_spec.rb} +18 -29
- data/spec/mongo/operation/write/bulk/{bulk_insert_spec.rb → insert_spec.rb} +3 -14
- data/spec/mongo/operation/write/bulk/{bulk_update_spec.rb → update_spec.rb} +8 -19
- data/spec/mongo/operation/write/command/delete_spec.rb +0 -16
- data/spec/mongo/operation/write/command/insert_spec.rb +0 -16
- data/spec/mongo/operation/write/command/update_spec.rb +0 -16
- data/spec/mongo/operation/write/delete_spec.rb +4 -4
- data/spec/mongo/operation/write/insert_spec.rb +2 -13
- data/spec/mongo/operation/write/update_spec.rb +7 -7
- data/spec/mongo/options/redacted_spec.rb +350 -0
- data/spec/mongo/protocol/kill_cursors_spec.rb +5 -3
- data/spec/mongo/protocol/query_spec.rb +15 -30
- data/spec/mongo/retryable_spec.rb +147 -0
- data/spec/mongo/server/connection_pool/queue_spec.rb +16 -0
- data/spec/mongo/server/connection_pool_spec.rb +50 -6
- data/spec/mongo/server/connection_spec.rb +49 -4
- data/spec/mongo/server/description_spec.rb +49 -3
- data/spec/mongo/server/monitor_spec.rb +51 -0
- data/spec/mongo/server_discovery_and_monitoring_spec.rb +32 -59
- data/spec/mongo/server_selection_rtt_spec.rb +37 -57
- data/spec/mongo/server_selection_spec.rb +19 -9
- data/spec/mongo/server_selector/nearest_spec.rb +35 -27
- data/spec/mongo/server_selector/primary_preferred_spec.rb +32 -30
- data/spec/mongo/server_selector/primary_spec.rb +21 -14
- data/spec/mongo/server_selector/secondary_preferred_spec.rb +28 -26
- data/spec/mongo/server_selector/secondary_spec.rb +24 -22
- data/spec/mongo/server_selector_spec.rb +87 -24
- data/spec/mongo/server_spec.rb +94 -8
- data/spec/mongo/socket/ssl_spec.rb +123 -13
- data/spec/mongo/socket/unix_spec.rb +52 -0
- data/spec/mongo/uri_spec.rb +295 -67
- data/spec/spec_helper.rb +40 -24
- data/spec/support/authorization.rb +23 -9
- data/spec/support/certificates/client.pem +4 -4
- data/spec/support/command_monitoring/bulkWrite.yml +73 -0
- data/spec/support/command_monitoring/command.yml +42 -0
- data/spec/support/command_monitoring/deleteMany.yml +55 -0
- data/spec/support/command_monitoring/deleteOne.yml +55 -0
- data/spec/support/command_monitoring/find.yml +219 -0
- data/spec/support/command_monitoring/insertMany.yml +81 -0
- data/spec/support/command_monitoring/insertOne.yml +51 -0
- data/spec/support/command_monitoring/updateMany.yml +67 -0
- data/spec/support/command_monitoring/updateOne.yml +95 -0
- data/spec/support/command_monitoring.rb +365 -0
- data/spec/support/connection_string.rb +228 -0
- data/spec/support/connection_string_tests/invalid-uris.yml +193 -0
- data/spec/support/connection_string_tests/valid-auth.yml +256 -0
- data/spec/support/connection_string_tests/valid-host_identifiers.yml +121 -0
- data/spec/support/connection_string_tests/valid-options.yml +30 -0
- data/spec/support/connection_string_tests/valid-unix_socket-absolute.yml +197 -0
- data/spec/support/connection_string_tests/valid-unix_socket-relative.yml +213 -0
- data/spec/support/connection_string_tests/valid-warnings.yml +55 -0
- data/spec/support/crud/read.rb +22 -19
- data/spec/support/crud/write.rb +58 -27
- data/spec/support/crud.rb +10 -2
- data/spec/support/gridfs.rb +637 -0
- data/spec/support/gridfs_tests/delete.yml +157 -0
- data/spec/support/gridfs_tests/download.yml +210 -0
- data/spec/support/gridfs_tests/download_by_name.yml +113 -0
- data/spec/support/gridfs_tests/upload.yml +158 -0
- data/spec/support/matchers.rb +1 -1
- data/spec/support/sdam/rs/equal_electionids.yml +44 -0
- data/spec/support/sdam/rs/new_primary_new_electionid.yml +95 -0
- data/spec/support/sdam/rs/null_election_id.yml +144 -0
- data/spec/support/sdam/rs/primary_disconnect_electionid.yml +124 -0
- data/spec/support/sdam/rs/primary_mismatched_me.yml +37 -0
- data/spec/support/sdam/rs/primary_to_no_primary_mismatched_me.yml +75 -0
- data/spec/support/sdam/rs/secondary_mismatched_me.yml +37 -0
- data/spec/support/sdam/sharded/mongos_disconnect.yml +104 -0
- data/spec/support/sdam/single/direct_connection_rsarbiter.yml +1 -1
- data/spec/support/sdam/single/direct_connection_rsprimary.yml +1 -1
- data/spec/support/sdam/single/direct_connection_rssecondary.yml +1 -1
- data/spec/support/sdam/single/direct_connection_slave.yml +1 -1
- data/spec/support/sdam/single/direct_connection_standalone.yml +1 -1
- data/spec/support/sdam/single/not_ok_response.yml +0 -1
- data/spec/support/server_discovery_and_monitoring.rb +22 -3
- data/spec/support/server_selection.rb +3 -1
- data/spec/support/shared/bulk_write.rb +218 -22
- data/spec/support/shared/server_selector.rb +80 -14
- data.tar.gz.sig +0 -0
- metadata +188 -59
- metadata.gz.sig +0 -0
- data/lib/mongo/bulk_write/bulk_writable.rb +0 -196
- data/lib/mongo/bulk_write/deletable.rb +0 -56
- data/lib/mongo/bulk_write/insertable.rb +0 -48
- data/lib/mongo/bulk_write/replacable.rb +0 -57
- data/lib/mongo/bulk_write/updatable.rb +0 -68
- data/lib/mongo/grid/fs.rb +0 -149
- data/lib/mongo/operation/list_collections/result.rb +0 -114
- data/lib/mongo/operation/list_indexes/result.rb +0 -118
- data/lib/mongo/operation/read/collections_info.rb +0 -68
- data/lib/mongo/operation/read/indexes.rb +0 -69
- data/lib/mongo/operation/read/list_collections.rb +0 -76
- data/lib/mongo/operation/read/list_indexes.rb +0 -78
- data/lib/mongo/operation/write/bulk/bulk_delete/result.rb +0 -75
- data/lib/mongo/operation/write/bulk/bulk_delete.rb +0 -145
- data/lib/mongo/operation/write/bulk/bulk_insert/result.rb +0 -130
- data/lib/mongo/operation/write/bulk/bulk_insert.rb +0 -132
- data/lib/mongo/operation/write/bulk/bulk_mergable.rb +0 -67
- data/lib/mongo/operation/write/bulk/bulk_update/result.rb +0 -162
- data/lib/mongo/operation/write/bulk/bulk_update.rb +0 -154
- data/lib/mongo/operation/write/bulk/legacy_bulk_mergable.rb +0 -83
- data/spec/mongo/bulk/bulk_write_spec.rb +0 -262
- data/spec/mongo/grid/fs_spec.rb +0 -160
- data/spec/mongo/loggable_spec.rb +0 -63
- data/spec/mongo/operation/aggregate_spec.rb +0 -127
- /data/lib/mongo/operation/{aggregate → commands/aggregate}/result.rb +0 -0
@@ -48,7 +48,7 @@ describe Mongo::Collection::View::MapReduce do
|
|
48
48
|
end
|
49
49
|
|
50
50
|
after do
|
51
|
-
authorized_collection.
|
51
|
+
authorized_collection.delete_many
|
52
52
|
end
|
53
53
|
|
54
54
|
let(:map_reduce) do
|
@@ -66,6 +66,39 @@ describe Mongo::Collection::View::MapReduce do
|
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
69
|
+
context 'when out is in the options' do
|
70
|
+
|
71
|
+
after do
|
72
|
+
authorized_client['output_collection'].delete_many
|
73
|
+
end
|
74
|
+
|
75
|
+
context 'when out is a string' do
|
76
|
+
|
77
|
+
let(:options) do
|
78
|
+
{ :out => 'output_collection' }
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'iterates over the documents in the result' do
|
82
|
+
map_reduce.each do |document|
|
83
|
+
expect(document[:value]).to_not be_nil
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
context 'when out is a document' do
|
89
|
+
|
90
|
+
let(:options) do
|
91
|
+
{ :out => { replace: 'output_collection' } }
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'iterates over the documents in the result' do
|
95
|
+
map_reduce.each do |document|
|
96
|
+
expect(document[:value]).to_not be_nil
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
69
102
|
context 'when out is inline' do
|
70
103
|
|
71
104
|
let(:new_map_reduce) do
|
@@ -82,7 +115,7 @@ describe Mongo::Collection::View::MapReduce do
|
|
82
115
|
context 'when out is a collection' do
|
83
116
|
|
84
117
|
after do
|
85
|
-
authorized_client['output_collection'].
|
118
|
+
authorized_client['output_collection'].delete_many
|
86
119
|
end
|
87
120
|
|
88
121
|
context 'when the option is to replace' do
|
@@ -135,6 +168,17 @@ describe Mongo::Collection::View::MapReduce do
|
|
135
168
|
expect(new_map_reduce.count).to eq(2)
|
136
169
|
end
|
137
170
|
end
|
171
|
+
|
172
|
+
context 'when the option is a collection name' do
|
173
|
+
|
174
|
+
let(:new_map_reduce) do
|
175
|
+
map_reduce.out('output_collection')
|
176
|
+
end
|
177
|
+
|
178
|
+
it 'fetches the results from the collection' do
|
179
|
+
expect(new_map_reduce.count).to eq(2)
|
180
|
+
end
|
181
|
+
end
|
138
182
|
end
|
139
183
|
|
140
184
|
context 'when the view has a selector' do
|
@@ -169,7 +213,7 @@ describe Mongo::Collection::View::MapReduce do
|
|
169
213
|
end
|
170
214
|
|
171
215
|
it 'includes the selector in the operation spec' do
|
172
|
-
expect(map_reduce.send(:map_reduce_spec)[:selector][:query]).to eq(selector[:$query])
|
216
|
+
expect(map_reduce.send(:map_reduce_spec)[:selector][:query]).to eq(BSON::Document.new(selector[:$query]))
|
173
217
|
end
|
174
218
|
end
|
175
219
|
end
|
@@ -250,6 +294,57 @@ describe Mongo::Collection::View::MapReduce do
|
|
250
294
|
expect(map_reduce.send(:map_reduce_spec)[:selector][:out]).to eq(inline: 1)
|
251
295
|
end
|
252
296
|
end
|
297
|
+
|
298
|
+
context 'when out is specified in the options' do
|
299
|
+
|
300
|
+
let(:location) do
|
301
|
+
{ replace: 'testing' }
|
302
|
+
end
|
303
|
+
|
304
|
+
let(:options) do
|
305
|
+
{ :out => location }
|
306
|
+
end
|
307
|
+
|
308
|
+
it 'sets the out value' do
|
309
|
+
expect(map_reduce.out).to eq(location)
|
310
|
+
end
|
311
|
+
|
312
|
+
it 'includes the out value in the operation spec' do
|
313
|
+
expect(map_reduce.send(:map_reduce_spec)[:selector][:out]).to be(location)
|
314
|
+
end
|
315
|
+
end
|
316
|
+
|
317
|
+
context 'when out is not inline' do
|
318
|
+
|
319
|
+
let(:location) do
|
320
|
+
{ replace: 'testing' }
|
321
|
+
end
|
322
|
+
|
323
|
+
let(:options) do
|
324
|
+
{ :out => location }
|
325
|
+
end
|
326
|
+
|
327
|
+
it 'does not allow the operation on a secondary' do
|
328
|
+
expect(map_reduce.send(:secondary_ok?)).to be(false)
|
329
|
+
end
|
330
|
+
|
331
|
+
context 'when the context is not a valid server for writing' do
|
332
|
+
|
333
|
+
it 'reroutes the operation to a primary' do
|
334
|
+
allow(map_reduce).to receive(:valid_server?).and_return(false)
|
335
|
+
expect(Mongo::Logger.logger).to receive(:warn?).and_call_original
|
336
|
+
map_reduce.to_a
|
337
|
+
end
|
338
|
+
end
|
339
|
+
|
340
|
+
context 'when the context is a valid server for writing' do
|
341
|
+
|
342
|
+
it 'does not reroute the operation to a primary' do
|
343
|
+
expect(Mongo::Logger.logger).not_to receive(:warn?)
|
344
|
+
map_reduce.to_a
|
345
|
+
end
|
346
|
+
end
|
347
|
+
end
|
253
348
|
end
|
254
349
|
|
255
350
|
describe '#scope' do
|
@@ -316,7 +411,7 @@ describe Mongo::Collection::View::MapReduce do
|
|
316
411
|
end
|
317
412
|
|
318
413
|
it 'includes the sort object in the operation spec' do
|
319
|
-
expect(map_reduce.send(:map_reduce_spec)[:selector][:sort]).to
|
414
|
+
expect(map_reduce.send(:map_reduce_spec)[:selector][:sort][:name]).to eq(sort[:name])
|
320
415
|
end
|
321
416
|
end
|
322
417
|
|
@@ -15,7 +15,7 @@ describe Mongo::Collection::View::Readable do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
after do
|
18
|
-
authorized_collection.
|
18
|
+
authorized_collection.delete_many
|
19
19
|
end
|
20
20
|
|
21
21
|
describe '#allow_partial_results' do
|
@@ -75,6 +75,21 @@ describe Mongo::Collection::View::Readable do
|
|
75
75
|
end
|
76
76
|
end
|
77
77
|
end
|
78
|
+
|
79
|
+
context 'when options are specified' do
|
80
|
+
|
81
|
+
let(:agg_options) do
|
82
|
+
{ :max_time_ms => 500 }
|
83
|
+
end
|
84
|
+
|
85
|
+
let(:aggregation) do
|
86
|
+
view.aggregate(pipeline, agg_options)
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'passes the option to the Aggregation object' do
|
90
|
+
expect(aggregation.options[:max_time_ms]).to eq(agg_options[:max_time_ms])
|
91
|
+
end
|
92
|
+
end
|
78
93
|
end
|
79
94
|
|
80
95
|
describe '#map_reduce' do
|
@@ -200,7 +215,7 @@ describe Mongo::Collection::View::Readable do
|
|
200
215
|
end
|
201
216
|
|
202
217
|
after do
|
203
|
-
authorized_collection.
|
218
|
+
authorized_collection.delete_many
|
204
219
|
end
|
205
220
|
|
206
221
|
context 'when a selector is provided' do
|
@@ -224,6 +239,16 @@ describe Mongo::Collection::View::Readable do
|
|
224
239
|
it 'takes a read preference option' do
|
225
240
|
expect(view.count(read: { mode: :secondary })).to eq(10)
|
226
241
|
end
|
242
|
+
|
243
|
+
it 'takes a max_time_ms option', if: write_command_enabled? do
|
244
|
+
expect {
|
245
|
+
view.count(max_time_ms: 0.1)
|
246
|
+
}.to raise_error(Mongo::Error::OperationFailure)
|
247
|
+
end
|
248
|
+
|
249
|
+
it 'sets the max_time_ms option on the command', if: write_command_enabled? do
|
250
|
+
expect(view.count(max_time_ms: 100)).to eq(10)
|
251
|
+
end
|
227
252
|
end
|
228
253
|
|
229
254
|
describe '#distinct' do
|
@@ -338,6 +363,27 @@ describe Mongo::Collection::View::Readable do
|
|
338
363
|
expect(distinct).to eq([ 'test1', 'test2', 'test3' ])
|
339
364
|
end
|
340
365
|
end
|
366
|
+
|
367
|
+
context 'when a max_time_ms is specified', if: write_command_enabled? do
|
368
|
+
|
369
|
+
let(:documents) do
|
370
|
+
(1..3).map{ |i| { field: "test" }}
|
371
|
+
end
|
372
|
+
|
373
|
+
before do
|
374
|
+
authorized_collection.insert_many(documents)
|
375
|
+
end
|
376
|
+
|
377
|
+
it 'sets the max_time_ms option on the command' do
|
378
|
+
expect {
|
379
|
+
view.distinct(:field, max_time_ms: 0.1)
|
380
|
+
}.to raise_error(Mongo::Error::OperationFailure)
|
381
|
+
end
|
382
|
+
|
383
|
+
it 'sets the max_time_ms option on the command' do
|
384
|
+
expect(view.distinct(:field, max_time_ms: 100)).to eq([ 'test' ])
|
385
|
+
end
|
386
|
+
end
|
341
387
|
end
|
342
388
|
|
343
389
|
describe '#hint' do
|
@@ -419,6 +465,28 @@ describe Mongo::Collection::View::Readable do
|
|
419
465
|
end
|
420
466
|
end
|
421
467
|
|
468
|
+
describe '#max_value' do
|
469
|
+
|
470
|
+
let(:new_view) do
|
471
|
+
view.max_value(_id: 1)
|
472
|
+
end
|
473
|
+
|
474
|
+
it 'sets the value in the options' do
|
475
|
+
expect(new_view.max_value).to eq('_id' => 1)
|
476
|
+
end
|
477
|
+
end
|
478
|
+
|
479
|
+
describe '#min_value' do
|
480
|
+
|
481
|
+
let(:new_view) do
|
482
|
+
view.min_value(_id: 1)
|
483
|
+
end
|
484
|
+
|
485
|
+
it 'sets the value in the options' do
|
486
|
+
expect(new_view.min_value).to eq('_id' => 1)
|
487
|
+
end
|
488
|
+
end
|
489
|
+
|
422
490
|
describe '#no_cursor_timeout' do
|
423
491
|
|
424
492
|
let(:new_view) do
|
@@ -479,6 +547,15 @@ describe Mongo::Collection::View::Readable do
|
|
479
547
|
|
480
548
|
describe '#read' do
|
481
549
|
|
550
|
+
context 'when providing a hash' do
|
551
|
+
|
552
|
+
it 'converts to a read preference' do
|
553
|
+
expect(view.read(:mode => :primary_preferred).read).to be_a(
|
554
|
+
Mongo::ServerSelector::PrimaryPreferred
|
555
|
+
)
|
556
|
+
end
|
557
|
+
end
|
558
|
+
|
482
559
|
context 'when a read pref is specified' do
|
483
560
|
|
484
561
|
let(:options) do
|
@@ -524,12 +601,91 @@ describe Mongo::Collection::View::Readable do
|
|
524
601
|
|
525
602
|
describe '#show_disk_loc' do
|
526
603
|
|
527
|
-
let(:
|
528
|
-
|
604
|
+
let(:options) do
|
605
|
+
{ :show_disk_loc => true }
|
529
606
|
end
|
530
607
|
|
531
|
-
|
532
|
-
|
608
|
+
context 'when show_disk_loc is specified' do
|
609
|
+
|
610
|
+
let(:new_show_disk_loc) do
|
611
|
+
false
|
612
|
+
end
|
613
|
+
|
614
|
+
it 'sets the show_disk_loc value' do
|
615
|
+
new_view = view.show_disk_loc(new_show_disk_loc)
|
616
|
+
expect(new_view.show_disk_loc).to eq(new_show_disk_loc)
|
617
|
+
end
|
618
|
+
|
619
|
+
it 'returns a new View' do
|
620
|
+
expect(view.show_disk_loc(new_show_disk_loc)).not_to be(view)
|
621
|
+
end
|
622
|
+
end
|
623
|
+
|
624
|
+
context 'when show_disk_loc is not specified' do
|
625
|
+
|
626
|
+
it 'returns the show_disk_loc value' do
|
627
|
+
expect(view.show_disk_loc).to eq(options[:show_disk_loc])
|
628
|
+
end
|
629
|
+
end
|
630
|
+
end
|
631
|
+
|
632
|
+
describe '#modifiers' do
|
633
|
+
|
634
|
+
let(:options) do
|
635
|
+
{ :modifiers => { :$orderby => Mongo::Index::ASCENDING } }
|
636
|
+
end
|
637
|
+
|
638
|
+
context 'when a modifiers document is specified' do
|
639
|
+
|
640
|
+
let(:new_modifiers) do
|
641
|
+
{ :modifiers => { :$orderby => Mongo::Index::DESCENDING } }
|
642
|
+
end
|
643
|
+
|
644
|
+
it 'sets the new_modifiers document' do
|
645
|
+
new_view = view.modifiers(new_modifiers)
|
646
|
+
expect(new_view.modifiers).to eq(new_modifiers)
|
647
|
+
end
|
648
|
+
|
649
|
+
it 'returns a new View' do
|
650
|
+
expect(view.modifiers(new_modifiers)).not_to be(view)
|
651
|
+
end
|
652
|
+
end
|
653
|
+
|
654
|
+
context 'when a modifiers document is not specified' do
|
655
|
+
|
656
|
+
it 'returns the modifiers value' do
|
657
|
+
expect(view.modifiers).to eq(options[:modifiers])
|
658
|
+
end
|
659
|
+
end
|
660
|
+
end
|
661
|
+
|
662
|
+
describe '#max_time_ms' do
|
663
|
+
|
664
|
+
let(:options) do
|
665
|
+
{ :max_time_ms => 200 }
|
666
|
+
end
|
667
|
+
|
668
|
+
context 'when max_time_ms is specified' do
|
669
|
+
|
670
|
+
let(:new_max_time_ms) do
|
671
|
+
300
|
672
|
+
end
|
673
|
+
|
674
|
+
it 'sets the max_time_ms value' do
|
675
|
+
new_view = view.max_time_ms(new_max_time_ms)
|
676
|
+
expect(new_view.max_time_ms).to eq(new_max_time_ms)
|
677
|
+
end
|
678
|
+
|
679
|
+
it 'returns a new View' do
|
680
|
+
expect(view.max_time_ms(new_max_time_ms)).not_to be(view)
|
681
|
+
end
|
682
|
+
end
|
683
|
+
|
684
|
+
context 'when max_time_ms is not specified' do
|
685
|
+
|
686
|
+
it 'returns the max_time_ms value' do
|
687
|
+
expect(view.max_time_ms).to eq(options[:max_time_ms])
|
688
|
+
end
|
533
689
|
end
|
534
690
|
end
|
535
691
|
|
@@ -610,5 +766,81 @@ describe Mongo::Collection::View::Readable do
|
|
610
766
|
expect(view.sort).to eq(options[:sort])
|
611
767
|
end
|
612
768
|
end
|
769
|
+
|
770
|
+
context 'when an option is a cursor flag' do
|
771
|
+
|
772
|
+
let(:query_spec_options) do
|
773
|
+
view.send(:query_spec)[:options]
|
774
|
+
end
|
775
|
+
|
776
|
+
context 'when allow_partial_results is set as an option' do
|
777
|
+
|
778
|
+
let(:options) do
|
779
|
+
{ :allow_partial_results => true }
|
780
|
+
end
|
781
|
+
|
782
|
+
it 'sets the cursor flag' do
|
783
|
+
expect(query_spec_options[:flags]).to eq([:partial])
|
784
|
+
end
|
785
|
+
|
786
|
+
context 'when allow_partial_results is also called as a method' do
|
787
|
+
|
788
|
+
before do
|
789
|
+
view.allow_partial_results
|
790
|
+
end
|
791
|
+
|
792
|
+
it 'sets only one cursor flag' do
|
793
|
+
expect(query_spec_options[:flags]).to eq([:partial])
|
794
|
+
end
|
795
|
+
end
|
796
|
+
end
|
797
|
+
|
798
|
+
context 'when oplog_replay is set as an option' do
|
799
|
+
|
800
|
+
let(:options) do
|
801
|
+
{ :oplog_replay => true }
|
802
|
+
end
|
803
|
+
|
804
|
+
it 'sets the cursor flag' do
|
805
|
+
expect(query_spec_options[:flags]).to eq([:oplog_replay])
|
806
|
+
end
|
807
|
+
end
|
808
|
+
|
809
|
+
context 'when no_cursor_timeout is set as an option' do
|
810
|
+
|
811
|
+
let(:options) do
|
812
|
+
{ :no_cursor_timeout => true }
|
813
|
+
end
|
814
|
+
|
815
|
+
it 'sets the cursor flag' do
|
816
|
+
expect(query_spec_options[:flags]).to eq([:no_cursor_timeout])
|
817
|
+
end
|
818
|
+
end
|
819
|
+
|
820
|
+
context 'when cursor_type is set as an option' do
|
821
|
+
|
822
|
+
context 'when :tailable is the cursor type' do
|
823
|
+
|
824
|
+
let(:options) do
|
825
|
+
{ :cursor_type => :tailable }
|
826
|
+
end
|
827
|
+
|
828
|
+
it 'sets the cursor flag' do
|
829
|
+
expect(query_spec_options[:flags]).to eq([:tailable_cursor])
|
830
|
+
end
|
831
|
+
end
|
832
|
+
|
833
|
+
context 'when :tailable_await is the cursor type' do
|
834
|
+
|
835
|
+
let(:options) do
|
836
|
+
{ :cursor_type => :tailable_await }
|
837
|
+
end
|
838
|
+
|
839
|
+
it 'sets the cursor flags' do
|
840
|
+
expect(query_spec_options[:flags]).to eq([:await_data, :tailable_cursor])
|
841
|
+
end
|
842
|
+
end
|
843
|
+
end
|
844
|
+
end
|
613
845
|
end
|
614
846
|
end
|
@@ -15,7 +15,7 @@ describe Mongo::Collection::View::Writable do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
after do
|
18
|
-
authorized_collection.
|
18
|
+
authorized_collection.delete_many
|
19
19
|
end
|
20
20
|
|
21
21
|
describe '#find_one_and_delete' do
|
@@ -456,11 +456,11 @@ describe Mongo::Collection::View::Writable do
|
|
456
456
|
context 'when a selector was provided' do
|
457
457
|
|
458
458
|
let(:selector) do
|
459
|
-
{ field: '
|
459
|
+
{ field: 'test' }
|
460
460
|
end
|
461
461
|
|
462
462
|
before do
|
463
|
-
authorized_collection.insert_many([{ field: '
|
463
|
+
authorized_collection.insert_many([{ field: 'test' }, { field: 'test' }])
|
464
464
|
end
|
465
465
|
|
466
466
|
let!(:response) do
|
@@ -472,7 +472,7 @@ describe Mongo::Collection::View::Writable do
|
|
472
472
|
end
|
473
473
|
|
474
474
|
it 'returns the number updated' do
|
475
|
-
expect(response.written_count).to eq(
|
475
|
+
expect(response.written_count).to eq(2)
|
476
476
|
end
|
477
477
|
|
478
478
|
it 'updates the documents in the collection' do
|