mongo 2.4.0.rc0 → 2.4.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +1 -2
- data/lib/mongo/bulk_write/validatable.rb +3 -1
- data/lib/mongo/client.rb +30 -3
- data/lib/mongo/cluster/app_metadata.rb +7 -2
- data/lib/mongo/collection.rb +3 -1
- data/lib/mongo/collection/view.rb +3 -1
- data/lib/mongo/collection/view/aggregation.rb +3 -1
- data/lib/mongo/collection/view/builder/find_command.rb +20 -5
- data/lib/mongo/collection/view/map_reduce.rb +3 -1
- data/lib/mongo/collection/view/writable.rb +12 -2
- data/lib/mongo/cursor/builder/get_more_command.rb +3 -2
- data/lib/mongo/error/closed_stream.rb +1 -1
- data/lib/mongo/error/invalid_server_preference.rb +1 -1
- data/lib/mongo/index/view.rb +3 -1
- data/lib/mongo/operation/write/bulk/mergable.rb +1 -1
- data/lib/mongo/operation/write/create_index.rb +1 -1
- data/lib/mongo/operation/write/delete.rb +1 -1
- data/lib/mongo/operation/write/update.rb +1 -1
- data/lib/mongo/protocol/delete.rb +4 -1
- data/lib/mongo/protocol/get_more.rb +4 -1
- data/lib/mongo/protocol/insert.rb +7 -3
- data/lib/mongo/protocol/kill_cursors.rb +4 -1
- data/lib/mongo/protocol/message.rb +5 -1
- data/lib/mongo/protocol/query.rb +11 -4
- data/lib/mongo/protocol/update.rb +4 -1
- data/lib/mongo/server/connectable.rb +8 -2
- data/lib/mongo/server/connection_pool.rb +3 -1
- data/lib/mongo/server/monitor.rb +1 -0
- data/lib/mongo/socket.rb +16 -8
- data/lib/mongo/socket/ssl.rb +24 -9
- data/lib/mongo/uri.rb +6 -6
- data/lib/mongo/version.rb +1 -1
- data/mongo.gemspec +1 -1
- data/spec/mongo/bulk_write_spec.rb +117 -0
- data/spec/mongo/collection/view/aggregation_spec.rb +26 -0
- data/spec/mongo/collection/view/builder/find_command_spec.rb +244 -2
- data/spec/mongo/collection/view/map_reduce_spec.rb +13 -0
- data/spec/mongo/collection/view/readable_spec.rb +26 -0
- data/spec/mongo/collection/view/writable_spec.rb +104 -0
- data/spec/mongo/collection/view_spec.rb +13 -0
- data/spec/mongo/collection_spec.rb +226 -7
- data/spec/mongo/crud_spec.rb +5 -5
- data/spec/mongo/index/view_spec.rb +53 -0
- data/spec/mongo/server/connection_spec.rb +45 -26
- data/spec/mongo/socket/ssl_spec.rb +358 -22
- data/spec/spec_helper.rb +4 -0
- data/spec/support/authorization.rb +3 -3
- data/spec/support/certificates/client_cert.pem +21 -0
- data/spec/support/certificates/client_key.pem +28 -0
- data/spec/support/certificates/client_key_encrypted.pem +30 -0
- data/spec/support/crud.rb +67 -22
- data/spec/support/crud/read.rb +18 -36
- data/spec/support/crud/write.rb +0 -44
- data/spec/support/crud_tests/read/aggregate-collation.yml +17 -0
- data/spec/support/crud_tests/read/aggregate-out.yml +28 -0
- data/spec/support/crud_tests/read/aggregate.yml +1 -35
- data/spec/support/crud_tests/read/count-collation.yml +15 -0
- data/spec/support/crud_tests/read/count.yml +3 -15
- data/spec/support/crud_tests/read/distinct-collation.yml +17 -0
- data/spec/support/crud_tests/read/distinct.yml +1 -14
- data/spec/support/crud_tests/read/find-collation.yml +15 -0
- data/spec/support/crud_tests/read/find.yml +1 -12
- data/spec/support/crud_tests/write/deleteMany-collation.yml +22 -0
- data/spec/support/crud_tests/write/deleteMany.yml +1 -23
- data/spec/support/crud_tests/write/deleteOne-collation.yml +22 -0
- data/spec/support/crud_tests/write/deleteOne.yml +1 -21
- data/spec/support/crud_tests/write/findOneAndDelete-collation.yml +23 -0
- data/spec/support/crud_tests/write/findOneAndDelete.yml +2 -28
- data/spec/support/crud_tests/write/findOneAndReplace-collation.yml +24 -0
- data/spec/support/crud_tests/write/findOneAndReplace-upsert.yml +47 -0
- data/spec/support/crud_tests/write/findOneAndReplace.yml +13 -53
- data/spec/support/crud_tests/write/findOneAndUpdate-collation.yml +27 -0
- data/spec/support/crud_tests/write/findOneAndUpdate.yml +8 -51
- data/spec/support/crud_tests/write/insertMany.yml +1 -2
- data/spec/support/crud_tests/write/insertOne.yml +1 -2
- data/spec/support/crud_tests/write/replaceOne-collation.yml +23 -0
- data/spec/support/crud_tests/write/replaceOne-upsert.yml +48 -0
- data/spec/support/crud_tests/write/replaceOne.yml +11 -45
- data/spec/support/crud_tests/write/updateMany-collation.yml +27 -0
- data/spec/support/crud_tests/write/updateMany.yml +10 -42
- data/spec/support/crud_tests/write/updateOne-collation.yml +24 -0
- data/spec/support/crud_tests/write/updateOne.yml +7 -33
- data/spec/support/sdam/rs/new_primary_new_setversion.yml +1 -1
- data/spec/support/sdam/rs/null_election_id.yml +1 -0
- data/spec/support/sdam/rs/primary_disconnect_electionid.yml +2 -3
- data/spec/support/sdam/rs/primary_disconnect_setversion.yml +1 -2
- 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
- metadata +40 -4
- metadata.gz.sig +0 -0
@@ -59,6 +59,7 @@ module Mongo
|
|
59
59
|
@update = update
|
60
60
|
@flags = options[:flags] || []
|
61
61
|
@upconverter = Upconverter.new(collection, selector, update, flags)
|
62
|
+
super
|
62
63
|
end
|
63
64
|
|
64
65
|
# Return the event payload for monitoring.
|
@@ -78,10 +79,12 @@ module Mongo
|
|
78
79
|
}
|
79
80
|
end
|
80
81
|
|
81
|
-
|
82
|
+
protected
|
82
83
|
|
83
84
|
attr_reader :upconverter
|
84
85
|
|
86
|
+
private
|
87
|
+
|
85
88
|
# The operation code required to specify an Update message.
|
86
89
|
# @return [Fixnum] the operation code.
|
87
90
|
def op_code
|
@@ -28,6 +28,10 @@ module Mongo
|
|
28
28
|
# The default time in seconds to timeout an operation executed on a socket.
|
29
29
|
#
|
30
30
|
# @since 2.0.0
|
31
|
+
#
|
32
|
+
# @deprecated Timeouts on Ruby sockets aren't effective so this default option is
|
33
|
+
# no longer used.
|
34
|
+
# Will be removed in driver version 3.0.
|
31
35
|
TIMEOUT = 5.freeze
|
32
36
|
|
33
37
|
# @return [ Mongo::Address ] address The address to connect to.
|
@@ -73,13 +77,15 @@ module Mongo
|
|
73
77
|
#
|
74
78
|
# @since 2.0.0
|
75
79
|
def timeout
|
76
|
-
@timeout ||= options[:socket_timeout]
|
80
|
+
@timeout ||= options[:socket_timeout]
|
77
81
|
end
|
78
82
|
|
79
|
-
|
83
|
+
protected
|
80
84
|
|
81
85
|
attr_reader :socket
|
82
86
|
|
87
|
+
private
|
88
|
+
|
83
89
|
def ssl_options
|
84
90
|
@ssl_options[:ssl] == true ? @ssl_options : {}
|
85
91
|
end
|
data/lib/mongo/server/monitor.rb
CHANGED
data/lib/mongo/socket.rb
CHANGED
@@ -162,14 +162,28 @@ module Mongo
|
|
162
162
|
# @since 2.0.5
|
163
163
|
def eof?
|
164
164
|
@socket.eof?
|
165
|
-
rescue IOError, SystemCallError =>
|
165
|
+
rescue IOError, SystemCallError => _
|
166
166
|
true
|
167
167
|
end
|
168
168
|
|
169
169
|
private
|
170
170
|
|
171
171
|
def read_from_socket(length)
|
172
|
-
|
172
|
+
data = String.new
|
173
|
+
deadline = (Time.now + timeout) if timeout
|
174
|
+
begin
|
175
|
+
while (data.length < length)
|
176
|
+
data << @socket.read_nonblock(length - data.length)
|
177
|
+
end
|
178
|
+
rescue IO::WaitReadable
|
179
|
+
select_timeout = (deadline - Time.now) if deadline
|
180
|
+
unless Kernel::select([@socket], nil, [@socket], select_timeout)
|
181
|
+
raise Timeout::Error.new("Took more than #{timeout} seconds to receive data.")
|
182
|
+
end
|
183
|
+
retry
|
184
|
+
end
|
185
|
+
|
186
|
+
data
|
173
187
|
end
|
174
188
|
|
175
189
|
def unix_socket?(sock)
|
@@ -178,12 +192,6 @@ module Mongo
|
|
178
192
|
|
179
193
|
def set_socket_options(sock)
|
180
194
|
sock.set_encoding(BSON::BINARY)
|
181
|
-
|
182
|
-
unless unix_socket?(sock) && BSON::Environment.jruby?
|
183
|
-
encoded_timeout = [ timeout, 0 ].pack(TIMEOUT_PACK)
|
184
|
-
sock.setsockopt(SOL_SOCKET, SO_RCVTIMEO, encoded_timeout)
|
185
|
-
sock.setsockopt(SOL_SOCKET, SO_SNDTIMEO, encoded_timeout)
|
186
|
-
end
|
187
195
|
end
|
188
196
|
|
189
197
|
def handle_errors
|
data/lib/mongo/socket/ssl.rb
CHANGED
@@ -116,22 +116,32 @@ module Mongo
|
|
116
116
|
|
117
117
|
def create_context(options)
|
118
118
|
context = OpenSSL::SSL::SSLContext.new
|
119
|
-
set_cert(context, options)
|
120
|
-
set_key(context, options)
|
119
|
+
set_cert(context, options)
|
120
|
+
set_key(context, options)
|
121
121
|
set_cert_verification(context, options) unless options[:ssl_verify] == false
|
122
122
|
context
|
123
123
|
end
|
124
124
|
|
125
125
|
def set_cert(context, options)
|
126
|
-
|
126
|
+
if options[:ssl_cert]
|
127
|
+
context.cert = OpenSSL::X509::Certificate.new(File.open(options[:ssl_cert]))
|
128
|
+
elsif options[:ssl_cert_string]
|
129
|
+
context.cert = OpenSSL::X509::Certificate.new(options[:ssl_cert_string])
|
130
|
+
elsif options[:ssl_cert_object]
|
131
|
+
context.cert = options[:ssl_cert_object]
|
132
|
+
end
|
127
133
|
end
|
128
134
|
|
129
135
|
def set_key(context, options)
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
136
|
+
passphrase = options[:ssl_key_pass_phrase]
|
137
|
+
if options[:ssl_key]
|
138
|
+
context.key = passphrase ? OpenSSL::PKey.read(File.open(options[:ssl_key]), passphrase) :
|
139
|
+
OpenSSL::PKey.read(File.open(options[:ssl_key]))
|
140
|
+
elsif options[:ssl_key_string]
|
141
|
+
context.key = passphrase ? OpenSSL::PKey.read(options[:ssl_key_string], passphrase) :
|
142
|
+
OpenSSL::PKey.read(options[:ssl_key_string])
|
143
|
+
elsif options[:ssl_key_object]
|
144
|
+
context.key = options[:ssl_key_object]
|
135
145
|
end
|
136
146
|
end
|
137
147
|
|
@@ -139,7 +149,12 @@ module Mongo
|
|
139
149
|
context.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
140
150
|
cert_store = OpenSSL::X509::Store.new
|
141
151
|
if options[:ssl_ca_cert]
|
142
|
-
cert_store.
|
152
|
+
cert_store.add_cert(OpenSSL::X509::Certificate.new(File.open(options[:ssl_ca_cert])))
|
153
|
+
elsif options[:ssl_ca_cert_string]
|
154
|
+
cert_store.add_cert(OpenSSL::X509::Certificate.new(options[:ssl_ca_cert_string]))
|
155
|
+
elsif options[:ssl_ca_cert_object]
|
156
|
+
raise TypeError("Option :ssl_ca_cert_object should be an array of OpenSSL::X509:Certificate objects") unless options[:ssl_ca_cert_object].is_a? Array
|
157
|
+
options[:ssl_ca_cert_object].each {|cert| cert_store.add_cert(cert)}
|
143
158
|
else
|
144
159
|
cert_store.set_default_paths
|
145
160
|
end
|
data/lib/mongo/uri.rb
CHANGED
@@ -193,7 +193,7 @@ module Mongo
|
|
193
193
|
def initialize(string, options = {})
|
194
194
|
@string = string
|
195
195
|
@options = options
|
196
|
-
|
196
|
+
_, scheme, remaining = @string.partition(SCHEME)
|
197
197
|
raise_invalid_error!(INVALID_SCHEME) unless scheme == SCHEME
|
198
198
|
setup!(remaining)
|
199
199
|
end
|
@@ -248,7 +248,7 @@ module Mongo
|
|
248
248
|
end
|
249
249
|
|
250
250
|
def extract_db_opts!(string)
|
251
|
-
db_opts,
|
251
|
+
db_opts, _, creds_hosts = string.reverse.partition(DATABASE_DELIM)
|
252
252
|
db_opts, creds_hosts = creds_hosts, db_opts if creds_hosts.empty?
|
253
253
|
if db_opts.empty? && creds_hosts.include?(URI_OPTS_DELIM)
|
254
254
|
raise_invalid_error!(INVALID_OPTS_DELIM)
|
@@ -264,13 +264,13 @@ module Mongo
|
|
264
264
|
end
|
265
265
|
|
266
266
|
def split_creds_hosts(string)
|
267
|
-
hosts,
|
267
|
+
hosts, _, creds = string.reverse.partition(AUTH_DELIM)
|
268
268
|
hosts, creds = creds, hosts if hosts.empty?
|
269
269
|
[ hosts, creds ].map { |s| s.reverse }
|
270
270
|
end
|
271
271
|
|
272
272
|
def parse_db_opts!(string)
|
273
|
-
auth_db,
|
273
|
+
auth_db, _, uri_opts = string.partition(URI_OPTS_DELIM)
|
274
274
|
@uri_options = Options::Redacted.new(parse_uri_options!(uri_opts))
|
275
275
|
@database = parse_database!(auth_db)
|
276
276
|
end
|
@@ -324,7 +324,7 @@ module Mongo
|
|
324
324
|
validate_port_string!(p)
|
325
325
|
end
|
326
326
|
elsif host.index(HOST_PORT_DELIM)
|
327
|
-
h,
|
327
|
+
h, _, p = host.partition(HOST_PORT_DELIM)
|
328
328
|
raise_invalid_error!(INVALID_HOST) unless h.size > 0
|
329
329
|
validate_port_string!(p)
|
330
330
|
elsif host =~ UNIX_SOCKET
|
@@ -339,7 +339,7 @@ module Mongo
|
|
339
339
|
end
|
340
340
|
|
341
341
|
def decode(value)
|
342
|
-
::URI.
|
342
|
+
::URI::DEFAULT_PARSER.unescape(value)
|
343
343
|
end
|
344
344
|
|
345
345
|
# Hash for storing map of URI option parameters to conversion strategies
|
data/lib/mongo/version.rb
CHANGED
data/mongo.gemspec
CHANGED
@@ -243,6 +243,19 @@ describe Mongo::BulkWrite do
|
|
243
243
|
bulk_write.execute
|
244
244
|
}.to raise_exception(Mongo::Error::UnsupportedCollation)
|
245
245
|
end
|
246
|
+
|
247
|
+
context 'when a String key is used' do
|
248
|
+
|
249
|
+
let(:requests) do
|
250
|
+
[{ delete_one: { filter: { name: 'BANG' }, 'collation' => collation } }]
|
251
|
+
end
|
252
|
+
|
253
|
+
it 'raises an exception' do
|
254
|
+
expect {
|
255
|
+
bulk_write.execute
|
256
|
+
}.to raise_exception(Mongo::Error::UnsupportedCollation)
|
257
|
+
end
|
258
|
+
end
|
246
259
|
end
|
247
260
|
end
|
248
261
|
|
@@ -371,6 +384,20 @@ describe Mongo::BulkWrite do
|
|
371
384
|
bulk_write.execute
|
372
385
|
}.to raise_exception(Mongo::Error::UnsupportedCollation)
|
373
386
|
end
|
387
|
+
|
388
|
+
context 'when a String key is used' do
|
389
|
+
|
390
|
+
let(:requests) do
|
391
|
+
[{ delete_one: { filter: { name: 'BANG' }, 'collation' => collation }},
|
392
|
+
{ delete_one: { filter: { name: 'DOINK' }, 'collation' => collation }}]
|
393
|
+
end
|
394
|
+
|
395
|
+
it 'raises an exception' do
|
396
|
+
expect {
|
397
|
+
bulk_write.execute
|
398
|
+
}.to raise_exception(Mongo::Error::UnsupportedCollation)
|
399
|
+
end
|
400
|
+
end
|
374
401
|
end
|
375
402
|
end
|
376
403
|
|
@@ -473,6 +500,19 @@ describe Mongo::BulkWrite do
|
|
473
500
|
bulk_write.execute
|
474
501
|
}.to raise_exception(Mongo::Error::UnsupportedCollation)
|
475
502
|
end
|
503
|
+
|
504
|
+
context 'when a String key is used' do
|
505
|
+
|
506
|
+
let(:requests) do
|
507
|
+
[{ delete_many: { filter: { name: 'BANG' }, 'collation' => collation }}]
|
508
|
+
end
|
509
|
+
|
510
|
+
it 'raises an exception' do
|
511
|
+
expect {
|
512
|
+
bulk_write.execute
|
513
|
+
}.to raise_exception(Mongo::Error::UnsupportedCollation)
|
514
|
+
end
|
515
|
+
end
|
476
516
|
end
|
477
517
|
end
|
478
518
|
|
@@ -582,6 +622,20 @@ describe Mongo::BulkWrite do
|
|
582
622
|
bulk_write.execute
|
583
623
|
}.to raise_exception(Mongo::Error::UnsupportedCollation)
|
584
624
|
end
|
625
|
+
|
626
|
+
context 'when a String key is used' do
|
627
|
+
|
628
|
+
let(:requests) do
|
629
|
+
[{ delete_many: { filter: { name: 'BANG' }, 'collation' => collation }},
|
630
|
+
{ delete_many: { filter: { name: 'DOINK' }, 'collation' => collation }}]
|
631
|
+
end
|
632
|
+
|
633
|
+
it 'raises an exception' do
|
634
|
+
expect {
|
635
|
+
bulk_write.execute
|
636
|
+
}.to raise_exception(Mongo::Error::UnsupportedCollation)
|
637
|
+
end
|
638
|
+
end
|
585
639
|
end
|
586
640
|
end
|
587
641
|
|
@@ -698,6 +752,21 @@ describe Mongo::BulkWrite do
|
|
698
752
|
bulk_write.execute
|
699
753
|
}.to raise_exception(Mongo::Error::UnsupportedCollation)
|
700
754
|
end
|
755
|
+
|
756
|
+
context 'when a String key is used' do
|
757
|
+
|
758
|
+
let(:requests) do
|
759
|
+
[{ replace_one: { filter: { name: 'BANG' },
|
760
|
+
replacement: { other: 'pong' },
|
761
|
+
'collation' => collation }}]
|
762
|
+
end
|
763
|
+
|
764
|
+
it 'raises an exception' do
|
765
|
+
expect {
|
766
|
+
bulk_write.execute
|
767
|
+
}.to raise_exception(Mongo::Error::UnsupportedCollation)
|
768
|
+
end
|
769
|
+
end
|
701
770
|
end
|
702
771
|
end
|
703
772
|
|
@@ -936,6 +1005,21 @@ describe Mongo::BulkWrite do
|
|
936
1005
|
bulk_write.execute
|
937
1006
|
}.to raise_exception(Mongo::Error::UnsupportedCollation)
|
938
1007
|
end
|
1008
|
+
|
1009
|
+
context 'when a String key is used' do
|
1010
|
+
|
1011
|
+
let(:requests) do
|
1012
|
+
[{ update_one: { filter: { name: 'BANG' },
|
1013
|
+
update: { "$set" => { name: 'pong' }},
|
1014
|
+
'collation' => collation }}]
|
1015
|
+
end
|
1016
|
+
|
1017
|
+
it 'raises an exception' do
|
1018
|
+
expect {
|
1019
|
+
bulk_write.execute
|
1020
|
+
}.to raise_exception(Mongo::Error::UnsupportedCollation)
|
1021
|
+
end
|
1022
|
+
end
|
939
1023
|
end
|
940
1024
|
end
|
941
1025
|
|
@@ -1027,6 +1111,24 @@ describe Mongo::BulkWrite do
|
|
1027
1111
|
bulk_write.execute
|
1028
1112
|
}.to raise_exception(Mongo::Error::UnsupportedCollation)
|
1029
1113
|
end
|
1114
|
+
|
1115
|
+
context 'when a String key is used' do
|
1116
|
+
|
1117
|
+
let(:requests) do
|
1118
|
+
[{ update_one: { filter: { name: 'BANG' },
|
1119
|
+
update: { "$set" => { name: 'pong' }},
|
1120
|
+
'collation' => collation }},
|
1121
|
+
{ update_one: { filter: { name: 'DOINK' },
|
1122
|
+
update: { "$set" => { name: 'pong' }},
|
1123
|
+
'collation' => collation }}]
|
1124
|
+
end
|
1125
|
+
|
1126
|
+
it 'raises an exception' do
|
1127
|
+
expect {
|
1128
|
+
bulk_write.execute
|
1129
|
+
}.to raise_exception(Mongo::Error::UnsupportedCollation)
|
1130
|
+
end
|
1131
|
+
end
|
1030
1132
|
end
|
1031
1133
|
end
|
1032
1134
|
|
@@ -1314,6 +1416,21 @@ describe Mongo::BulkWrite do
|
|
1314
1416
|
bulk_write.execute
|
1315
1417
|
}.to raise_exception(Mongo::Error::UnsupportedCollation)
|
1316
1418
|
end
|
1419
|
+
|
1420
|
+
context 'when a String key is used' do
|
1421
|
+
|
1422
|
+
let(:requests) do
|
1423
|
+
[{ update_many: { filter: { name: 'BANG' },
|
1424
|
+
update: { "$set" => { name: 'pong' }},
|
1425
|
+
'collation' => collation }}]
|
1426
|
+
end
|
1427
|
+
|
1428
|
+
it 'raises an exception' do
|
1429
|
+
expect {
|
1430
|
+
bulk_write.execute
|
1431
|
+
}.to raise_exception(Mongo::Error::UnsupportedCollation)
|
1432
|
+
end
|
1433
|
+
end
|
1317
1434
|
end
|
1318
1435
|
end
|
1319
1436
|
|
@@ -235,6 +235,19 @@ describe Mongo::Collection::View::Aggregation do
|
|
235
235
|
result
|
236
236
|
}.to raise_exception(Mongo::Error::UnsupportedCollation)
|
237
237
|
end
|
238
|
+
|
239
|
+
context 'when a String key is used' do
|
240
|
+
|
241
|
+
let(:options) do
|
242
|
+
{ 'collation' => { locale: 'en_US', strength: 2 } }
|
243
|
+
end
|
244
|
+
|
245
|
+
it 'raises an exception' do
|
246
|
+
expect {
|
247
|
+
result
|
248
|
+
}.to raise_exception(Mongo::Error::UnsupportedCollation)
|
249
|
+
end
|
250
|
+
end
|
238
251
|
end
|
239
252
|
end
|
240
253
|
end
|
@@ -419,6 +432,19 @@ describe Mongo::Collection::View::Aggregation do
|
|
419
432
|
result
|
420
433
|
}.to raise_exception(Mongo::Error::UnsupportedCollation)
|
421
434
|
end
|
435
|
+
|
436
|
+
context 'when a String key is used' do
|
437
|
+
|
438
|
+
let(:options) do
|
439
|
+
{ 'collation' => { locale: 'en_US', strength: 2 } }
|
440
|
+
end
|
441
|
+
|
442
|
+
it 'raises an exception' do
|
443
|
+
expect {
|
444
|
+
result
|
445
|
+
}.to raise_exception(Mongo::Error::UnsupportedCollation)
|
446
|
+
end
|
447
|
+
end
|
422
448
|
end
|
423
449
|
end
|
424
450
|
|