mongoid 4.0.2 → 5.0.0.beta
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
- 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
|