mongo 2.1.0.beta → 2.2.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 +0 -0
- data/README.md +10 -3
- data/Rakefile +1 -7
- data/lib/mongo/address/ipv4.rb +6 -1
- data/lib/mongo/address/unix.rb +2 -2
- data/lib/mongo/address.rb +32 -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 +61 -8
- 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 +164 -23
- data/lib/mongo/client.rb +75 -18
- data/lib/mongo/cluster/topology/replica_set.rb +8 -6
- data/lib/mongo/cluster/topology/unknown.rb +5 -2
- data/lib/mongo/cluster.rb +85 -5
- data/lib/mongo/collection/view/aggregation.rb +19 -45
- data/lib/mongo/collection/view/builder/aggregation.rb +98 -0
- data/lib/mongo/collection/view/builder/find_command.rb +111 -0
- data/lib/mongo/collection/view/builder/flags.rb +62 -0
- data/lib/mongo/collection/view/builder/map_reduce.rb +134 -0
- data/lib/mongo/collection/view/builder/modifiers.rb +80 -0
- data/lib/mongo/collection/view/builder/op_query.rb +83 -0
- data/lib/mongo/collection/view/builder.rb +20 -0
- data/lib/mongo/collection/view/explainable.rb +15 -0
- data/lib/mongo/collection/view/immutable.rb +4 -11
- data/lib/mongo/collection/view/iterable.rb +40 -5
- data/lib/mongo/collection/view/map_reduce.rb +67 -37
- data/lib/mongo/collection/view/readable.rb +114 -100
- data/lib/mongo/collection/view/writable.rb +46 -22
- data/lib/mongo/collection/view.rb +25 -22
- data/lib/mongo/collection.rb +130 -12
- data/lib/mongo/cursor/builder/get_more_command.rb +71 -0
- data/lib/mongo/cursor/builder/kill_cursors_command.rb +62 -0
- data/lib/mongo/cursor/builder/op_get_more.rb +61 -0
- data/lib/mongo/cursor/builder/op_kill_cursors.rb +56 -0
- data/lib/mongo/cursor/builder.rb +18 -0
- data/lib/mongo/cursor.rb +76 -21
- data/lib/mongo/database/view.rb +11 -6
- data/lib/mongo/database.rb +16 -6
- data/lib/mongo/dbref.rb +9 -9
- data/lib/mongo/{bulk_write/unordered_bulk_write.rb → error/closed_stream.rb} +12 -21
- data/lib/mongo/{bulk_write/ordered_bulk_write.rb → error/extra_file_chunk.rb} +13 -27
- data/lib/mongo/error/file_not_found.rb +37 -0
- 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/invalid_write_concern.rb +35 -0
- data/lib/mongo/error/missing_file_chunk.rb +38 -0
- data/lib/mongo/error/operation_failure.rb +33 -2
- 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 +8 -0
- data/lib/mongo/grid/file/chunk.rb +9 -9
- data/lib/mongo/grid/file/{metadata.rb → info.rb} +41 -39
- data/lib/mongo/grid/file.rb +12 -9
- 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 +7 -4
- 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 +38 -14
- data/lib/mongo/monitoring/event/command_started.rb +2 -1
- data/lib/mongo/monitoring/event/command_succeeded.rb +24 -2
- data/lib/mongo/monitoring/event/secure.rb +58 -0
- data/lib/mongo/monitoring/event.rb +1 -0
- data/lib/mongo/monitoring/publishable.rb +22 -12
- data/lib/mongo/monitoring.rb +1 -5
- data/lib/mongo/operation/commands/aggregate/result.rb +89 -0
- data/lib/mongo/operation/commands/aggregate.rb +64 -0
- data/lib/mongo/operation/commands/collections_info/result.rb +41 -0
- data/lib/mongo/operation/{read → commands}/collections_info.rb +5 -3
- data/lib/mongo/operation/commands/command.rb +47 -0
- data/lib/mongo/operation/commands/find/result.rb +62 -0
- data/lib/mongo/operation/commands/find.rb +27 -0
- data/lib/mongo/operation/commands/get_more/result.rb +62 -0
- data/lib/mongo/operation/commands/get_more.rb +27 -0
- data/lib/mongo/operation/{read → commands}/indexes.rb +9 -6
- data/lib/mongo/operation/{list_collections → commands/list_collections}/result.rb +1 -21
- data/lib/mongo/operation/{read → commands}/list_collections.rb +4 -32
- data/lib/mongo/operation/{list_indexes → commands/list_indexes}/result.rb +1 -21
- data/lib/mongo/operation/{read → commands}/list_indexes.rb +3 -33
- data/lib/mongo/operation/commands/map_reduce/result.rb +119 -0
- data/lib/mongo/operation/commands/map_reduce.rb +49 -0
- data/lib/mongo/operation/commands/parallel_scan/result.rb +64 -0
- data/lib/mongo/operation/commands/parallel_scan.rb +52 -0
- data/lib/mongo/operation/commands/user_query.rb +71 -0
- data/lib/mongo/operation/commands/users_info/result.rb +38 -0
- data/lib/mongo/operation/commands/users_info.rb +48 -0
- data/lib/mongo/operation/commands.rb +26 -0
- data/lib/mongo/operation/executable.rb +4 -68
- data/lib/mongo/operation/kill_cursors.rb +3 -3
- data/lib/mongo/operation/object_id_generator.rb +36 -0
- data/lib/mongo/operation/read/get_more.rb +2 -22
- data/lib/mongo/operation/read/query/result.rb +40 -0
- 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 +43 -1
- data/lib/mongo/operation/specifiable.rb +59 -1
- data/lib/mongo/operation/write/bulk/bulkable.rb +83 -0
- data/lib/mongo/operation/write/bulk/delete/result.rb +67 -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 +3 -3
- data/lib/mongo/operation/write/command/drop_index.rb +0 -1
- data/lib/mongo/operation/write/command/insert.rb +4 -3
- data/lib/mongo/operation/write/command/remove_user.rb +0 -1
- data/lib/mongo/operation/write/command/update.rb +6 -4
- 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 +49 -0
- data/lib/mongo/operation/write/idable.rb +24 -2
- 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 +33 -5
- data/lib/mongo/options/mapper.rb +26 -2
- data/lib/mongo/options/redacted.rb +156 -0
- data/lib/mongo/options.rb +1 -0
- data/lib/mongo/protocol/bit_vector.rb +11 -9
- data/lib/mongo/protocol/delete.rb +78 -3
- data/lib/mongo/protocol/get_more.rb +59 -2
- data/lib/mongo/protocol/insert.rb +73 -1
- data/lib/mongo/protocol/kill_cursors.rb +66 -4
- data/lib/mongo/protocol/message.rb +44 -20
- data/lib/mongo/protocol/query.rb +153 -65
- data/lib/mongo/protocol/reply.rb +92 -1
- data/lib/mongo/protocol/serializers.rb +49 -40
- data/lib/mongo/protocol/update.rb +93 -1
- data/lib/mongo/retryable.rb +101 -0
- data/lib/mongo/server/connectable.rb +28 -8
- data/lib/mongo/server/connection.rb +52 -10
- data/lib/mongo/server/connection_pool/queue.rb +15 -0
- data/lib/mongo/server/connection_pool.rb +12 -15
- data/lib/mongo/server/description/features.rb +4 -2
- data/lib/mongo/server/description.rb +39 -3
- data/lib/mongo/server/monitor/connection.rb +49 -28
- data/lib/mongo/server/monitor.rb +3 -14
- data/lib/mongo/server.rb +31 -4
- data/lib/mongo/server_selector/selectable.rb +58 -32
- data/lib/mongo/server_selector.rb +19 -10
- data/lib/mongo/socket/ssl.rb +4 -1
- data/lib/mongo/socket/tcp.rb +2 -2
- data/lib/mongo/socket/unix.rb +5 -8
- data/lib/mongo/socket.rb +11 -4
- data/lib/mongo/uri.rb +245 -139
- data/lib/mongo/version.rb +1 -1
- data/lib/mongo/write_concern.rb +21 -6
- data/lib/mongo.rb +4 -4
- data/mongo.gemspec +1 -2
- data/spec/mongo/address/unix_spec.rb +1 -1
- data/spec/mongo/address_spec.rb +25 -0
- data/spec/mongo/auth/ldap/conversation_spec.rb +43 -0
- data/spec/mongo/auth/user/view_spec.rb +26 -1
- data/spec/mongo/bulk_write/ordered_combiner_spec.rb +284 -0
- data/spec/mongo/bulk_write/unordered_combiner_spec.rb +239 -0
- data/spec/mongo/bulk_write_spec.rb +385 -161
- data/spec/mongo/client_spec.rb +193 -23
- data/spec/mongo/cluster/topology/replica_set_spec.rb +2 -0
- data/spec/mongo/collection/view/aggregation_spec.rb +65 -0
- data/spec/mongo/collection/view/builder/find_command_spec.rb +167 -0
- data/spec/mongo/collection/view/builder/flags_spec.rb +106 -0
- data/spec/mongo/collection/view/builder/modifiers_spec.rb +210 -0
- data/spec/mongo/collection/view/builder/op_query_spec.rb +154 -0
- data/spec/mongo/collection/view/explainable_spec.rb +1 -2
- data/spec/mongo/collection/view/immutable_spec.rb +54 -0
- data/spec/mongo/collection/view/map_reduce_spec.rb +104 -9
- data/spec/mongo/collection/view/readable_spec.rb +109 -112
- data/spec/mongo/collection/view_spec.rb +119 -487
- data/spec/mongo/collection_spec.rb +1002 -33
- data/spec/mongo/command_monitoring_spec.rb +64 -0
- data/spec/mongo/connection_string_spec.rb +115 -0
- data/spec/mongo/cursor/builder/get_more_command_spec.rb +160 -0
- data/spec/mongo/cursor/builder/op_get_more_spec.rb +52 -0
- data/spec/mongo/cursor_spec.rb +10 -60
- data/spec/mongo/database_spec.rb +81 -12
- data/spec/mongo/dbref_spec.rb +4 -4
- data/spec/mongo/grid/file/chunk_spec.rb +6 -6
- 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/index/view_spec.rb +41 -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/operation/{aggregate → commands/aggregate}/result_spec.rb +1 -1
- 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} +1 -19
- 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/result_spec.rb +19 -0
- data/spec/mongo/operation/write/bulk/{bulk_delete_spec.rb → delete_spec.rb} +17 -28
- data/spec/mongo/operation/write/bulk/{bulk_insert_spec.rb → insert_spec.rb} +1 -12
- data/spec/mongo/operation/write/bulk/{bulk_update_spec.rb → update_spec.rb} +7 -18
- data/spec/mongo/operation/write/command/delete_spec.rb +18 -9
- data/spec/mongo/operation/write/command/insert_spec.rb +18 -9
- data/spec/mongo/operation/write/command/update_spec.rb +18 -9
- data/spec/mongo/operation/write/delete_spec.rb +3 -3
- data/spec/mongo/operation/write/insert_spec.rb +0 -11
- data/spec/mongo/operation/write/update_spec.rb +6 -6
- data/spec/mongo/options/redacted_spec.rb +350 -0
- data/spec/mongo/protocol/delete_spec.rb +4 -4
- data/spec/mongo/protocol/get_more_spec.rb +4 -4
- data/spec/mongo/protocol/insert_spec.rb +3 -3
- data/spec/mongo/protocol/kill_cursors_spec.rb +8 -6
- data/spec/mongo/protocol/query_spec.rb +21 -7
- data/spec/mongo/protocol/update_spec.rb +5 -5
- data/spec/mongo/retryable_spec.rb +221 -0
- data/spec/mongo/server/connection_pool/queue_spec.rb +16 -0
- data/spec/mongo/server/connection_pool_spec.rb +42 -6
- data/spec/mongo/server/connection_spec.rb +86 -1
- data/spec/mongo/server/description/features_spec.rb +25 -0
- data/spec/mongo/server/description_spec.rb +42 -0
- data/spec/mongo/server/monitor_spec.rb +44 -0
- data/spec/mongo/server_discovery_and_monitoring_spec.rb +25 -59
- data/spec/mongo/server_selection_rtt_spec.rb +37 -57
- data/spec/mongo/server_selection_spec.rb +5 -3
- 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 +78 -15
- data/spec/mongo/socket/ssl_spec.rb +101 -57
- data/spec/mongo/socket/unix_spec.rb +52 -0
- data/spec/mongo/uri_spec.rb +271 -59
- data/spec/mongo/write_concern_spec.rb +126 -0
- data/spec/spec_helper.rb +29 -23
- data/spec/support/authorization.rb +4 -5
- 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 +268 -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 +373 -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 +14 -10
- data/spec/support/crud/write.rb +36 -9
- 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 +2 -2
- data/spec/support/sdam/rs/equal_electionids.yml +1 -2
- data/spec/support/sdam/rs/new_primary_new_electionid.yml +0 -3
- 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/rsother_discovered.yml +24 -3
- data/spec/support/sdam/rs/secondary_mismatched_me.yml +37 -0
- data/spec/support/sdam/rs/stepdown_change_set_name.yml +59 -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 +3 -1
- data/spec/support/server_selection.rb +3 -1
- data/spec/support/shared/bulk_write.rb +192 -0
- data/spec/support/shared/protocol.rb +5 -5
- data/spec/support/shared/server_selector.rb +78 -13
- data/spec/support/travis.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +211 -72
- metadata.gz.sig +0 -0
- data/lib/mongo/bulk_write/bulk_writable.rb +0 -252
- data/lib/mongo/bulk_write/deletable.rb +0 -57
- data/lib/mongo/bulk_write/insertable.rb +0 -49
- data/lib/mongo/bulk_write/replacable.rb +0 -58
- data/lib/mongo/bulk_write/updatable.rb +0 -69
- data/lib/mongo/grid/fs.rb +0 -146
- data/lib/mongo/operation/aggregate/result.rb +0 -103
- data/lib/mongo/operation/aggregate.rb +0 -108
- data/lib/mongo/operation/command.rb +0 -61
- data/lib/mongo/operation/map_reduce/result.rb +0 -122
- data/lib/mongo/operation/map_reduce.rb +0 -95
- data/lib/mongo/operation/parallel_scan/result.rb +0 -72
- data/lib/mongo/operation/parallel_scan.rb +0 -76
- 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 -174
- 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/grid/fs_spec.rb +0 -160
- data/spec/mongo/loggable_spec.rb +0 -63
- data/spec/mongo/operation/aggregate_spec.rb +0 -127
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Mongo::Collection::View do
|
4
4
|
|
5
|
-
let(:
|
5
|
+
let(:filter) do
|
6
6
|
{}
|
7
7
|
end
|
8
8
|
|
@@ -11,7 +11,7 @@ describe Mongo::Collection::View do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
let(:view) do
|
14
|
-
described_class.new(authorized_collection,
|
14
|
+
described_class.new(authorized_collection, filter, options)
|
15
15
|
end
|
16
16
|
|
17
17
|
after do
|
@@ -29,10 +29,10 @@ describe Mongo::Collection::View do
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
-
context 'when the views have the same collection,
|
32
|
+
context 'when the views have the same collection, filter, and options' do
|
33
33
|
|
34
34
|
let(:other) do
|
35
|
-
described_class.new(authorized_collection,
|
35
|
+
described_class.new(authorized_collection, filter, options)
|
36
36
|
end
|
37
37
|
|
38
38
|
it 'returns true' do
|
@@ -47,7 +47,7 @@ describe Mongo::Collection::View do
|
|
47
47
|
end
|
48
48
|
|
49
49
|
let(:other) do
|
50
|
-
described_class.new(other_collection,
|
50
|
+
described_class.new(other_collection, filter, options)
|
51
51
|
end
|
52
52
|
|
53
53
|
it 'returns false' do
|
@@ -55,14 +55,14 @@ describe Mongo::Collection::View do
|
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
-
context 'when two views have a different
|
58
|
+
context 'when two views have a different filter' do
|
59
59
|
|
60
|
-
let(:
|
60
|
+
let(:other_filter) do
|
61
61
|
{ 'name' => 'Emily' }
|
62
62
|
end
|
63
63
|
|
64
64
|
let(:other) do
|
65
|
-
described_class.new(authorized_collection,
|
65
|
+
described_class.new(authorized_collection, other_filter, options)
|
66
66
|
end
|
67
67
|
|
68
68
|
it 'returns false' do
|
@@ -77,7 +77,7 @@ describe Mongo::Collection::View do
|
|
77
77
|
end
|
78
78
|
|
79
79
|
let(:other) do
|
80
|
-
described_class.new(authorized_collection,
|
80
|
+
described_class.new(authorized_collection, filter, other_options)
|
81
81
|
end
|
82
82
|
|
83
83
|
it 'returns false' do
|
@@ -96,8 +96,8 @@ describe Mongo::Collection::View do
|
|
96
96
|
expect(view.options).not_to be(view_clone.options)
|
97
97
|
end
|
98
98
|
|
99
|
-
it 'dups the
|
100
|
-
expect(view.
|
99
|
+
it 'dups the filter' do
|
100
|
+
expect(view.filter).not_to be(view_clone.filter)
|
101
101
|
end
|
102
102
|
|
103
103
|
it 'references the same collection' do
|
@@ -119,463 +119,37 @@ describe Mongo::Collection::View do
|
|
119
119
|
authorized_collection.delete_many
|
120
120
|
end
|
121
121
|
|
122
|
-
context 'when
|
123
|
-
|
124
|
-
let(:returned) do
|
125
|
-
view.to_a
|
126
|
-
end
|
127
|
-
|
128
|
-
let(:query_spec) do
|
129
|
-
view.send(:query_spec)
|
130
|
-
end
|
131
|
-
|
132
|
-
context 'when limit is specified' do
|
133
|
-
|
134
|
-
let(:options) do
|
135
|
-
{ :limit => 5 }
|
136
|
-
end
|
137
|
-
|
138
|
-
let(:returned) do
|
139
|
-
view.to_a
|
140
|
-
end
|
141
|
-
|
142
|
-
it 'sets the limit on the initial query' do
|
143
|
-
expect(query_spec[:options][:limit]).to eq(options[:limit])
|
144
|
-
end
|
145
|
-
|
146
|
-
it 'returns limited documents' do
|
147
|
-
expect(returned.count).to eq(5)
|
148
|
-
end
|
149
|
-
|
150
|
-
it 'iterates over all of the documents' do
|
151
|
-
returned.each do |doc|
|
152
|
-
expect(doc).to have_key('field')
|
153
|
-
end
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
157
|
-
context 'when batch size is specified' do
|
158
|
-
|
159
|
-
let(:options) do
|
160
|
-
{ :batch_size => 5 }
|
161
|
-
end
|
162
|
-
|
163
|
-
let(:returned) do
|
164
|
-
view.to_a
|
165
|
-
end
|
166
|
-
|
167
|
-
it 'sets the batch size on the initial query' do
|
168
|
-
expect(query_spec[:options][:limit]).to eq(options[:batch_size])
|
169
|
-
end
|
170
|
-
|
171
|
-
it 'returns all the documents' do
|
172
|
-
expect(returned.count).to eq(10)
|
173
|
-
end
|
174
|
-
|
175
|
-
it 'iterates over all of the documents' do
|
176
|
-
returned.each do |doc|
|
177
|
-
expect(doc).to have_key('field')
|
178
|
-
end
|
179
|
-
end
|
180
|
-
end
|
181
|
-
|
182
|
-
context 'when no limit is specified' do
|
183
|
-
|
184
|
-
it 'does not set a limit on the initial query' do
|
185
|
-
expect(query_spec[:options][:limit]).to be_nil
|
186
|
-
end
|
187
|
-
|
188
|
-
it 'returns all the documents' do
|
189
|
-
expect(returned.count).to eq(10)
|
190
|
-
end
|
191
|
-
|
192
|
-
it 'iterates over all of the documents' do
|
193
|
-
returned.each do |doc|
|
194
|
-
expect(doc).to have_key('field')
|
195
|
-
end
|
196
|
-
end
|
197
|
-
end
|
198
|
-
|
199
|
-
context 'when batch size is greater than limit' do
|
200
|
-
|
201
|
-
let(:options) do
|
202
|
-
{ :batch_size => 5, :limit => 3 }
|
203
|
-
end
|
204
|
-
|
205
|
-
let(:returned) do
|
206
|
-
view.to_a
|
207
|
-
end
|
208
|
-
|
209
|
-
it 'sets the limit on the initial query' do
|
210
|
-
expect(query_spec[:options][:limit]).to eq(options[:limit])
|
211
|
-
end
|
212
|
-
|
213
|
-
it 'returns the limit of documents' do
|
214
|
-
expect(returned.count).to eq(3)
|
215
|
-
end
|
216
|
-
|
217
|
-
it 'iterates over all of the documents' do
|
218
|
-
returned.each do |doc|
|
219
|
-
expect(doc).to have_key('field')
|
220
|
-
end
|
221
|
-
end
|
222
|
-
end
|
223
|
-
|
224
|
-
context 'when limit is greater than batch size' do
|
225
|
-
|
226
|
-
let(:options) do
|
227
|
-
{ :limit => 5, :batch_size => 3 }
|
228
|
-
end
|
229
|
-
|
230
|
-
let(:returned) do
|
231
|
-
view.to_a
|
232
|
-
end
|
233
|
-
|
234
|
-
it 'sets the batch size on the initial query' do
|
235
|
-
expect(query_spec[:options][:limit]).to eq(options[:batch_size])
|
236
|
-
end
|
237
|
-
|
238
|
-
it 'returns the limit of documents' do
|
239
|
-
expect(returned.count).to eq(5)
|
240
|
-
end
|
241
|
-
|
242
|
-
it 'iterates over all of the documents' do
|
243
|
-
returned.each do |doc|
|
244
|
-
expect(doc).to have_key('field')
|
245
|
-
end
|
246
|
-
end
|
247
|
-
end
|
248
|
-
|
249
|
-
context 'when the selector has special fields' do
|
250
|
-
|
251
|
-
context 'when a snapshot option is specified' do
|
252
|
-
|
253
|
-
let(:options) do
|
254
|
-
{ :snapshot => true }
|
255
|
-
end
|
256
|
-
|
257
|
-
before do
|
258
|
-
expect(view).to receive(:special_selector).and_call_original
|
259
|
-
end
|
260
|
-
|
261
|
-
it 'creates a special query selector' do
|
262
|
-
expect(query_spec[:selector][:$snapshot]).to eq(options[:snapshot])
|
263
|
-
end
|
264
|
-
|
265
|
-
it 'iterates over all of the documents' do
|
266
|
-
returned.each do |doc|
|
267
|
-
expect(doc).to have_key('field')
|
268
|
-
end
|
269
|
-
end
|
270
|
-
end
|
271
|
-
|
272
|
-
context 'when a max_scan option is provided' do
|
273
|
-
|
274
|
-
let(:options) do
|
275
|
-
{ :max_scan => 100 }
|
276
|
-
end
|
277
|
-
|
278
|
-
before do
|
279
|
-
expect(view).to receive(:special_selector).and_call_original
|
280
|
-
end
|
281
|
-
|
282
|
-
it 'creates a special query selector' do
|
283
|
-
expect(query_spec[:selector][:$maxScan]).to eq(options[:max_scan])
|
284
|
-
end
|
285
|
-
|
286
|
-
it 'iterates over all of the documents' do
|
287
|
-
returned.each do |doc|
|
288
|
-
expect(doc).to have_key('field')
|
289
|
-
end
|
290
|
-
end
|
291
|
-
end
|
292
|
-
|
293
|
-
context 'when a max_time_ms option is provided' do
|
294
|
-
|
295
|
-
let(:options) do
|
296
|
-
{ :max_time_ms => 100 }
|
297
|
-
end
|
298
|
-
|
299
|
-
before do
|
300
|
-
expect(view).to receive(:special_selector).and_call_original
|
301
|
-
end
|
302
|
-
|
303
|
-
it 'creates a special query selector' do
|
304
|
-
expect(query_spec[:selector][:$maxTimeMS]).to eq(options[:max_time_ms])
|
305
|
-
end
|
306
|
-
|
307
|
-
it 'iterates over all of the documents' do
|
308
|
-
returned.each do |doc|
|
309
|
-
expect(doc).to have_key('field')
|
310
|
-
end
|
311
|
-
end
|
312
|
-
end
|
313
|
-
|
314
|
-
context 'when a show_disk_loc option is provided' do
|
315
|
-
|
316
|
-
let(:options) do
|
317
|
-
{ :show_disk_loc => true }
|
318
|
-
end
|
319
|
-
|
320
|
-
before do
|
321
|
-
expect(view).to receive(:special_selector).and_call_original
|
322
|
-
end
|
323
|
-
|
324
|
-
it 'creates a special query selector' do
|
325
|
-
expect(query_spec[:selector][:$showDiskLoc]).to eq(options[:show_disk_loc])
|
326
|
-
end
|
327
|
-
|
328
|
-
it 'iterates over all of the documents' do
|
329
|
-
returned.each do |doc|
|
330
|
-
expect(doc).to have_key('field')
|
331
|
-
end
|
332
|
-
end
|
333
|
-
end
|
334
|
-
end
|
335
|
-
|
336
|
-
context 'when sorting' do
|
337
|
-
|
338
|
-
let(:options) do
|
339
|
-
{ :sort => {'x' => Mongo::Index::ASCENDING }}
|
340
|
-
end
|
341
|
-
|
342
|
-
before do
|
343
|
-
expect(view).to receive(:special_selector).and_call_original
|
344
|
-
end
|
345
|
-
|
346
|
-
it 'creates a special query selector' do
|
347
|
-
expect(query_spec[:selector][:$orderby]).to eq(options[:sort])
|
348
|
-
end
|
349
|
-
|
350
|
-
it 'iterates over all of the documents' do
|
351
|
-
returned.each do |doc|
|
352
|
-
expect(doc).to have_key('field')
|
353
|
-
end
|
354
|
-
end
|
355
|
-
end
|
356
|
-
|
357
|
-
context 'when providing a hint' do
|
358
|
-
|
359
|
-
context 'when the hint is bad' do
|
360
|
-
|
361
|
-
let(:options) do
|
362
|
-
{ :hint => { 'x' => Mongo::Index::ASCENDING }}
|
363
|
-
end
|
364
|
-
|
365
|
-
before do
|
366
|
-
expect(view).to receive(:special_selector).and_call_original
|
367
|
-
end
|
368
|
-
|
369
|
-
it 'creates a special query selector' do
|
370
|
-
expect(query_spec[:selector][:$hint]).to eq(options[:hint])
|
371
|
-
end
|
372
|
-
end
|
373
|
-
end
|
374
|
-
|
375
|
-
context 'when providing a comment' do
|
376
|
-
|
377
|
-
let(:options) do
|
378
|
-
{ :comment => 'query1' }
|
379
|
-
end
|
380
|
-
|
381
|
-
before do
|
382
|
-
expect(view).to receive(:special_selector).and_call_original
|
383
|
-
end
|
384
|
-
|
385
|
-
it 'creates a special query selector' do
|
386
|
-
expect(query_spec[:selector][:$comment]).to eq(options[:comment])
|
387
|
-
end
|
388
|
-
|
389
|
-
it 'iterates over all of the documents' do
|
390
|
-
returned.each do |doc|
|
391
|
-
expect(doc).to have_key('field')
|
392
|
-
end
|
393
|
-
end
|
394
|
-
end
|
395
|
-
|
396
|
-
context 'when the cluster is sharded', if: sharded? do
|
397
|
-
|
398
|
-
before do
|
399
|
-
allow(authorized_collection.cluster).to receive(:sharded?).and_return(true)
|
400
|
-
expect(view).to receive(:special_selector).and_call_original
|
401
|
-
end
|
122
|
+
context 'when a block is not provided' do
|
402
123
|
|
403
|
-
|
404
|
-
|
405
|
-
expect(doc).to have_key('field')
|
406
|
-
end
|
407
|
-
end
|
124
|
+
let(:enumerator) do
|
125
|
+
view.each
|
408
126
|
end
|
409
127
|
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
{ :modifiers => {
|
414
|
-
:$orderby => {'x' => Mongo::Index::ASCENDING }
|
415
|
-
}
|
416
|
-
}
|
417
|
-
end
|
418
|
-
|
419
|
-
before do
|
420
|
-
expect(view).to receive(:special_selector).and_call_original
|
421
|
-
end
|
422
|
-
|
423
|
-
it 'creates a special query selector' do
|
424
|
-
expect(query_spec[:selector][:$orderby]).to eq(options[:modifiers][:$orderby])
|
425
|
-
end
|
426
|
-
|
427
|
-
it 'iterates over all of the documents' do
|
428
|
-
view.each do |doc|
|
429
|
-
expect(doc).to have_key('field')
|
430
|
-
end
|
431
|
-
end
|
432
|
-
|
433
|
-
context 'when $explain is specified' do
|
434
|
-
let(:options) do
|
435
|
-
{ :modifiers => {
|
436
|
-
:$explain => 1
|
437
|
-
}
|
438
|
-
}
|
439
|
-
end
|
440
|
-
|
441
|
-
let(:explain) do
|
442
|
-
view.to_a.first
|
443
|
-
end
|
444
|
-
|
445
|
-
it 'executes an explain' do
|
446
|
-
expect(explain['cursor'] == 'BasicCursor' ||
|
447
|
-
explain['queryPlanner']).to be_truthy
|
448
|
-
end
|
449
|
-
|
450
|
-
end
|
451
|
-
|
452
|
-
context 'when an option is also provided' do
|
453
|
-
|
454
|
-
context 'when $orderby and sort are specified' do
|
455
|
-
|
456
|
-
let(:options) do
|
457
|
-
{ :modifiers => {
|
458
|
-
:$orderby => { 'x' => Mongo::Index::ASCENDING }
|
459
|
-
},
|
460
|
-
:sort => { 'x' => Mongo::Index::DESCENDING }
|
461
|
-
}
|
462
|
-
end
|
463
|
-
|
464
|
-
it 'overrides the modifier value with the option value' do
|
465
|
-
expect(query_spec[:selector][:$orderby]).to eq(options[:sort])
|
466
|
-
end
|
467
|
-
end
|
468
|
-
|
469
|
-
context 'when $comment and comment are specified' do
|
470
|
-
|
471
|
-
let(:options) do
|
472
|
-
{ :modifiers => {
|
473
|
-
:$comment => 'query1'
|
474
|
-
},
|
475
|
-
:comment => 'query2'
|
476
|
-
}
|
477
|
-
end
|
478
|
-
|
479
|
-
it 'overrides the modifier value with the option value' do
|
480
|
-
expect(query_spec[:selector][:$comment]).to eq(options[:comment])
|
481
|
-
end
|
482
|
-
end
|
483
|
-
|
484
|
-
context 'when $hint and hint are specified' do
|
485
|
-
|
486
|
-
let(:options) do
|
487
|
-
{ :modifiers => {
|
488
|
-
:$hint => 'x'
|
489
|
-
},
|
490
|
-
:hint => 'y'
|
491
|
-
}
|
492
|
-
end
|
493
|
-
|
494
|
-
it 'overrides the modifier value with the option value' do
|
495
|
-
expect(query_spec[:selector][:$hint]).to eq(options[:hint])
|
496
|
-
end
|
497
|
-
|
498
|
-
end
|
499
|
-
|
500
|
-
context 'when $maxScan and max_scan are specified' do
|
501
|
-
|
502
|
-
let(:options) do
|
503
|
-
{ :modifiers => {
|
504
|
-
:$maxScan => 4
|
505
|
-
},
|
506
|
-
:max_scan => 5
|
507
|
-
}
|
508
|
-
end
|
509
|
-
|
510
|
-
it 'overrides the modifier value with the option value' do
|
511
|
-
expect(query_spec[:selector][:$maxScan]).to eq(options[:max_scan])
|
512
|
-
end
|
513
|
-
end
|
514
|
-
|
515
|
-
context 'when $maxTimeMS and max_time_ms are specified' do
|
516
|
-
|
517
|
-
let(:options) do
|
518
|
-
{ :modifiers => {
|
519
|
-
:$maxTimeMS => 100
|
520
|
-
},
|
521
|
-
:max_time_ms => 200
|
522
|
-
}
|
523
|
-
end
|
524
|
-
|
525
|
-
it 'overrides the modifier value with the option value' do
|
526
|
-
expect(query_spec[:selector][:$maxTimeMS]).to eq(options[:max_time_ms])
|
527
|
-
end
|
528
|
-
end
|
529
|
-
|
530
|
-
context 'when $query and a selector are specified' do
|
531
|
-
|
532
|
-
let(:selector) do
|
533
|
-
{ 'y' => 1 }
|
534
|
-
end
|
535
|
-
|
536
|
-
let(:options) do
|
537
|
-
{ :modifiers => {
|
538
|
-
:$query => { 'field' => 1 }
|
539
|
-
}
|
540
|
-
}
|
541
|
-
end
|
542
|
-
|
543
|
-
it 'overrides the modifier value with the option value' do
|
544
|
-
expect(query_spec[:selector][:$query]).to eq(selector)
|
545
|
-
end
|
546
|
-
end
|
547
|
-
|
548
|
-
|
128
|
+
it 'returns an enumerator' do
|
129
|
+
enumerator.each do |doc|
|
130
|
+
expect(doc).to have_key('field')
|
549
131
|
end
|
550
132
|
end
|
551
|
-
|
552
133
|
end
|
553
134
|
|
554
|
-
|
135
|
+
describe '#close_query' do
|
555
136
|
|
556
|
-
|
557
|
-
|
558
|
-
expect(spec[:selector]).to eq(selector)
|
559
|
-
end.and_call_original
|
137
|
+
let(:options) do
|
138
|
+
{ :batch_size => 1 }
|
560
139
|
end
|
561
140
|
|
562
|
-
|
563
|
-
view.
|
564
|
-
expect(doc).to have_key('field')
|
565
|
-
end
|
141
|
+
let(:cursor) do
|
142
|
+
view.instance_variable_get(:@cursor)
|
566
143
|
end
|
567
|
-
end
|
568
|
-
|
569
|
-
context 'when a block is not provided' do
|
570
144
|
|
571
|
-
|
572
|
-
view.
|
145
|
+
before do
|
146
|
+
view.to_enum.next
|
147
|
+
cursor.instance_variable_set(:@cursor_id, 1) unless find_command_enabled?
|
573
148
|
end
|
574
149
|
|
575
|
-
it '
|
576
|
-
|
577
|
-
|
578
|
-
end
|
150
|
+
it 'sends a kill cursors command for the cursor' do
|
151
|
+
expect(cursor).to receive(:kill_cursors).and_call_original
|
152
|
+
view.close_query
|
579
153
|
end
|
580
154
|
end
|
581
155
|
end
|
@@ -583,10 +157,10 @@ describe Mongo::Collection::View do
|
|
583
157
|
describe '#hash' do
|
584
158
|
|
585
159
|
let(:other) do
|
586
|
-
described_class.new(authorized_collection,
|
160
|
+
described_class.new(authorized_collection, filter, options)
|
587
161
|
end
|
588
162
|
|
589
|
-
it 'returns a unique value based on collection,
|
163
|
+
it 'returns a unique value based on collection, filter, options' do
|
590
164
|
expect(view.hash).to eq(other.hash)
|
591
165
|
end
|
592
166
|
|
@@ -597,7 +171,7 @@ describe Mongo::Collection::View do
|
|
597
171
|
end
|
598
172
|
|
599
173
|
let(:other) do
|
600
|
-
described_class.new(other_collection,
|
174
|
+
described_class.new(other_collection, filter, options)
|
601
175
|
end
|
602
176
|
|
603
177
|
it 'returns different hash values' do
|
@@ -605,14 +179,14 @@ describe Mongo::Collection::View do
|
|
605
179
|
end
|
606
180
|
end
|
607
181
|
|
608
|
-
context 'when two views only have different
|
182
|
+
context 'when two views only have different filter' do
|
609
183
|
|
610
|
-
let(:
|
184
|
+
let(:other_filter) do
|
611
185
|
{ 'name' => 'Emily' }
|
612
186
|
end
|
613
187
|
|
614
188
|
let(:other) do
|
615
|
-
described_class.new(authorized_collection,
|
189
|
+
described_class.new(authorized_collection, other_filter, options)
|
616
190
|
end
|
617
191
|
|
618
192
|
it 'returns different hash values' do
|
@@ -627,7 +201,7 @@ describe Mongo::Collection::View do
|
|
627
201
|
end
|
628
202
|
|
629
203
|
let(:other) do
|
630
|
-
described_class.new(authorized_collection,
|
204
|
+
described_class.new(authorized_collection, filter, other_options)
|
631
205
|
end
|
632
206
|
|
633
207
|
it 'returns different hash values' do
|
@@ -638,53 +212,111 @@ describe Mongo::Collection::View do
|
|
638
212
|
|
639
213
|
describe '#initialize' do
|
640
214
|
|
641
|
-
|
642
|
-
{ :limit => 5 }
|
643
|
-
end
|
215
|
+
context 'when the filter is not a valid document' do
|
644
216
|
|
645
|
-
|
646
|
-
|
647
|
-
|
217
|
+
let(:filter) do
|
218
|
+
'y'
|
219
|
+
end
|
648
220
|
|
649
|
-
|
650
|
-
|
221
|
+
let(:options) do
|
222
|
+
{ limit: 5 }
|
223
|
+
end
|
224
|
+
|
225
|
+
it 'raises an error' do
|
226
|
+
expect do
|
227
|
+
view
|
228
|
+
end.to raise_error(Mongo::Error::InvalidDocument)
|
229
|
+
end
|
651
230
|
end
|
652
231
|
|
653
|
-
|
654
|
-
|
232
|
+
context 'when the filter and options are standard' do
|
233
|
+
|
234
|
+
let(:filter) do
|
235
|
+
{ 'name' => 'test' }
|
236
|
+
end
|
237
|
+
|
238
|
+
let(:options) do
|
239
|
+
{ 'sort' => { 'name' => 1 }}
|
240
|
+
end
|
241
|
+
|
242
|
+
it 'parses a standard filter' do
|
243
|
+
expect(view.filter).to eq(filter)
|
244
|
+
end
|
245
|
+
|
246
|
+
it 'parses standard options' do
|
247
|
+
expect(view.options).to eq(options)
|
248
|
+
end
|
655
249
|
end
|
656
250
|
|
657
|
-
|
658
|
-
|
251
|
+
context 'when the filter contains modifiers' do
|
252
|
+
|
253
|
+
let(:filter) do
|
254
|
+
{ :$query => { :name => 'test' }, :$comment => 'testing' }
|
255
|
+
end
|
256
|
+
|
257
|
+
let(:options) do
|
258
|
+
{ :sort => { name: 1 }}
|
259
|
+
end
|
260
|
+
|
261
|
+
it 'parses a standard filter' do
|
262
|
+
expect(view.filter).to eq('name' => 'test')
|
263
|
+
end
|
264
|
+
|
265
|
+
it 'parses standard options' do
|
266
|
+
expect(view.options).to eq('sort' => { 'name' => 1 }, 'comment' => 'testing')
|
267
|
+
end
|
659
268
|
end
|
660
269
|
|
661
|
-
|
662
|
-
|
270
|
+
context 'when the options contain modifiers' do
|
271
|
+
|
272
|
+
let(:filter) do
|
273
|
+
{ 'name' => 'test' }
|
274
|
+
end
|
275
|
+
|
276
|
+
let(:options) do
|
277
|
+
{ :sort => { name: 1 }, :modifiers => { :$comment => 'testing'}}
|
278
|
+
end
|
279
|
+
|
280
|
+
it 'parses a standard filter' do
|
281
|
+
expect(view.filter).to eq('name' => 'test')
|
282
|
+
end
|
283
|
+
|
284
|
+
it 'parses standard options' do
|
285
|
+
expect(view.options).to eq('sort' => { 'name' => 1 }, 'comment' => 'testing')
|
286
|
+
end
|
663
287
|
end
|
664
288
|
|
665
|
-
context 'when the
|
289
|
+
context 'when the filter and options both contain modifiers' do
|
666
290
|
|
667
|
-
let(:
|
668
|
-
'
|
291
|
+
let(:filter) do
|
292
|
+
{ :$query => { 'name' => 'test' }, :$hint => { name: 1 }}
|
669
293
|
end
|
670
294
|
|
671
|
-
|
672
|
-
|
673
|
-
|
674
|
-
|
295
|
+
let(:options) do
|
296
|
+
{ :sort => { name: 1 }, :modifiers => { :$comment => 'testing' }}
|
297
|
+
end
|
298
|
+
|
299
|
+
it 'parses a standard filter' do
|
300
|
+
expect(view.filter).to eq('name' => 'test')
|
301
|
+
end
|
302
|
+
|
303
|
+
it 'parses standard options' do
|
304
|
+
expect(view.options).to eq(
|
305
|
+
'sort' => { 'name' => 1 }, 'comment' => 'testing', 'hint' => { 'name' => 1 }
|
306
|
+
)
|
675
307
|
end
|
676
308
|
end
|
677
309
|
end
|
678
310
|
|
679
311
|
describe '#inspect' do
|
680
312
|
|
681
|
-
context 'when there is a namespace,
|
313
|
+
context 'when there is a namespace, filter, and options' do
|
682
314
|
|
683
315
|
let(:options) do
|
684
|
-
{
|
316
|
+
{ 'limit' => 5 }
|
685
317
|
end
|
686
318
|
|
687
|
-
let(:
|
319
|
+
let(:filter) do
|
688
320
|
{ 'name' => 'Emily' }
|
689
321
|
end
|
690
322
|
|
@@ -696,8 +328,8 @@ describe Mongo::Collection::View do
|
|
696
328
|
expect(view.inspect).to match(/.*#{authorized_collection.namespace}.*/)
|
697
329
|
end
|
698
330
|
|
699
|
-
it 'returns a string containing the
|
700
|
-
expect(view.inspect).to match(/.*#{
|
331
|
+
it 'returns a string containing the filter' do
|
332
|
+
expect(view.inspect).to match(/.*#{filter.inspect}.*/)
|
701
333
|
end
|
702
334
|
|
703
335
|
it 'returns a string containing the options' do
|