mongoid 5.4.1 → 6.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 +5 -5
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/config/locales/en.yml +23 -16
- data/lib/mongoid.rb +4 -9
- data/lib/mongoid/atomic.rb +1 -1
- data/lib/mongoid/atomic/modifiers.rb +8 -12
- data/lib/mongoid/attributes.rb +9 -11
- data/lib/mongoid/attributes/dynamic.rb +5 -6
- data/lib/mongoid/attributes/nested.rb +1 -1
- data/lib/mongoid/attributes/processing.rb +4 -0
- data/lib/mongoid/attributes/readonly.rb +22 -0
- data/lib/mongoid/cacheable.rb +36 -0
- data/lib/mongoid/changeable.rb +37 -1
- data/lib/mongoid/clients.rb +0 -63
- data/lib/mongoid/clients/factory.rb +0 -2
- data/lib/mongoid/clients/options.rb +54 -249
- data/lib/mongoid/clients/storage_options.rb +1 -69
- data/lib/mongoid/composable.rb +26 -2
- data/lib/mongoid/config.rb +1 -1
- data/lib/mongoid/config/options.rb +1 -1
- data/lib/mongoid/contextual/aggregable/mongo.rb +1 -0
- data/lib/mongoid/contextual/atomic.rb +6 -9
- data/lib/mongoid/contextual/geo_near.rb +2 -3
- data/lib/mongoid/contextual/map_reduce.rb +97 -24
- data/lib/mongoid/contextual/memory.rb +7 -4
- data/lib/mongoid/contextual/mongo.rb +63 -54
- data/lib/mongoid/contextual/none.rb +2 -2
- data/lib/mongoid/copyable.rb +19 -19
- data/lib/mongoid/criteria.rb +5 -4
- data/lib/mongoid/criteria/findable.rb +2 -3
- data/lib/mongoid/criteria/includable.rb +63 -16
- data/lib/mongoid/criteria/marshalable.rb +2 -2
- data/lib/mongoid/criteria/modifiable.rb +17 -1
- data/lib/mongoid/criteria/options.rb +25 -0
- data/lib/mongoid/criteria/queryable.rb +86 -0
- data/lib/mongoid/criteria/queryable/aggregable.rb +120 -0
- data/lib/mongoid/criteria/queryable/extensions.rb +28 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +185 -0
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +37 -0
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +34 -0
- data/lib/mongoid/criteria/queryable/extensions/date.rb +63 -0
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +53 -0
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +200 -0
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +86 -0
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +90 -0
- data/lib/mongoid/criteria/queryable/extensions/object.rb +206 -0
- data/lib/mongoid/criteria/queryable/extensions/range.rb +70 -0
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +45 -0
- data/lib/mongoid/criteria/queryable/extensions/set.rb +34 -0
- data/lib/mongoid/criteria/queryable/extensions/string.rb +137 -0
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +79 -0
- data/lib/mongoid/criteria/queryable/extensions/time.rb +60 -0
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +54 -0
- data/lib/mongoid/criteria/queryable/forwardable.rb +65 -0
- data/lib/mongoid/criteria/queryable/key.rb +103 -0
- data/lib/mongoid/criteria/queryable/macroable.rb +27 -0
- data/lib/mongoid/criteria/queryable/mergeable.rb +271 -0
- data/lib/mongoid/criteria/queryable/optional.rb +411 -0
- data/lib/mongoid/criteria/queryable/options.rb +136 -0
- data/lib/mongoid/criteria/queryable/pipeline.rb +111 -0
- data/lib/mongoid/criteria/queryable/selectable.rb +662 -0
- data/lib/mongoid/criteria/queryable/selector.rb +196 -0
- data/lib/mongoid/criteria/queryable/smash.rb +103 -0
- data/lib/mongoid/document.rb +9 -23
- data/lib/mongoid/errors.rb +2 -1
- data/lib/mongoid/errors/ambiguous_relationship.rb +1 -1
- data/lib/mongoid/errors/delete_restriction.rb +2 -2
- data/lib/mongoid/errors/invalid_field.rb +2 -2
- data/lib/mongoid/errors/invalid_persistence_option.rb +29 -0
- data/lib/mongoid/errors/invalid_relation.rb +66 -0
- data/lib/mongoid/errors/inverse_not_found.rb +1 -1
- data/lib/mongoid/errors/mongoid_error.rb +1 -1
- data/lib/mongoid/evolvable.rb +1 -1
- data/lib/mongoid/extensions.rb +0 -5
- data/lib/mongoid/extensions/big_decimal.rb +17 -8
- data/lib/mongoid/extensions/date.rb +4 -1
- data/lib/mongoid/extensions/hash.rb +2 -3
- data/lib/mongoid/extensions/object.rb +2 -2
- data/lib/mongoid/extensions/string.rb +4 -3
- data/lib/mongoid/extensions/time.rb +5 -2
- data/lib/mongoid/factory.rb +1 -0
- data/lib/mongoid/fields/foreign_key.rb +2 -2
- data/lib/mongoid/fields/localized.rb +3 -8
- data/lib/mongoid/fields/validators/macro.rb +18 -0
- data/lib/mongoid/findable.rb +3 -3
- data/lib/mongoid/indexable.rb +17 -16
- data/lib/mongoid/indexable/specification.rb +1 -1
- data/lib/mongoid/indexable/validators/options.rb +1 -2
- data/lib/mongoid/interceptable.rb +6 -17
- data/lib/mongoid/loggable.rb +1 -1
- data/lib/mongoid/matchable.rb +3 -10
- data/lib/mongoid/matchable/gt.rb +2 -0
- data/lib/mongoid/matchable/gte.rb +2 -0
- data/lib/mongoid/matchable/lt.rb +2 -0
- data/lib/mongoid/matchable/lte.rb +2 -0
- data/lib/mongoid/persistable.rb +6 -5
- data/lib/mongoid/persistable/creatable.rb +2 -0
- data/lib/mongoid/persistable/deletable.rb +7 -3
- data/lib/mongoid/persistable/settable.rb +3 -16
- data/lib/mongoid/persistable/updatable.rb +10 -12
- data/lib/mongoid/persistence_context.rb +216 -0
- data/lib/mongoid/query_cache.rb +5 -30
- data/lib/mongoid/relations/accessors.rb +6 -2
- data/lib/mongoid/relations/auto_save.rb +12 -4
- data/lib/mongoid/relations/bindings/embedded/in.rb +4 -0
- data/lib/mongoid/relations/bindings/embedded/many.rb +8 -1
- data/lib/mongoid/relations/bindings/embedded/one.rb +10 -0
- data/lib/mongoid/relations/bindings/referenced/many.rb +4 -0
- data/lib/mongoid/relations/builders.rb +2 -2
- data/lib/mongoid/relations/builders/embedded/one.rb +1 -1
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +1 -1
- data/lib/mongoid/relations/conversions.rb +1 -1
- data/lib/mongoid/relations/counter_cache.rb +28 -18
- data/lib/mongoid/relations/eager.rb +19 -7
- data/lib/mongoid/relations/eager/base.rb +5 -5
- data/lib/mongoid/relations/embedded/batchable.rb +9 -33
- data/lib/mongoid/relations/embedded/in.rb +16 -2
- data/lib/mongoid/relations/embedded/many.rb +23 -8
- data/lib/mongoid/relations/embedded/one.rb +17 -2
- data/lib/mongoid/relations/macros.rb +9 -2
- data/lib/mongoid/relations/metadata.rb +3 -3
- data/lib/mongoid/relations/nested_builder.rb +1 -1
- data/lib/mongoid/relations/options.rb +2 -2
- data/lib/mongoid/relations/proxy.rb +2 -33
- data/lib/mongoid/relations/referenced/in.rb +23 -11
- data/lib/mongoid/relations/referenced/many.rb +24 -16
- data/lib/mongoid/relations/referenced/many_to_many.rb +20 -13
- data/lib/mongoid/relations/referenced/one.rb +17 -1
- data/lib/mongoid/relations/reflections.rb +3 -5
- data/lib/mongoid/relations/touchable.rb +1 -1
- data/lib/mongoid/reloadable.rb +1 -1
- data/lib/mongoid/scopable.rb +3 -3
- data/lib/mongoid/serializable.rb +2 -3
- data/lib/mongoid/tasks/database.rb +1 -2
- data/lib/mongoid/threaded.rb +4 -4
- data/lib/mongoid/traversable.rb +1 -1
- data/lib/mongoid/validatable.rb +1 -1
- data/lib/mongoid/validatable/macros.rb +2 -4
- data/lib/mongoid/validatable/uniqueness.rb +1 -2
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +4 -7
- data/spec/app/models/album.rb +5 -1
- data/spec/app/models/artist.rb +21 -0
- data/spec/app/models/band.rb +0 -1
- data/spec/app/models/church.rb +0 -2
- data/spec/app/models/ordered_post.rb +5 -0
- data/spec/app/models/oscar.rb +1 -2
- data/spec/app/models/person.rb +3 -1
- data/spec/app/models/post.rb +0 -1
- data/spec/app/models/princess.rb +2 -0
- data/spec/app/models/record.rb +1 -0
- data/spec/app/models/thing.rb +1 -1
- data/spec/config/mongoid.yml +1 -5
- data/spec/mongoid/atomic/modifiers_spec.rb +17 -17
- data/spec/mongoid/atomic_spec.rb +17 -17
- data/spec/mongoid/attributes/nested_spec.rb +14 -14
- data/spec/mongoid/attributes/readonly_spec.rb +87 -44
- data/spec/mongoid/attributes_spec.rb +63 -0
- data/spec/mongoid/cacheable_spec.rb +112 -0
- data/spec/mongoid/changeable_spec.rb +58 -0
- data/spec/mongoid/clients/factory_spec.rb +3 -11
- data/spec/mongoid/clients/options_spec.rb +378 -96
- data/spec/mongoid/clients_spec.rb +207 -170
- data/spec/mongoid/composable_spec.rb +7 -0
- data/spec/mongoid/config_spec.rb +41 -21
- data/spec/mongoid/contextual/atomic_spec.rb +77 -343
- data/spec/mongoid/contextual/map_reduce_spec.rb +119 -111
- data/spec/mongoid/contextual/memory_spec.rb +56 -316
- data/spec/mongoid/contextual/mongo_spec.rb +104 -378
- data/spec/mongoid/copyable_spec.rb +8 -15
- data/spec/mongoid/criteria/modifiable_spec.rb +239 -7
- data/spec/mongoid/criteria/options_spec.rb +29 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +370 -0
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +523 -0
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +59 -0
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +58 -0
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +213 -0
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +330 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +405 -0
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +58 -0
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +65 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +327 -0
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +65 -0
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +77 -0
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +108 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +309 -0
- data/spec/mongoid/{extensions/origin/regexp_raw_spec.rb → criteria/queryable/extensions/regexp_spec.rb} +21 -20
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +39 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +302 -0
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +167 -0
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +376 -0
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +347 -0
- data/spec/mongoid/criteria/queryable/forwardable_spec.rb +87 -0
- data/spec/mongoid/criteria/queryable/key_spec.rb +52 -0
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +49 -0
- data/spec/mongoid/criteria/queryable/optional_spec.rb +1786 -0
- data/spec/mongoid/criteria/queryable/options_spec.rb +360 -0
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +200 -0
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +137 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +4159 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +778 -0
- data/spec/mongoid/criteria/queryable/smash_spec.rb +30 -0
- data/spec/mongoid/criteria_spec.rb +45 -63
- data/spec/mongoid/document_spec.rb +21 -88
- data/spec/mongoid/errors/invalid_relation_spec.rb +37 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +6 -3
- data/spec/mongoid/extensions/big_decimal_spec.rb +320 -18
- data/spec/mongoid/extensions/date_spec.rb +2 -6
- data/spec/mongoid/extensions/date_time_spec.rb +2 -6
- data/spec/mongoid/extensions/float_spec.rb +8 -1
- data/spec/mongoid/extensions/integer_spec.rb +8 -1
- data/spec/mongoid/extensions/object_spec.rb +11 -0
- data/spec/mongoid/extensions/string_spec.rb +21 -0
- data/spec/mongoid/extensions/time_spec.rb +4 -8
- data/spec/mongoid/extensions/time_with_zone_spec.rb +2 -6
- data/spec/mongoid/fields/localized_spec.rb +0 -91
- data/spec/mongoid/findable_spec.rb +46 -1
- data/spec/mongoid/indexable_spec.rb +6 -46
- data/spec/mongoid/interceptable_spec.rb +49 -10
- data/spec/mongoid/matchable/gt_spec.rb +11 -0
- data/spec/mongoid/matchable/gte_spec.rb +10 -0
- data/spec/mongoid/matchable/lt_spec.rb +11 -0
- data/spec/mongoid/matchable/lte_spec.rb +11 -0
- data/spec/mongoid/matchable_spec.rb +1 -51
- data/spec/mongoid/persistable/creatable_spec.rb +2 -2
- data/spec/mongoid/persistable/deletable_spec.rb +1 -1
- data/spec/mongoid/persistable/destroyable_spec.rb +6 -2
- data/spec/mongoid/persistable/savable_spec.rb +30 -30
- data/spec/mongoid/persistable/settable_spec.rb +0 -185
- data/spec/mongoid/persistable/updatable_spec.rb +166 -5
- data/spec/mongoid/persistence_context_spec.rb +654 -0
- data/spec/mongoid/positional_spec.rb +10 -10
- data/spec/mongoid/query_cache_spec.rb +89 -65
- data/spec/mongoid/relations/accessors_spec.rb +1 -1
- data/spec/mongoid/relations/auto_save_spec.rb +39 -6
- data/spec/mongoid/relations/builders_spec.rb +37 -10
- data/spec/mongoid/relations/counter_cache_spec.rb +64 -15
- data/spec/mongoid/relations/cyclic_spec.rb +0 -22
- data/spec/mongoid/relations/embedded/many_spec.rb +9 -41
- data/spec/mongoid/relations/embedded/one_spec.rb +2 -1
- data/spec/mongoid/relations/macros_spec.rb +395 -7
- data/spec/mongoid/relations/proxy_spec.rb +3 -1
- data/spec/mongoid/relations/referenced/in_spec.rb +41 -1
- data/spec/mongoid/relations/referenced/many_spec.rb +6 -29
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +6 -29
- data/spec/mongoid/relations/reflections_spec.rb +9 -9
- data/spec/mongoid/reloadable_spec.rb +51 -0
- data/spec/mongoid/scopable_spec.rb +0 -12
- data/spec/mongoid/serializable_spec.rb +0 -50
- data/spec/mongoid/validatable/presence_spec.rb +1 -1
- data/spec/mongoid/validatable/uniqueness_spec.rb +16 -9
- data/spec/mongoid/validatable_spec.rb +16 -0
- data/spec/spec_helper.rb +10 -10
- metadata +536 -479
- metadata.gz.sig +0 -0
- data/lib/mongoid/clients/thread_options.rb +0 -19
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +0 -20
- data/lib/mongoid/extensions/decimal128.rb +0 -39
- data/lib/mongoid/extensions/origin/regexp_raw.rb +0 -43
- data/lib/mongoid/matchable/regexp.rb +0 -27
- data/spec/app/models/post_genre.rb +0 -6
- data/spec/mongoid/extensions/decimal128_spec.rb +0 -44
- data/spec/mongoid/matchable/regexp_spec.rb +0 -59
@@ -23,7 +23,7 @@ describe Mongoid::Extensions::Integer do
|
|
23
23
|
|
24
24
|
describe ".demongoize" do
|
25
25
|
|
26
|
-
context "when the
|
26
|
+
context "when the value is an integer" do
|
27
27
|
|
28
28
|
it "returns a integer" do
|
29
29
|
expect(Integer.demongoize(number)).to eq(number)
|
@@ -133,4 +133,11 @@ describe Mongoid::Extensions::Integer do
|
|
133
133
|
expect(number.mongoize).to eq(number)
|
134
134
|
end
|
135
135
|
end
|
136
|
+
|
137
|
+
describe "#numeric?" do
|
138
|
+
|
139
|
+
it "returns true" do
|
140
|
+
expect(number.numeric?).to eq(true)
|
141
|
+
end
|
142
|
+
end
|
136
143
|
end
|
@@ -301,6 +301,27 @@ describe Mongoid::Extensions::String do
|
|
301
301
|
expect("blah").to_not be_numeric
|
302
302
|
end
|
303
303
|
end
|
304
|
+
|
305
|
+
context "when the string is NaN" do
|
306
|
+
|
307
|
+
it "returns true" do
|
308
|
+
expect("NaN").to be_numeric
|
309
|
+
end
|
310
|
+
end
|
311
|
+
|
312
|
+
context "when the string is Infinity" do
|
313
|
+
|
314
|
+
it "returns true" do
|
315
|
+
expect("Infinity").to be_numeric
|
316
|
+
end
|
317
|
+
end
|
318
|
+
|
319
|
+
context "when the string is -Infinity" do
|
320
|
+
|
321
|
+
it "returns true" do
|
322
|
+
expect("-Infinity").to be_numeric
|
323
|
+
end
|
324
|
+
end
|
304
325
|
end
|
305
326
|
|
306
327
|
describe "#singularize" do
|
@@ -204,12 +204,8 @@ describe Mongoid::Extensions::Time do
|
|
204
204
|
|
205
205
|
context "when the string is an invalid time" do
|
206
206
|
|
207
|
-
|
208
|
-
Time.
|
209
|
-
end
|
210
|
-
|
211
|
-
it "converts the time to epoch" do
|
212
|
-
expect(Time.mongoize("time")).to eq(epoch)
|
207
|
+
it "converts the time to nil" do
|
208
|
+
expect(Time.mongoize("time")).to eq(nil)
|
213
209
|
end
|
214
210
|
end
|
215
211
|
|
@@ -281,7 +277,7 @@ describe Mongoid::Extensions::Time do
|
|
281
277
|
end
|
282
278
|
|
283
279
|
it "does not alter seconds with fractions" do
|
284
|
-
expect(DateTime.mongoize(
|
280
|
+
expect(DateTime.mongoize(11.11).to_f).to eq(11.11)
|
285
281
|
end
|
286
282
|
|
287
283
|
context "when using the ActiveSupport time zone" do
|
@@ -344,7 +340,7 @@ describe Mongoid::Extensions::Time do
|
|
344
340
|
end
|
345
341
|
|
346
342
|
it "does not alter seconds with fractions" do
|
347
|
-
expect(Time.mongoize(102.
|
343
|
+
expect(Time.mongoize(102.63).to_f).to eq(102.63)
|
348
344
|
end
|
349
345
|
end
|
350
346
|
|
@@ -204,12 +204,8 @@ describe Mongoid::Extensions::TimeWithZone do
|
|
204
204
|
|
205
205
|
context "when the string is an invalid time" do
|
206
206
|
|
207
|
-
|
208
|
-
|
209
|
-
end
|
210
|
-
|
211
|
-
it "returns epoch" do
|
212
|
-
expect(ActiveSupport::TimeWithZone.mongoize("time")).to eq(epoch)
|
207
|
+
it "returns nil" do
|
208
|
+
expect(ActiveSupport::TimeWithZone.mongoize("time")).to eq(nil)
|
213
209
|
end
|
214
210
|
end
|
215
211
|
|
@@ -430,97 +430,6 @@ describe Mongoid::Fields::Localized do
|
|
430
430
|
expect(value).to eq({ "de" => 100 })
|
431
431
|
end
|
432
432
|
end
|
433
|
-
|
434
|
-
context 'when the type is Boolean' do
|
435
|
-
|
436
|
-
before do
|
437
|
-
I18n.enforce_available_locales = false
|
438
|
-
::I18n.locale = :de
|
439
|
-
end
|
440
|
-
|
441
|
-
after do
|
442
|
-
::I18n.locale = :en
|
443
|
-
end
|
444
|
-
|
445
|
-
context "when the value is false" do
|
446
|
-
|
447
|
-
let(:field) do
|
448
|
-
described_class.new(:boolean_value, localize: true, type: Boolean)
|
449
|
-
end
|
450
|
-
|
451
|
-
let(:value) do
|
452
|
-
field.demongoize({ "de" => false })
|
453
|
-
end
|
454
|
-
|
455
|
-
it "returns the boolean value from the set locale" do
|
456
|
-
expect(value).to eq(false)
|
457
|
-
end
|
458
|
-
end
|
459
|
-
|
460
|
-
context "when the value is true" do
|
461
|
-
|
462
|
-
let(:field) do
|
463
|
-
described_class.new(:boolean_value, localize: true, type: Boolean)
|
464
|
-
end
|
465
|
-
|
466
|
-
let(:value) do
|
467
|
-
field.demongoize({"de" => true})
|
468
|
-
end
|
469
|
-
|
470
|
-
it "returns the boolean value from the set locale" do
|
471
|
-
expect(value).to eq(true)
|
472
|
-
end
|
473
|
-
end
|
474
|
-
|
475
|
-
context "when fallbacks are defined" do
|
476
|
-
|
477
|
-
before(:all) do
|
478
|
-
require "i18n/backend/fallbacks"
|
479
|
-
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
|
480
|
-
end
|
481
|
-
|
482
|
-
context "when the lookup does not need to use fallbacks" do
|
483
|
-
|
484
|
-
context "when the value is false" do
|
485
|
-
|
486
|
-
before do
|
487
|
-
::I18n.fallbacks[:de] = [:en, :es]
|
488
|
-
end
|
489
|
-
|
490
|
-
let(:field) do
|
491
|
-
described_class.new(:boolean_value, localize: true, type: Boolean)
|
492
|
-
end
|
493
|
-
|
494
|
-
let(:value) do
|
495
|
-
field.demongoize({"de" => false})
|
496
|
-
end
|
497
|
-
|
498
|
-
it "returns the boolean value from the set locale" do
|
499
|
-
expect(value).to eq(false)
|
500
|
-
end
|
501
|
-
end
|
502
|
-
|
503
|
-
context "when the value is true" do
|
504
|
-
|
505
|
-
before do
|
506
|
-
::I18n.fallbacks[:de] = [:en, :es]
|
507
|
-
end
|
508
|
-
|
509
|
-
let(:field) do
|
510
|
-
described_class.new(:boolean_value, localize: true, type: Boolean)
|
511
|
-
end
|
512
|
-
|
513
|
-
let(:value) do
|
514
|
-
field.demongoize({"de" => true})
|
515
|
-
end
|
516
|
-
|
517
|
-
it "returns the boolean value from the set locale" do
|
518
|
-
expect(value).to eq(true)
|
519
|
-
end
|
520
|
-
end
|
521
|
-
end
|
522
|
-
end
|
523
|
-
end
|
524
433
|
end
|
525
434
|
end
|
526
435
|
end
|
@@ -476,7 +476,7 @@ describe Mongoid::Findable do
|
|
476
476
|
end
|
477
477
|
end
|
478
478
|
|
479
|
-
|
479
|
+
Mongoid::Criteria::Queryable::Selectable.forwardables.each do |method|
|
480
480
|
|
481
481
|
describe "##{method}" do
|
482
482
|
|
@@ -485,4 +485,49 @@ describe Mongoid::Findable do
|
|
485
485
|
end
|
486
486
|
end
|
487
487
|
end
|
488
|
+
|
489
|
+
context 'when Mongoid is configured to use activesupport time zone' do
|
490
|
+
|
491
|
+
before do
|
492
|
+
Mongoid.use_utc = false
|
493
|
+
Mongoid.use_activesupport_time_zone = true
|
494
|
+
Time.zone = "Asia/Kolkata"
|
495
|
+
end
|
496
|
+
|
497
|
+
let!(:time) do
|
498
|
+
Time.zone.now.tap do |t|
|
499
|
+
User.create(last_login: t, name: 'Tom')
|
500
|
+
end
|
501
|
+
end
|
502
|
+
|
503
|
+
it 'uses activesupport time zone' do
|
504
|
+
expect(User.distinct(:last_login).first.to_s).to eql(time.in_time_zone('Asia/Kolkata').to_s)
|
505
|
+
end
|
506
|
+
|
507
|
+
it 'loads other fields accurately' do
|
508
|
+
expect(User.distinct(:name)).to match_array(['Tom'])
|
509
|
+
end
|
510
|
+
end
|
511
|
+
|
512
|
+
context 'when Mongoid is not configured to use activesupport time zone' do
|
513
|
+
|
514
|
+
before do
|
515
|
+
Mongoid.use_utc = true
|
516
|
+
Mongoid.use_activesupport_time_zone = false
|
517
|
+
end
|
518
|
+
|
519
|
+
let!(:time) do
|
520
|
+
Time.now.tap do |t|
|
521
|
+
User.create(last_login: t, name: 'Tom')
|
522
|
+
end
|
523
|
+
end
|
524
|
+
|
525
|
+
it 'uses utc' do
|
526
|
+
expect(User.distinct(:last_login).first.to_s).to eql(time.utc.to_s)
|
527
|
+
end
|
528
|
+
|
529
|
+
it 'loads other fields accurately' do
|
530
|
+
expect(User.distinct(:name)).to match_array(['Tom'])
|
531
|
+
end
|
532
|
+
end
|
488
533
|
end
|
@@ -58,7 +58,9 @@ describe Mongoid::Indexable do
|
|
58
58
|
end
|
59
59
|
|
60
60
|
let(:indexes) do
|
61
|
-
klass.with(database: "mongoid_optional")
|
61
|
+
klass.with(database: "mongoid_optional") do |klass|
|
62
|
+
klass.collection.indexes
|
63
|
+
end
|
62
64
|
end
|
63
65
|
|
64
66
|
it "creates the indexes" do
|
@@ -107,39 +109,13 @@ describe Mongoid::Indexable do
|
|
107
109
|
end
|
108
110
|
|
109
111
|
let(:indexes) do
|
110
|
-
klass.with(database: "mongoid_optional")
|
111
|
-
|
112
|
-
|
113
|
-
it "creates the indexes" do
|
114
|
-
expect(indexes.get(_type: 1)).to_not be_nil
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
context "when a collation option is specified", if: collation_supported? do
|
119
|
-
|
120
|
-
let(:klass) do
|
121
|
-
Class.new do
|
122
|
-
include Mongoid::Document
|
123
|
-
store_in collection: "test_db_indexes"
|
124
|
-
index({name: 1}, {collation: {locale: 'en_US', strength: 2}})
|
112
|
+
klass.with(database: "mongoid_optional") do |klass|
|
113
|
+
klass.collection.indexes
|
125
114
|
end
|
126
115
|
end
|
127
116
|
|
128
|
-
before do
|
129
|
-
klass.create_indexes
|
130
|
-
end
|
131
|
-
|
132
|
-
after do
|
133
|
-
klass.remove_indexes
|
134
|
-
end
|
135
|
-
|
136
|
-
let(:indexes) do
|
137
|
-
klass.collection.indexes
|
138
|
-
end
|
139
|
-
|
140
117
|
it "creates the indexes" do
|
141
|
-
expect(indexes.get(
|
142
|
-
expect(indexes.get("name_1")["collation"]["locale"]).to eq('en_US')
|
118
|
+
expect(indexes.get(_type: 1)).to_not be_nil
|
143
119
|
end
|
144
120
|
end
|
145
121
|
end
|
@@ -177,7 +153,6 @@ describe Mongoid::Indexable do
|
|
177
153
|
Class.new do
|
178
154
|
include Mongoid::Document
|
179
155
|
field :a, as: :authentication_token
|
180
|
-
store_in collection: :specs
|
181
156
|
end
|
182
157
|
end
|
183
158
|
|
@@ -286,21 +261,6 @@ describe Mongoid::Indexable do
|
|
286
261
|
end
|
287
262
|
end
|
288
263
|
|
289
|
-
context "when providing a collation option", if: collation_supported? do
|
290
|
-
|
291
|
-
before do
|
292
|
-
klass.index({ name: 1 }, collation: { locale: 'en_US', strength: 2 })
|
293
|
-
end
|
294
|
-
|
295
|
-
let(:options) do
|
296
|
-
klass.index_specification(name: 1).options
|
297
|
-
end
|
298
|
-
|
299
|
-
it "sets the index with a collation option" do
|
300
|
-
expect(options).to eq(collation: { locale: 'en_US', strength: 2 })
|
301
|
-
end
|
302
|
-
end
|
303
|
-
|
304
264
|
context "when providing a compound index" do
|
305
265
|
|
306
266
|
before do
|
@@ -280,13 +280,18 @@ describe Mongoid::Interceptable do
|
|
280
280
|
end
|
281
281
|
end
|
282
282
|
|
283
|
-
context "callback
|
283
|
+
context "callback aborts the callback chain" do
|
284
284
|
|
285
285
|
before do
|
286
|
-
|
286
|
+
Artist.before_create(:before_create_fail_stub)
|
287
|
+
expect(artist).to receive(:before_create_fail_stub).once.and_call_original
|
287
288
|
artist.save
|
288
289
|
end
|
289
290
|
|
291
|
+
after do
|
292
|
+
Artist.reset_callbacks(:create)
|
293
|
+
end
|
294
|
+
|
290
295
|
it "does not get saved" do
|
291
296
|
expect(artist.persisted?).to be false
|
292
297
|
end
|
@@ -316,13 +321,18 @@ describe Mongoid::Interceptable do
|
|
316
321
|
end
|
317
322
|
end
|
318
323
|
|
319
|
-
context "when callback
|
324
|
+
context "when callback halts the callback chain" do
|
320
325
|
|
321
326
|
before do
|
322
|
-
|
327
|
+
Artist.before_save(:before_save_fail_stub)
|
328
|
+
end
|
329
|
+
|
330
|
+
after do
|
331
|
+
Artist.reset_callbacks(:save)
|
323
332
|
end
|
324
333
|
|
325
334
|
it "the save returns false" do
|
335
|
+
expect(artist).to receive(:before_save_fail_stub).once.and_call_original
|
326
336
|
expect(artist.save).to be false
|
327
337
|
end
|
328
338
|
end
|
@@ -343,7 +353,7 @@ describe Mongoid::Interceptable do
|
|
343
353
|
context "when the callback returns true" do
|
344
354
|
|
345
355
|
before do
|
346
|
-
expect(artist).to receive(:
|
356
|
+
expect(artist).to receive(:before_update_stub).once.and_return(true)
|
347
357
|
end
|
348
358
|
|
349
359
|
it "the save returns true" do
|
@@ -351,13 +361,18 @@ describe Mongoid::Interceptable do
|
|
351
361
|
end
|
352
362
|
end
|
353
363
|
|
354
|
-
context "when the callback
|
364
|
+
context "when the callback halts the callback chain" do
|
355
365
|
|
356
366
|
before do
|
357
|
-
|
367
|
+
Artist.before_update(:before_update_fail_stub)
|
368
|
+
end
|
369
|
+
|
370
|
+
after do
|
371
|
+
Artist.reset_callbacks(:update)
|
358
372
|
end
|
359
373
|
|
360
374
|
it "the save returns false" do
|
375
|
+
expect(artist).to receive(:before_update_fail_stub).once.and_call_original
|
361
376
|
expect(artist.save).to be false
|
362
377
|
end
|
363
378
|
end
|
@@ -389,13 +404,18 @@ describe Mongoid::Interceptable do
|
|
389
404
|
end
|
390
405
|
end
|
391
406
|
|
392
|
-
context "when the callback
|
407
|
+
context "when the callback halts the callback chain" do
|
393
408
|
|
394
409
|
before do
|
395
|
-
|
410
|
+
Artist.before_destroy(:before_destroy_fail_stub)
|
411
|
+
end
|
412
|
+
|
413
|
+
after do
|
414
|
+
Artist.reset_callbacks(:destroy)
|
396
415
|
end
|
397
416
|
|
398
417
|
it "the destroy returns false" do
|
418
|
+
expect(artist).to receive(:before_destroy_fail_stub).once.and_call_original
|
399
419
|
expect(artist.destroy).to be false
|
400
420
|
end
|
401
421
|
end
|
@@ -1434,6 +1454,25 @@ describe Mongoid::Interceptable do
|
|
1434
1454
|
end
|
1435
1455
|
end
|
1436
1456
|
|
1457
|
+
describe '#after_destroy' do
|
1458
|
+
|
1459
|
+
context 'when the parent is updated in a child after_destroy callback' do
|
1460
|
+
|
1461
|
+
let!(:person) do
|
1462
|
+
Person.create!(ordered_posts: [OrderedPost.new])
|
1463
|
+
end
|
1464
|
+
|
1465
|
+
before do
|
1466
|
+
post = OrderedPost.first
|
1467
|
+
post.destroy
|
1468
|
+
end
|
1469
|
+
|
1470
|
+
it 'updates the parent' do
|
1471
|
+
expect(person.reload.title).to eq('Minus one ordered post.')
|
1472
|
+
end
|
1473
|
+
end
|
1474
|
+
end
|
1475
|
+
|
1437
1476
|
describe "#before_validation" do
|
1438
1477
|
|
1439
1478
|
context "when the child is new" do
|
@@ -1544,7 +1583,7 @@ describe Mongoid::Interceptable do
|
|
1544
1583
|
|
1545
1584
|
before(:all) do
|
1546
1585
|
Person.before_save do |doc|
|
1547
|
-
doc.mode
|
1586
|
+
throw(:abort) if doc.mode == :prevent_save
|
1548
1587
|
end
|
1549
1588
|
end
|
1550
1589
|
|