mongoid 4.0.2 → 5.0.0.beta
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +66 -1
- data/README.md +14 -13
- data/lib/config/locales/en.yml +28 -28
- data/lib/mongoid.rb +28 -21
- data/lib/mongoid/atomic.rb +2 -4
- data/lib/mongoid/attributes.rb +7 -7
- data/lib/mongoid/attributes/processing.rb +4 -1
- data/lib/mongoid/attributes/readonly.rb +2 -2
- data/lib/mongoid/changeable.rb +4 -6
- data/lib/mongoid/clients.rb +142 -0
- data/lib/mongoid/clients/factory.rb +78 -0
- data/lib/mongoid/{sessions → clients}/options.rb +30 -19
- data/lib/mongoid/{sessions → clients}/storage_options.rb +27 -13
- data/lib/mongoid/{sessions → clients}/thread_options.rb +6 -3
- data/lib/mongoid/clients/validators.rb +2 -0
- data/lib/mongoid/{sessions → clients}/validators/storage.rb +5 -2
- data/lib/mongoid/composable.rb +3 -3
- data/lib/mongoid/config.rb +39 -41
- data/lib/mongoid/config/environment.rb +1 -1
- data/lib/mongoid/config/validators.rb +1 -1
- data/lib/mongoid/config/validators/{session.rb → client.rb} +31 -28
- data/lib/mongoid/contextual/aggregable/mongo.rb +1 -1
- data/lib/mongoid/contextual/atomic.rb +11 -11
- data/lib/mongoid/contextual/command.rb +9 -6
- data/lib/mongoid/contextual/geo_near.rb +17 -1
- data/lib/mongoid/contextual/map_reduce.rb +12 -11
- data/lib/mongoid/contextual/memory.rb +2 -5
- data/lib/mongoid/contextual/mongo.rb +92 -82
- data/lib/mongoid/contextual/none.rb +13 -0
- data/lib/mongoid/copyable.rb +6 -1
- data/lib/mongoid/criteria.rb +36 -3
- data/lib/mongoid/document.rb +3 -4
- data/lib/mongoid/errors.rb +6 -6
- data/lib/mongoid/errors/{mixed_session_configuration.rb → mixed_client_configuration.rb} +5 -5
- data/lib/mongoid/errors/no_client_config.rb +22 -0
- data/lib/mongoid/errors/{no_session_database.rb → no_client_database.rb} +4 -4
- data/lib/mongoid/errors/{no_session_hosts.rb → no_client_hosts.rb} +4 -4
- data/lib/mongoid/errors/{no_sessions_config.rb → no_clients_config.rb} +4 -4
- data/lib/mongoid/errors/no_default_client.rb +23 -0
- data/lib/mongoid/extensions/hash.rb +5 -1
- data/lib/mongoid/extensions/object.rb +3 -2
- data/lib/mongoid/extensions/set.rb +5 -5
- data/lib/mongoid/factory.rb +4 -2
- data/lib/mongoid/fields.rb +7 -2
- data/lib/mongoid/findable.rb +4 -1
- data/lib/mongoid/indexable.rb +15 -9
- data/lib/mongoid/persistable.rb +1 -2
- data/lib/mongoid/persistable/creatable.rb +2 -2
- data/lib/mongoid/persistable/deletable.rb +3 -3
- data/lib/mongoid/persistable/incrementable.rb +1 -1
- data/lib/mongoid/persistable/logical.rb +1 -1
- data/lib/mongoid/persistable/poppable.rb +1 -1
- data/lib/mongoid/persistable/pullable.rb +2 -2
- data/lib/mongoid/persistable/pushable.rb +2 -2
- data/lib/mongoid/persistable/renamable.rb +1 -1
- data/lib/mongoid/persistable/settable.rb +1 -1
- data/lib/mongoid/persistable/unsettable.rb +1 -1
- data/lib/mongoid/persistable/updatable.rb +2 -2
- data/lib/mongoid/persistable/upsertable.rb +1 -1
- data/lib/mongoid/query_cache.rb +98 -104
- data/lib/mongoid/railtie.rb +1 -21
- data/lib/mongoid/railties/database.rake +1 -1
- data/lib/mongoid/relations/builders.rb +3 -1
- data/lib/mongoid/relations/counter_cache.rb +1 -1
- data/lib/mongoid/relations/embedded/batchable.rb +3 -10
- data/lib/mongoid/relations/embedded/many.rb +4 -2
- data/lib/mongoid/relations/many.rb +1 -0
- data/lib/mongoid/relations/proxy.rb +6 -6
- data/lib/mongoid/relations/referenced/many.rb +2 -1
- data/lib/mongoid/relations/targets/enumerable.rb +11 -11
- data/lib/mongoid/relations/touchable.rb +1 -1
- data/lib/mongoid/reloadable.rb +2 -2
- data/lib/mongoid/scopable.rb +6 -17
- data/lib/mongoid/selectable.rb +1 -36
- data/lib/mongoid/serializable.rb +2 -2
- data/lib/mongoid/stateful.rb +0 -1
- data/lib/mongoid/tasks/database.rake +2 -2
- data/lib/mongoid/tasks/database.rb +23 -16
- data/lib/mongoid/threaded.rb +54 -33
- data/lib/mongoid/threaded/lifecycle.rb +21 -16
- data/lib/mongoid/traversable.rb +16 -1
- data/lib/mongoid/validatable.rb +1 -1
- data/lib/mongoid/validatable/queryable.rb +1 -1
- data/lib/mongoid/validatable/uniqueness.rb +3 -20
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +91 -57
- data/lib/rails/mongoid.rb +2 -2
- data/spec/app/models/audio.rb +1 -1
- data/spec/app/models/band.rb +1 -0
- data/spec/app/models/company.rb +5 -0
- data/spec/app/models/label.rb +7 -0
- data/spec/app/models/pub.rb +6 -0
- data/spec/app/models/staff.rb +7 -0
- data/spec/app/models/store_as_dup_test1.rb +5 -0
- data/spec/app/models/store_as_dup_test2.rb +5 -0
- data/spec/config/mongoid.yml +7 -25
- data/spec/mongoid/atomic/paths_spec.rb +3 -11
- data/spec/mongoid/attributes/nested_spec.rb +16 -16
- data/spec/mongoid/attributes/readonly_spec.rb +80 -18
- data/spec/mongoid/attributes_spec.rb +3 -3
- data/spec/mongoid/changeable_spec.rb +70 -0
- data/spec/mongoid/clients/factory_spec.rb +284 -0
- data/spec/mongoid/{sessions → clients}/options_spec.rb +4 -6
- data/spec/mongoid/clients_spec.rb +739 -0
- data/spec/mongoid/config/environment_spec.rb +14 -11
- data/spec/mongoid/config_spec.rb +33 -48
- data/spec/mongoid/contextual/atomic_spec.rb +1 -17
- data/spec/mongoid/contextual/geo_near_spec.rb +35 -0
- data/spec/mongoid/contextual/mongo_spec.rb +26 -83
- data/spec/mongoid/contextual/none_spec.rb +15 -0
- data/spec/mongoid/copyable_spec.rb +35 -1
- data/spec/mongoid/criteria/findable_spec.rb +197 -0
- data/spec/mongoid/criteria/modifiable_spec.rb +7 -29
- data/spec/mongoid/criteria_spec.rb +74 -91
- data/spec/mongoid/document_spec.rb +1 -1
- data/spec/mongoid/errors/{mixed_session_configuration_spec.rb → mixed_client_configuration_spec.rb} +1 -1
- data/spec/mongoid/errors/{no_session_config_spec.rb → no_client_config_spec.rb} +4 -4
- data/spec/mongoid/errors/{no_session_database_spec.rb → no_client_database_spec.rb} +4 -4
- data/spec/mongoid/errors/{no_session_hosts_spec.rb → no_client_hosts_spec.rb} +3 -3
- data/spec/mongoid/errors/{no_sessions_config_spec.rb → no_clients_config_spec.rb} +2 -2
- data/spec/mongoid/fields/localized_spec.rb +1 -0
- data/spec/mongoid/fields_spec.rb +1 -0
- data/spec/mongoid/findable_spec.rb +2 -23
- data/spec/mongoid/indexable_spec.rb +12 -8
- data/spec/mongoid/interceptable_spec.rb +15 -0
- data/spec/mongoid/persistable/settable_spec.rb +16 -0
- data/spec/mongoid/persistable/updatable_spec.rb +3 -2
- data/spec/mongoid/persistable_spec.rb +4 -4
- data/spec/mongoid/query_cache_spec.rb +13 -8
- data/spec/mongoid/relations/auto_save_spec.rb +1 -1
- data/spec/mongoid/relations/counter_cache_spec.rb +34 -0
- data/spec/mongoid/relations/eager/belongs_to_spec.rb +9 -0
- data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +3 -3
- data/spec/mongoid/relations/embedded/many_spec.rb +123 -1
- data/spec/mongoid/relations/embedded/one_spec.rb +3 -3
- data/spec/mongoid/relations/proxy_spec.rb +28 -0
- data/spec/mongoid/relations/referenced/in_spec.rb +1 -1
- data/spec/mongoid/relations/referenced/many_spec.rb +47 -23
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +1 -1
- data/spec/mongoid/relations/referenced/one_spec.rb +1 -1
- data/spec/mongoid/relations/targets/enumerable_spec.rb +9 -2
- data/spec/mongoid/reloadable_spec.rb +6 -6
- data/spec/mongoid/scopable_spec.rb +41 -28
- data/spec/mongoid/selectable_spec.rb +6 -16
- data/spec/mongoid/tasks/database_rake_spec.rb +13 -13
- data/spec/mongoid/tasks/database_spec.rb +2 -2
- data/spec/mongoid/threaded_spec.rb +0 -7
- data/spec/mongoid/traversable_spec.rb +2 -2
- data/spec/mongoid/validatable/uniqueness_spec.rb +30 -1
- data/spec/mongoid_spec.rb +13 -15
- data/spec/rails/mongoid_spec.rb +13 -4
- data/spec/spec_helper.rb +44 -27
- data/spec/support/authorization.rb +12 -0
- data/spec/support/expectations.rb +14 -0
- metadata +52 -59
- data/lib/mongoid/contextual/find_and_modify.rb +0 -69
- data/lib/mongoid/contextual/text_search.rb +0 -178
- data/lib/mongoid/criteria/#findable.rb# +0 -141
- data/lib/mongoid/errors/no_default_session.rb +0 -23
- data/lib/mongoid/errors/no_session_config.rb +0 -22
- data/lib/mongoid/log_subscriber.rb +0 -55
- data/lib/mongoid/positional.rb +0 -71
- data/lib/mongoid/sessions.rb +0 -125
- data/lib/mongoid/sessions/factory.rb +0 -131
- data/lib/mongoid/sessions/mongo_uri.rb +0 -93
- data/lib/mongoid/sessions/validators.rb +0 -2
- data/lib/mongoid/support/query_counter.rb +0 -23
- data/spec/helpers.rb +0 -18
- data/spec/mongoid/#atomic_spec.rb# +0 -365
- data/spec/mongoid/contextual/find_and_modify_spec.rb +0 -220
- data/spec/mongoid/contextual/text_search_spec.rb +0 -209
- data/spec/mongoid/log_subscriber_spec.rb +0 -75
- data/spec/mongoid/positional_spec.rb +0 -222
- data/spec/mongoid/sessions/factory_spec.rb +0 -333
- data/spec/mongoid/sessions/mongo_uri_spec.rb +0 -103
- data/spec/mongoid/sessions_spec.rb +0 -1252
@@ -65,6 +65,21 @@ describe Mongoid::Contextual::None do
|
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
|
+
describe "#pluck" do
|
69
|
+
|
70
|
+
let!(:band) do
|
71
|
+
Band.create(name: "Depeche Mode")
|
72
|
+
end
|
73
|
+
|
74
|
+
let(:context) do
|
75
|
+
described_class.new(Band.where(name: "Depeche Mode"))
|
76
|
+
end
|
77
|
+
|
78
|
+
it "returns an empty array" do
|
79
|
+
expect(context.pluck(:id)).to eq([])
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
68
83
|
describe "#first" do
|
69
84
|
|
70
85
|
let!(:band) do
|
@@ -42,7 +42,7 @@ describe Mongoid::Copyable do
|
|
42
42
|
end
|
43
43
|
|
44
44
|
before do
|
45
|
-
Band.collection.find(_id: band.id).
|
45
|
+
Band.collection.find(_id: band.id).update_one("$set" => { "id" => 1234 })
|
46
46
|
end
|
47
47
|
|
48
48
|
let!(:cloned) do
|
@@ -54,9 +54,43 @@ describe Mongoid::Copyable do
|
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
|
+
context "when a document has old renamed fields" do
|
58
|
+
|
59
|
+
let!(:actor) do
|
60
|
+
Actor.create(name: "test")
|
61
|
+
end
|
62
|
+
|
63
|
+
before do
|
64
|
+
Actor.collection.find(_id: actor.id).update_one("$set" => { "this_is_not_a_field" => 1 })
|
65
|
+
end
|
66
|
+
|
67
|
+
let(:cloned) do
|
68
|
+
actor.reload.send(method)
|
69
|
+
end
|
70
|
+
|
71
|
+
it "copies the document without error" do
|
72
|
+
expect(cloned.this_is_not_a_field).to eq(1)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
context "when using store_as" do
|
77
|
+
|
78
|
+
context "and dynamic attributes are not set" do
|
79
|
+
|
80
|
+
it "clones" do
|
81
|
+
t = StoreAsDupTest1.new(:name => "hi")
|
82
|
+
t.build_store_as_dup_test2(:name => "there")
|
83
|
+
t.save
|
84
|
+
copy = t.send(method)
|
85
|
+
expect(copy.store_as_dup_test2.name).to eq(t.store_as_dup_test2.name)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
57
90
|
context "when cloning a document with multiple languages field" do
|
58
91
|
|
59
92
|
before do
|
93
|
+
I18n.enforce_available_locales = false
|
60
94
|
I18n.locale = 'pt_BR'
|
61
95
|
person.desc = "descrição"
|
62
96
|
person.save
|
@@ -239,6 +239,203 @@ describe Mongoid::Criteria::Findable do
|
|
239
239
|
end
|
240
240
|
end
|
241
241
|
end
|
242
|
+
|
243
|
+
context "when providing a single id as extended json" do
|
244
|
+
|
245
|
+
context "when the id matches" do
|
246
|
+
|
247
|
+
let(:found) do
|
248
|
+
Band.find(band.id.as_json)
|
249
|
+
end
|
250
|
+
|
251
|
+
it "returns the matching document" do
|
252
|
+
expect(found).to eq(band)
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
context "when the id does not match" do
|
257
|
+
|
258
|
+
context "when raising a not found error" do
|
259
|
+
|
260
|
+
before do
|
261
|
+
Mongoid.raise_not_found_error = true
|
262
|
+
end
|
263
|
+
|
264
|
+
let(:found) do
|
265
|
+
Band.find(BSON::ObjectId.new.as_json)
|
266
|
+
end
|
267
|
+
|
268
|
+
it "raises an error" do
|
269
|
+
expect {
|
270
|
+
found
|
271
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
272
|
+
end
|
273
|
+
end
|
274
|
+
|
275
|
+
context "when raising no error" do
|
276
|
+
|
277
|
+
before do
|
278
|
+
Mongoid.raise_not_found_error = false
|
279
|
+
end
|
280
|
+
|
281
|
+
after do
|
282
|
+
Mongoid.raise_not_found_error = true
|
283
|
+
end
|
284
|
+
|
285
|
+
let(:found) do
|
286
|
+
Band.find(BSON::ObjectId.new.as_json)
|
287
|
+
end
|
288
|
+
|
289
|
+
it "returns nil" do
|
290
|
+
expect(found).to be_nil
|
291
|
+
end
|
292
|
+
end
|
293
|
+
end
|
294
|
+
end
|
295
|
+
|
296
|
+
context "when providing a splat of extended json ids" do
|
297
|
+
|
298
|
+
let!(:band_two) do
|
299
|
+
Band.create(name: "Tool")
|
300
|
+
end
|
301
|
+
|
302
|
+
context "when all ids match" do
|
303
|
+
|
304
|
+
let(:found) do
|
305
|
+
Band.find(band.id.as_json, band_two.id.as_json)
|
306
|
+
end
|
307
|
+
|
308
|
+
it "contains the first match" do
|
309
|
+
expect(found).to include(band)
|
310
|
+
end
|
311
|
+
|
312
|
+
it "contains the second match" do
|
313
|
+
expect(found).to include(band_two)
|
314
|
+
end
|
315
|
+
|
316
|
+
context "when ids are duplicates" do
|
317
|
+
|
318
|
+
let(:found) do
|
319
|
+
Band.find(band.id, band.id)
|
320
|
+
end
|
321
|
+
|
322
|
+
it "contains only the first match" do
|
323
|
+
expect(found).to eq([band])
|
324
|
+
end
|
325
|
+
end
|
326
|
+
end
|
327
|
+
|
328
|
+
context "when any id does not match" do
|
329
|
+
|
330
|
+
context "when raising a not found error" do
|
331
|
+
|
332
|
+
before do
|
333
|
+
Mongoid.raise_not_found_error = true
|
334
|
+
end
|
335
|
+
|
336
|
+
let(:found) do
|
337
|
+
Band.find(band.id.as_json, BSON::ObjectId.new.as_json)
|
338
|
+
end
|
339
|
+
|
340
|
+
it "raises an error" do
|
341
|
+
expect {
|
342
|
+
found
|
343
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
344
|
+
end
|
345
|
+
end
|
346
|
+
|
347
|
+
context "when raising no error" do
|
348
|
+
|
349
|
+
before do
|
350
|
+
Mongoid.raise_not_found_error = false
|
351
|
+
end
|
352
|
+
|
353
|
+
after do
|
354
|
+
Mongoid.raise_not_found_error = true
|
355
|
+
end
|
356
|
+
|
357
|
+
let(:found) do
|
358
|
+
Band.find(band.id.as_json, BSON::ObjectId.new.as_json)
|
359
|
+
end
|
360
|
+
|
361
|
+
it "returns only the matching documents" do
|
362
|
+
expect(found).to eq([ band ])
|
363
|
+
end
|
364
|
+
end
|
365
|
+
end
|
366
|
+
end
|
367
|
+
|
368
|
+
context "when providing an array of extended json ids" do
|
369
|
+
|
370
|
+
let!(:band_two) do
|
371
|
+
Band.create(name: "Tool")
|
372
|
+
end
|
373
|
+
|
374
|
+
context "when all ids match" do
|
375
|
+
|
376
|
+
let(:found) do
|
377
|
+
Band.find([ band.id.as_json, band_two.id.as_json ])
|
378
|
+
end
|
379
|
+
|
380
|
+
it "contains the first match" do
|
381
|
+
expect(found).to include(band)
|
382
|
+
end
|
383
|
+
|
384
|
+
it "contains the second match" do
|
385
|
+
expect(found).to include(band_two)
|
386
|
+
end
|
387
|
+
|
388
|
+
context "when ids are duplicates" do
|
389
|
+
|
390
|
+
let(:found) do
|
391
|
+
Band.find([ band.id, band.id ])
|
392
|
+
end
|
393
|
+
|
394
|
+
it "contains only the first match" do
|
395
|
+
expect(found).to eq([band])
|
396
|
+
end
|
397
|
+
end
|
398
|
+
end
|
399
|
+
|
400
|
+
context "when any id does not match" do
|
401
|
+
|
402
|
+
context "when raising a not found error" do
|
403
|
+
|
404
|
+
before do
|
405
|
+
Mongoid.raise_not_found_error = true
|
406
|
+
end
|
407
|
+
|
408
|
+
let(:found) do
|
409
|
+
Band.find([ band.id.as_json, BSON::ObjectId.new.as_json ])
|
410
|
+
end
|
411
|
+
|
412
|
+
it "raises an error" do
|
413
|
+
expect {
|
414
|
+
found
|
415
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
416
|
+
end
|
417
|
+
end
|
418
|
+
|
419
|
+
context "when raising no error" do
|
420
|
+
|
421
|
+
before do
|
422
|
+
Mongoid.raise_not_found_error = false
|
423
|
+
end
|
424
|
+
|
425
|
+
after do
|
426
|
+
Mongoid.raise_not_found_error = true
|
427
|
+
end
|
428
|
+
|
429
|
+
let(:found) do
|
430
|
+
Band.find([ band.id.as_json, BSON::ObjectId.new.as_json ])
|
431
|
+
end
|
432
|
+
|
433
|
+
it "returns only the matching documents" do
|
434
|
+
expect(found).to eq([ band ])
|
435
|
+
end
|
436
|
+
end
|
437
|
+
end
|
438
|
+
end
|
242
439
|
end
|
243
440
|
|
244
441
|
context "when using string ids" do
|
@@ -954,7 +954,7 @@ describe Mongoid::Criteria::Modifiable do
|
|
954
954
|
end
|
955
955
|
|
956
956
|
it "does not update the last document" do
|
957
|
-
expect(from_db.posts.
|
957
|
+
expect(from_db.posts[1].title).to eq("Second")
|
958
958
|
end
|
959
959
|
end
|
960
960
|
|
@@ -999,11 +999,11 @@ describe Mongoid::Criteria::Modifiable do
|
|
999
999
|
end
|
1000
1000
|
|
1001
1001
|
it "updates the first document" do
|
1002
|
-
expect(from_db.preferences.
|
1002
|
+
expect(from_db.preferences[0].name).to eq("London")
|
1003
1003
|
end
|
1004
1004
|
|
1005
1005
|
it "does not update the last document" do
|
1006
|
-
expect(from_db.preferences.
|
1006
|
+
expect(from_db.preferences[1].name).to eq("Second")
|
1007
1007
|
end
|
1008
1008
|
end
|
1009
1009
|
|
@@ -1014,11 +1014,11 @@ describe Mongoid::Criteria::Modifiable do
|
|
1014
1014
|
end
|
1015
1015
|
|
1016
1016
|
it "updates the matching documents" do
|
1017
|
-
expect(from_db.preferences.
|
1017
|
+
expect(from_db.preferences[0].name).to eq("Berlin")
|
1018
1018
|
end
|
1019
1019
|
|
1020
1020
|
it "does not update non matching documents" do
|
1021
|
-
expect(from_db.preferences.
|
1021
|
+
expect(from_db.preferences[1].name).to eq("Second")
|
1022
1022
|
end
|
1023
1023
|
end
|
1024
1024
|
end
|
@@ -1217,36 +1217,14 @@ describe Mongoid::Criteria::Modifiable do
|
|
1217
1217
|
end
|
1218
1218
|
|
1219
1219
|
it "updates the matching documents" do
|
1220
|
-
expect(from_db.preferences.
|
1220
|
+
expect(from_db.preferences[0].name).to eq("Berlin")
|
1221
1221
|
end
|
1222
1222
|
|
1223
1223
|
it "does not update non matching documents" do
|
1224
|
-
expect(from_db.preferences.
|
1224
|
+
expect(from_db.preferences[1].name).to eq("Second")
|
1225
1225
|
end
|
1226
1226
|
end
|
1227
1227
|
end
|
1228
1228
|
end
|
1229
|
-
|
1230
|
-
context "when update document structure" do
|
1231
|
-
|
1232
|
-
before do
|
1233
|
-
person = Person.new(username: "user_title", score: 25)
|
1234
|
-
person.save
|
1235
|
-
end
|
1236
|
-
|
1237
|
-
let(:from_db) do
|
1238
|
-
Person.last
|
1239
|
-
end
|
1240
|
-
|
1241
|
-
it "rename document string field" do
|
1242
|
-
Person.where(username: "user_title").update_all("$rename" => { username: "title" })
|
1243
|
-
expect(from_db.title).to eq("user_title")
|
1244
|
-
end
|
1245
|
-
|
1246
|
-
it "rename document integer field" do
|
1247
|
-
Person.where(score: 25).update_all("$rename" => { score: "age" })
|
1248
|
-
expect(from_db.age).to eq( 25 )
|
1249
|
-
end
|
1250
|
-
end
|
1251
1229
|
end
|
1252
1230
|
end
|
@@ -148,6 +148,21 @@ describe Mongoid::Criteria do
|
|
148
148
|
end
|
149
149
|
end
|
150
150
|
|
151
|
+
describe "#read" do
|
152
|
+
|
153
|
+
let(:person) do
|
154
|
+
Person.create
|
155
|
+
end
|
156
|
+
|
157
|
+
let(:criteria) do
|
158
|
+
Person.read(mode: :secondary)
|
159
|
+
end
|
160
|
+
|
161
|
+
it "adds the read option" do
|
162
|
+
expect(criteria.options[:read]).to eq(mode: :secondary)
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
151
166
|
describe "#aggregates" do
|
152
167
|
|
153
168
|
context "when provided a single field" do
|
@@ -362,7 +377,7 @@ describe Mongoid::Criteria do
|
|
362
377
|
end
|
363
378
|
|
364
379
|
it "does not hit the database after first iteration" do
|
365
|
-
expect(criteria.context.
|
380
|
+
expect(criteria.context.view).to receive(:each).never
|
366
381
|
criteria.each do |doc|
|
367
382
|
expect(doc).to eq(person)
|
368
383
|
end
|
@@ -380,7 +395,7 @@ describe Mongoid::Criteria do
|
|
380
395
|
end
|
381
396
|
|
382
397
|
it "does not hit the database after first iteration" do
|
383
|
-
expect(criteria.context.
|
398
|
+
expect(criteria.context.view).to receive(:each).never
|
384
399
|
criteria.each do |doc|
|
385
400
|
expect(doc).to eq(person)
|
386
401
|
end
|
@@ -709,7 +724,7 @@ describe Mongoid::Criteria do
|
|
709
724
|
end
|
710
725
|
|
711
726
|
it "returns the criteria explain path" do
|
712
|
-
expect(criteria.explain
|
727
|
+
expect(criteria.explain).to_not be_empty
|
713
728
|
end
|
714
729
|
end
|
715
730
|
|
@@ -752,12 +767,12 @@ describe Mongoid::Criteria do
|
|
752
767
|
Band.only(:name)
|
753
768
|
end
|
754
769
|
|
755
|
-
it "returns the fields minus type" do
|
756
|
-
expect(criteria.field_list).to eq([ "name" ])
|
770
|
+
it "returns the fields with required _id minus type" do
|
771
|
+
expect(criteria.field_list).to eq([ "_id", "name" ])
|
757
772
|
end
|
758
773
|
end
|
759
774
|
|
760
|
-
describe "#
|
775
|
+
describe "#find_one_and_update" do
|
761
776
|
|
762
777
|
let!(:depeche) do
|
763
778
|
Band.create(name: "Depeche Mode")
|
@@ -778,7 +793,7 @@ describe Mongoid::Criteria do
|
|
778
793
|
end
|
779
794
|
|
780
795
|
let(:result) do
|
781
|
-
criteria.
|
796
|
+
criteria.find_one_and_update({ "$inc" => { likes: 1 }}, return_document: :after)
|
782
797
|
end
|
783
798
|
|
784
799
|
it "returns the first matching document" do
|
@@ -793,7 +808,7 @@ describe Mongoid::Criteria do
|
|
793
808
|
end
|
794
809
|
|
795
810
|
let!(:result) do
|
796
|
-
criteria.
|
811
|
+
criteria.find_one_and_update("$inc" => { likes: 1 })
|
797
812
|
end
|
798
813
|
|
799
814
|
before do
|
@@ -813,7 +828,7 @@ describe Mongoid::Criteria do
|
|
813
828
|
end
|
814
829
|
|
815
830
|
let!(:result) do
|
816
|
-
criteria.
|
831
|
+
criteria.find_one_and_update("$inc" => { likes: 1 })
|
817
832
|
end
|
818
833
|
|
819
834
|
it "returns the first matching document" do
|
@@ -832,7 +847,7 @@ describe Mongoid::Criteria do
|
|
832
847
|
end
|
833
848
|
|
834
849
|
let!(:result) do
|
835
|
-
criteria.
|
850
|
+
criteria.find_one_and_update("$inc" => { likes: 1 })
|
836
851
|
end
|
837
852
|
|
838
853
|
it "returns the first matching document" do
|
@@ -851,7 +866,7 @@ describe Mongoid::Criteria do
|
|
851
866
|
end
|
852
867
|
|
853
868
|
let!(:result) do
|
854
|
-
criteria.
|
869
|
+
criteria.find_one_and_update("$inc" => { likes: 1 })
|
855
870
|
end
|
856
871
|
|
857
872
|
it "returns the first matching document" do
|
@@ -874,7 +889,7 @@ describe Mongoid::Criteria do
|
|
874
889
|
end
|
875
890
|
|
876
891
|
let!(:result) do
|
877
|
-
criteria.
|
892
|
+
criteria.find_one_and_update({ "$inc" => { likes: 1 }}, return_document: :after)
|
878
893
|
end
|
879
894
|
|
880
895
|
it "returns the first matching document" do
|
@@ -893,7 +908,7 @@ describe Mongoid::Criteria do
|
|
893
908
|
end
|
894
909
|
|
895
910
|
let!(:result) do
|
896
|
-
criteria.
|
911
|
+
criteria.find_one_and_delete
|
897
912
|
end
|
898
913
|
|
899
914
|
it "returns the first matching document" do
|
@@ -915,11 +930,18 @@ describe Mongoid::Criteria do
|
|
915
930
|
end
|
916
931
|
|
917
932
|
let(:result) do
|
918
|
-
criteria.
|
933
|
+
criteria.find_one_and_update("$inc" => { likes: 1 })
|
919
934
|
end
|
920
935
|
|
921
|
-
|
922
|
-
|
936
|
+
context "without upsert" do
|
937
|
+
|
938
|
+
let(:result) do
|
939
|
+
criteria.find_one_and_update("$inc" => { likes: 1 })
|
940
|
+
end
|
941
|
+
|
942
|
+
it "returns nil" do
|
943
|
+
expect(result).to be_nil
|
944
|
+
end
|
923
945
|
end
|
924
946
|
end
|
925
947
|
end
|
@@ -1401,13 +1423,6 @@ describe Mongoid::Criteria do
|
|
1401
1423
|
end
|
1402
1424
|
end
|
1403
1425
|
|
1404
|
-
it "does not eager load the last document" do
|
1405
|
-
doc = criteria.last
|
1406
|
-
expect_query(1) do
|
1407
|
-
expect(doc.person).to eq(person_two)
|
1408
|
-
end
|
1409
|
-
end
|
1410
|
-
|
1411
1426
|
it "returns the first document" do
|
1412
1427
|
expect(document).to eq(post_one)
|
1413
1428
|
end
|
@@ -1416,7 +1431,7 @@ describe Mongoid::Criteria do
|
|
1416
1431
|
context "when calling last" do
|
1417
1432
|
|
1418
1433
|
let!(:criteria) do
|
1419
|
-
Post.includes(:person)
|
1434
|
+
Post.asc(:_id).includes(:person)
|
1420
1435
|
end
|
1421
1436
|
|
1422
1437
|
let!(:document) do
|
@@ -2226,17 +2241,6 @@ describe Mongoid::Criteria do
|
|
2226
2241
|
])
|
2227
2242
|
end
|
2228
2243
|
end
|
2229
|
-
|
2230
|
-
context "when timeout options are provided" do
|
2231
|
-
|
2232
|
-
let(:map_reduce) do
|
2233
|
-
Band.limit(2).no_timeout.map_reduce(map, reduce).out(replace: "test_bands")
|
2234
|
-
end
|
2235
|
-
|
2236
|
-
it "sets the timeout option on the query" do
|
2237
|
-
expect(map_reduce.send(:documents).operation.flags).to eq([ :no_cursor_timeout ])
|
2238
|
-
end
|
2239
|
-
end
|
2240
2244
|
end
|
2241
2245
|
|
2242
2246
|
describe "#max" do
|
@@ -2621,6 +2625,19 @@ describe Mongoid::Criteria do
|
|
2621
2625
|
end
|
2622
2626
|
end
|
2623
2627
|
|
2628
|
+
context "when not including id" do
|
2629
|
+
|
2630
|
+
let(:criteria) do
|
2631
|
+
Band.only(:name)
|
2632
|
+
end
|
2633
|
+
|
2634
|
+
it "responds to id anyway" do
|
2635
|
+
expect {
|
2636
|
+
criteria.first.id
|
2637
|
+
}.to_not raise_error
|
2638
|
+
end
|
2639
|
+
end
|
2640
|
+
|
2624
2641
|
context "when passing an array" do
|
2625
2642
|
|
2626
2643
|
let(:criteria) do
|
@@ -2704,7 +2721,7 @@ describe Mongoid::Criteria do
|
|
2704
2721
|
end
|
2705
2722
|
|
2706
2723
|
it "properly uses the database field name" do
|
2707
|
-
expect(criteria.options).to eq(fields: { "mobile_phones" => 1 })
|
2724
|
+
expect(criteria.options).to eq(fields: { "_id" => 1, "mobile_phones" => 1 })
|
2708
2725
|
end
|
2709
2726
|
end
|
2710
2727
|
end
|
@@ -3042,36 +3059,6 @@ describe Mongoid::Criteria do
|
|
3042
3059
|
end
|
3043
3060
|
end
|
3044
3061
|
|
3045
|
-
describe "#extras with a hint" do
|
3046
|
-
|
3047
|
-
let!(:band) do
|
3048
|
-
Band.create(name: "Depeche Mode")
|
3049
|
-
end
|
3050
|
-
|
3051
|
-
let(:criteria) do
|
3052
|
-
Band.where(name: "Depeche Mode").extras(:hint => {:bad_hint => 1})
|
3053
|
-
end
|
3054
|
-
|
3055
|
-
it "executes the criteria while properly giving the hint to Mongo" do
|
3056
|
-
expect { criteria.to_ary }.to raise_error(Moped::Errors::QueryFailure)
|
3057
|
-
end
|
3058
|
-
end
|
3059
|
-
|
3060
|
-
describe "#hint" do
|
3061
|
-
|
3062
|
-
let!(:band) do
|
3063
|
-
Band.create(name: "Depeche Mode")
|
3064
|
-
end
|
3065
|
-
|
3066
|
-
let(:criteria) do
|
3067
|
-
Band.where(name: "Depeche Mode").hint(bad_hint: 1)
|
3068
|
-
end
|
3069
|
-
|
3070
|
-
it "executes the criteria while properly giving the hint to Mongo" do
|
3071
|
-
expect { criteria.to_ary }.to raise_error(Moped::Errors::QueryFailure)
|
3072
|
-
end
|
3073
|
-
end
|
3074
|
-
|
3075
3062
|
describe "#max_scan" do
|
3076
3063
|
let!(:band) do
|
3077
3064
|
Band.create(name: "Depeche Mode")
|
@@ -3090,31 +3077,6 @@ describe Mongoid::Criteria do
|
|
3090
3077
|
end
|
3091
3078
|
end
|
3092
3079
|
|
3093
|
-
describe "#text_search" do
|
3094
|
-
|
3095
|
-
let(:criteria) do
|
3096
|
-
Word.all
|
3097
|
-
end
|
3098
|
-
|
3099
|
-
before do
|
3100
|
-
Word.with(database: "admin").mongo_session.command(setParameter: 1, textSearchEnabled: true)
|
3101
|
-
Word.create_indexes
|
3102
|
-
Word.create!(name: "phase", origin: "latin")
|
3103
|
-
end
|
3104
|
-
|
3105
|
-
after(:all) do
|
3106
|
-
Word.remove_indexes
|
3107
|
-
end
|
3108
|
-
|
3109
|
-
let(:search) do
|
3110
|
-
criteria.text_search("phase")
|
3111
|
-
end
|
3112
|
-
|
3113
|
-
it "returns all fields" do
|
3114
|
-
expect(search.first.origin).to eq("latin")
|
3115
|
-
end
|
3116
|
-
end
|
3117
|
-
|
3118
3080
|
describe "#to_criteria" do
|
3119
3081
|
|
3120
3082
|
let(:criteria) do
|
@@ -3417,6 +3379,10 @@ describe Mongoid::Criteria do
|
|
3417
3379
|
|
3418
3380
|
describe "#without" do
|
3419
3381
|
|
3382
|
+
let!(:person) do
|
3383
|
+
Person.create!(username: "davinci", age: 50, pets: false)
|
3384
|
+
end
|
3385
|
+
|
3420
3386
|
context "when omitting to embedded documents" do
|
3421
3387
|
|
3422
3388
|
context "when the embedded documents are aliased" do
|
@@ -3430,5 +3396,22 @@ describe Mongoid::Criteria do
|
|
3430
3396
|
end
|
3431
3397
|
end
|
3432
3398
|
end
|
3399
|
+
|
3400
|
+
context "when excluding id" do
|
3401
|
+
|
3402
|
+
let(:criteria) do
|
3403
|
+
Person.without(:_id, :id, "_id", "id")
|
3404
|
+
end
|
3405
|
+
|
3406
|
+
it "does not raise error" do
|
3407
|
+
expect {
|
3408
|
+
criteria.first.id
|
3409
|
+
}.to_not raise_error
|
3410
|
+
end
|
3411
|
+
|
3412
|
+
it "returns id anyway" do
|
3413
|
+
expect(criteria.first.id).to_not be_nil
|
3414
|
+
end
|
3415
|
+
end
|
3433
3416
|
end
|
3434
3417
|
end
|