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
@@ -19,7 +19,9 @@ describe Mongoid::Relations::Proxy do
|
|
19
19
|
|
20
20
|
it 'uses the new persistence options' do
|
21
21
|
expect {
|
22
|
-
animal.with(write: { w: 100 })
|
22
|
+
animal.with(write: { w: 100 }) do |an|
|
23
|
+
an.update_attribute(:name, 'kangaroo')
|
24
|
+
end
|
23
25
|
}.to raise_exception(Mongo::Error::OperationFailure)
|
24
26
|
end
|
25
27
|
end
|
@@ -264,6 +264,44 @@ describe Mongoid::Relations::Referenced::In do
|
|
264
264
|
|
265
265
|
context "when the relation is not polymorphic" do
|
266
266
|
|
267
|
+
context 'when the child has persistence options set' do
|
268
|
+
|
269
|
+
let(:person) do
|
270
|
+
Person.new
|
271
|
+
end
|
272
|
+
|
273
|
+
let(:post) do
|
274
|
+
Post.new
|
275
|
+
end
|
276
|
+
|
277
|
+
before do
|
278
|
+
post.with(collection: 'other-posts') do |p|
|
279
|
+
person.with(collection: 'other-people') do |per|
|
280
|
+
p.person = person
|
281
|
+
per.save
|
282
|
+
p.save
|
283
|
+
end
|
284
|
+
end
|
285
|
+
end
|
286
|
+
|
287
|
+
let(:other_people_count) do
|
288
|
+
Person.with(collection: 'other-people') do |person_class|
|
289
|
+
person_class.count
|
290
|
+
end
|
291
|
+
end
|
292
|
+
|
293
|
+
let(:other_posts_count) do
|
294
|
+
Post.with(collection: 'other-posts') do |post_class|
|
295
|
+
post_class.count
|
296
|
+
end
|
297
|
+
end
|
298
|
+
|
299
|
+
it 'applies the persistence options when saving the child' do
|
300
|
+
expect(other_people_count).to eq(1)
|
301
|
+
expect(other_posts_count).to eq(1)
|
302
|
+
end
|
303
|
+
end
|
304
|
+
|
267
305
|
context "when the child is a new record" do
|
268
306
|
|
269
307
|
let(:person) do
|
@@ -1028,7 +1066,9 @@ describe Mongoid::Relations::Referenced::In do
|
|
1028
1066
|
:index,
|
1029
1067
|
:polymorphic,
|
1030
1068
|
:primary_key,
|
1031
|
-
:touch
|
1069
|
+
:touch,
|
1070
|
+
:optional,
|
1071
|
+
:required
|
1032
1072
|
]
|
1033
1073
|
)
|
1034
1074
|
end
|
@@ -2936,17 +2936,6 @@ describe Mongoid::Relations::Referenced::Many do
|
|
2936
2936
|
end
|
2937
2937
|
end
|
2938
2938
|
|
2939
|
-
context 'when providing a collation', if: collation_supported? do
|
2940
|
-
|
2941
|
-
let(:posts) do
|
2942
|
-
person.posts.where(title: "FIRST").collation(locale: 'en_US', strength: 2)
|
2943
|
-
end
|
2944
|
-
|
2945
|
-
it "applies the collation option to the query" do
|
2946
|
-
expect(posts).to eq([ post_one ])
|
2947
|
-
end
|
2948
|
-
end
|
2949
|
-
|
2950
2939
|
context "when providing a criteria class method" do
|
2951
2940
|
|
2952
2941
|
let(:posts) do
|
@@ -3504,12 +3493,10 @@ describe Mongoid::Relations::Referenced::Many do
|
|
3504
3493
|
|
3505
3494
|
before do
|
3506
3495
|
expect(artist).to receive(:before_add_album).and_raise
|
3496
|
+
begin; artist.albums << album; rescue; end
|
3507
3497
|
end
|
3508
3498
|
|
3509
3499
|
it "does not add the document to the relation" do
|
3510
|
-
expect {
|
3511
|
-
artist.albums << album
|
3512
|
-
}.to raise_error
|
3513
3500
|
expect(artist.albums).to be_empty
|
3514
3501
|
end
|
3515
3502
|
end
|
@@ -3534,12 +3521,10 @@ describe Mongoid::Relations::Referenced::Many do
|
|
3534
3521
|
|
3535
3522
|
before do
|
3536
3523
|
expect(artist).to receive(:after_add_album).and_raise
|
3524
|
+
begin; artist.albums << album; rescue; end
|
3537
3525
|
end
|
3538
3526
|
|
3539
3527
|
it "adds the document to the relation" do
|
3540
|
-
expect {
|
3541
|
-
artist.albums << album
|
3542
|
-
}.to raise_error
|
3543
3528
|
expect(artist.albums).to eq([ album ])
|
3544
3529
|
end
|
3545
3530
|
end
|
@@ -3618,9 +3603,7 @@ describe Mongoid::Relations::Referenced::Many do
|
|
3618
3603
|
describe "#delete" do
|
3619
3604
|
|
3620
3605
|
before do
|
3621
|
-
|
3622
|
-
artist.albums.delete album
|
3623
|
-
}.to raise_error
|
3606
|
+
begin; artist.albums.delete(album); rescue; end
|
3624
3607
|
end
|
3625
3608
|
|
3626
3609
|
it "does not remove the document from the relation" do
|
@@ -3631,9 +3614,7 @@ describe Mongoid::Relations::Referenced::Many do
|
|
3631
3614
|
describe "#clear" do
|
3632
3615
|
|
3633
3616
|
before do
|
3634
|
-
|
3635
|
-
artist.albums.clear
|
3636
|
-
}.to raise_error
|
3617
|
+
begin; artist.albums.clear; rescue; end
|
3637
3618
|
end
|
3638
3619
|
|
3639
3620
|
it "does not clear the relation" do
|
@@ -3693,9 +3674,7 @@ describe Mongoid::Relations::Referenced::Many do
|
|
3693
3674
|
describe "#delete" do
|
3694
3675
|
|
3695
3676
|
before do
|
3696
|
-
|
3697
|
-
artist.albums.delete album
|
3698
|
-
}.to raise_error
|
3677
|
+
begin; artist.albums.delete(album); rescue; end
|
3699
3678
|
end
|
3700
3679
|
|
3701
3680
|
it "removes the documents from the relation" do
|
@@ -3706,9 +3685,7 @@ describe Mongoid::Relations::Referenced::Many do
|
|
3706
3685
|
describe "#clear" do
|
3707
3686
|
|
3708
3687
|
before do
|
3709
|
-
|
3710
|
-
artist.albums.clear
|
3711
|
-
}.to raise_error
|
3688
|
+
begin; artist.albums.clear; rescue; end
|
3712
3689
|
end
|
3713
3690
|
|
3714
3691
|
it "removes the documents from the relation" do
|
@@ -516,12 +516,10 @@ describe Mongoid::Relations::Referenced::ManyToMany do
|
|
516
516
|
|
517
517
|
before do
|
518
518
|
expect(post).to receive(:before_add_tag).and_raise
|
519
|
+
begin; post.tags.send(method, tag); rescue; end;
|
519
520
|
end
|
520
521
|
|
521
522
|
it "does not add the document to the relation" do
|
522
|
-
expect {
|
523
|
-
post.tags.send(method, tag)
|
524
|
-
}.to raise_error
|
525
523
|
expect(post.tags).to be_empty
|
526
524
|
end
|
527
525
|
end
|
@@ -538,12 +536,10 @@ describe Mongoid::Relations::Referenced::ManyToMany do
|
|
538
536
|
|
539
537
|
before do
|
540
538
|
expect(post).to receive(:after_add_tag).and_raise
|
539
|
+
begin; post.tags.send(method, tag); rescue; end
|
541
540
|
end
|
542
541
|
|
543
542
|
it "adds the document to the relation" do
|
544
|
-
expect {
|
545
|
-
post.tags.send(method, tag)
|
546
|
-
}.to raise_error
|
547
543
|
expect(post.tags).to eq([ tag ])
|
548
544
|
end
|
549
545
|
end
|
@@ -1186,12 +1182,10 @@ describe Mongoid::Relations::Referenced::ManyToMany do
|
|
1186
1182
|
|
1187
1183
|
before do
|
1188
1184
|
expect(post).to receive(:before_remove_tag).and_raise
|
1185
|
+
begin; post.tags.clear; rescue; end
|
1189
1186
|
end
|
1190
1187
|
|
1191
1188
|
it "does not remove the document from the relation" do
|
1192
|
-
expect {
|
1193
|
-
post.tags.clear
|
1194
|
-
}.to raise_error
|
1195
1189
|
expect(post.tags).to eq([ tag ])
|
1196
1190
|
end
|
1197
1191
|
end
|
@@ -1218,12 +1212,10 @@ describe Mongoid::Relations::Referenced::ManyToMany do
|
|
1218
1212
|
|
1219
1213
|
before do
|
1220
1214
|
expect(post).to receive(:after_remove_tag).and_raise
|
1215
|
+
begin; post.tags.clear; rescue; end
|
1221
1216
|
end
|
1222
1217
|
|
1223
1218
|
it "removes the document from the relation" do
|
1224
|
-
expect {
|
1225
|
-
post.tags.clear
|
1226
|
-
}.to raise_error
|
1227
1219
|
expect(post.tags).to be_empty
|
1228
1220
|
end
|
1229
1221
|
end
|
@@ -2120,12 +2112,10 @@ describe Mongoid::Relations::Referenced::ManyToMany do
|
|
2120
2112
|
|
2121
2113
|
before do
|
2122
2114
|
expect(post).to receive(:before_remove_tag).and_raise
|
2115
|
+
begin; post.tags.delete(tag); rescue; end
|
2123
2116
|
end
|
2124
2117
|
|
2125
2118
|
it "does not remove the document from the relation" do
|
2126
|
-
expect {
|
2127
|
-
post.tags.delete tag
|
2128
|
-
}.to raise_error
|
2129
2119
|
expect(post.tags).to eq([ tag ])
|
2130
2120
|
end
|
2131
2121
|
end
|
@@ -2152,12 +2142,10 @@ describe Mongoid::Relations::Referenced::ManyToMany do
|
|
2152
2142
|
|
2153
2143
|
before do
|
2154
2144
|
expect(post).to receive(:after_remove_tag).and_raise
|
2145
|
+
begin; post.tags.delete(tag); rescue; end
|
2155
2146
|
end
|
2156
2147
|
|
2157
2148
|
it "removes the document from the relation" do
|
2158
|
-
expect {
|
2159
|
-
post.tags.delete(tag)
|
2160
|
-
}.to raise_error
|
2161
2149
|
expect(post.tags).to be_empty
|
2162
2150
|
end
|
2163
2151
|
end
|
@@ -2654,17 +2642,6 @@ describe Mongoid::Relations::Referenced::ManyToMany do
|
|
2654
2642
|
end
|
2655
2643
|
end
|
2656
2644
|
|
2657
|
-
context 'when providing a collation', if: collation_supported? do
|
2658
|
-
|
2659
|
-
let(:preferences) do
|
2660
|
-
person.preferences.where(name: "FIRST").collation(locale: 'en_US', strength: 2).to_a
|
2661
|
-
end
|
2662
|
-
|
2663
|
-
it "applies the collation option to the query" do
|
2664
|
-
expect(preferences).to eq([ preference_one ])
|
2665
|
-
end
|
2666
|
-
end
|
2667
|
-
|
2668
2645
|
context "when providing a criteria on id" do
|
2669
2646
|
|
2670
2647
|
let(:preferences) do
|
@@ -74,23 +74,23 @@ describe Mongoid::Relations::Reflections do
|
|
74
74
|
expect(relations.size).to eq(1)
|
75
75
|
end
|
76
76
|
end
|
77
|
+
end
|
77
78
|
|
78
|
-
|
79
|
+
context "when no relations exist for the macros" do
|
79
80
|
|
80
|
-
|
81
|
-
|
82
|
-
|
81
|
+
let(:relations) do
|
82
|
+
klass.reflect_on_all_associations(:embeds_one)
|
83
|
+
end
|
83
84
|
|
84
|
-
|
85
|
-
|
86
|
-
end
|
85
|
+
it "returns an empty array" do
|
86
|
+
expect(relations).to be_empty
|
87
87
|
end
|
88
88
|
end
|
89
89
|
|
90
|
-
context "when no
|
90
|
+
context "when no argument supplied" do
|
91
91
|
|
92
92
|
let(:relations) do
|
93
|
-
klass.reflect_on_all_associations
|
93
|
+
klass.reflect_on_all_associations
|
94
94
|
end
|
95
95
|
|
96
96
|
it "returns an empty array" do
|
@@ -4,6 +4,25 @@ describe Mongoid::Reloadable do
|
|
4
4
|
|
5
5
|
describe "#reload" do
|
6
6
|
|
7
|
+
context 'when persistence options are set' do
|
8
|
+
|
9
|
+
let(:person) do
|
10
|
+
Person.with(collection: 'other') do |person_class|
|
11
|
+
person_class.create
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
let(:reloaded) do
|
16
|
+
Person.with(collection: 'other') do |person_class|
|
17
|
+
person_class.first
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'applies the persistence options' do
|
22
|
+
expect(person).to eq(reloaded)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
7
26
|
context "when using bson ids" do
|
8
27
|
|
9
28
|
let(:person) do
|
@@ -106,6 +125,38 @@ describe Mongoid::Reloadable do
|
|
106
125
|
|
107
126
|
context "when embedded a single level" do
|
108
127
|
|
128
|
+
context 'when persistence options are set' do
|
129
|
+
|
130
|
+
let(:person) do
|
131
|
+
Person.with(collection: 'other') do |person_class|
|
132
|
+
person_class.create
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
let!(:address) do
|
137
|
+
person.with(collection: 'other') do |person_object|
|
138
|
+
person_object.addresses.create(street: "Abbey Road", number: 4)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
before do
|
143
|
+
Person.mongo_client[:other].find(
|
144
|
+
{ "_id" => person.id }
|
145
|
+
).update_one({ "$set" => { "addresses.0.number" => 3 }})
|
146
|
+
end
|
147
|
+
|
148
|
+
let!(:reloaded) do
|
149
|
+
person.with(collection: 'other') do |person_class|
|
150
|
+
person.addresses.first.reload
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
it "reloads the embedded document attributes" do
|
155
|
+
expect(reloaded.number).to eq(3)
|
156
|
+
end
|
157
|
+
|
158
|
+
end
|
159
|
+
|
109
160
|
context "when the relation is an embeds many" do
|
110
161
|
|
111
162
|
let!(:address) do
|
@@ -227,18 +227,6 @@ describe Mongoid::Scopable do
|
|
227
227
|
|
228
228
|
context "when provided a criteria" do
|
229
229
|
|
230
|
-
context 'when a collation is defined on the criteria', if: collation_supported? do
|
231
|
-
|
232
|
-
before do
|
233
|
-
Band.scope(:tests, ->{ Band.where(name: 'TESTING').collation(locale: 'en_US', strength: 2) })
|
234
|
-
Band.create(name: 'testing')
|
235
|
-
end
|
236
|
-
|
237
|
-
it 'applies the collation' do
|
238
|
-
expect(Band.tests.first['name']).to eq('testing')
|
239
|
-
end
|
240
|
-
end
|
241
|
-
|
242
230
|
context "when the lambda includes a geo_near query" do
|
243
231
|
|
244
232
|
before do
|
@@ -829,54 +829,4 @@ describe Mongoid::Serializable do
|
|
829
829
|
end
|
830
830
|
end
|
831
831
|
end
|
832
|
-
|
833
|
-
describe "#to_xml" do
|
834
|
-
|
835
|
-
context "BSON::ObjectId" do
|
836
|
-
|
837
|
-
let(:person) do
|
838
|
-
Person.new
|
839
|
-
end
|
840
|
-
|
841
|
-
it "serializes as string" do
|
842
|
-
expect(person.to_xml).to include("<_id>#{person.id}</_id>")
|
843
|
-
end
|
844
|
-
end
|
845
|
-
|
846
|
-
context "when an Array field is defined" do
|
847
|
-
|
848
|
-
let(:person) do
|
849
|
-
Person.new(
|
850
|
-
aliases: [ "Kelly", "Machine Gun" ]
|
851
|
-
)
|
852
|
-
end
|
853
|
-
|
854
|
-
it "properly types the array" do
|
855
|
-
expect(person.to_xml).to include("<aliases type=\"array\">")
|
856
|
-
end
|
857
|
-
|
858
|
-
it "serializes the array" do
|
859
|
-
expect(person.to_xml).to include("<alias>Kelly</alias>")
|
860
|
-
expect(person.to_xml).to include("<alias>Machine Gun</alias>")
|
861
|
-
end
|
862
|
-
end
|
863
|
-
|
864
|
-
context "when a Hash field is defined" do
|
865
|
-
|
866
|
-
let(:person) do
|
867
|
-
Person.new(
|
868
|
-
map: { lat: 24.5, long: 22.1 }
|
869
|
-
)
|
870
|
-
end
|
871
|
-
|
872
|
-
it "properly types the hash" do
|
873
|
-
expect(person.to_xml).to include("<map>")
|
874
|
-
end
|
875
|
-
|
876
|
-
it "serializes the hash" do
|
877
|
-
expect(person.to_xml).to include("<lat type=\"float\">24.5</lat>")
|
878
|
-
expect(person.to_xml).to include("<long type=\"float\">22.1</long>")
|
879
|
-
end
|
880
|
-
end
|
881
|
-
end
|
882
832
|
end
|
@@ -19,34 +19,41 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
19
19
|
context "when persisting to another collection" do
|
20
20
|
|
21
21
|
before do
|
22
|
-
Dictionary.with(collection: "dicts")
|
22
|
+
Dictionary.with(collection: "dicts") do |klass|
|
23
|
+
klass.create(name: "websters")
|
24
|
+
end
|
23
25
|
end
|
24
26
|
|
25
27
|
context "when the document is not valid" do
|
26
28
|
|
27
29
|
let(:websters) do
|
28
|
-
|
30
|
+
object = nil
|
31
|
+
valid = Dictionary.with(collection: "dicts") do |klass|
|
32
|
+
object = klass.new(name: "websters")
|
33
|
+
object.valid?
|
34
|
+
end
|
35
|
+
{ :valid => valid, :object => object }
|
29
36
|
end
|
30
37
|
|
31
38
|
it "performs the validation on the correct collection" do
|
32
|
-
expect(websters).
|
39
|
+
expect(websters[:valid]).to be(false)
|
33
40
|
end
|
34
41
|
|
35
42
|
it "adds the uniqueness error" do
|
36
|
-
websters.
|
37
|
-
expect(websters.errors[:name]).to_not be_nil
|
43
|
+
expect(websters[:object].errors[:name]).to_not be_nil
|
38
44
|
end
|
39
45
|
|
40
46
|
it "clears the persistence options in the thread local" do
|
41
|
-
|
42
|
-
expect(Dictionary.persistence_options).to be_nil
|
47
|
+
expect(Dictionary.persistence_context).to eq(Mongoid::PersistenceContext.new(Dictionary))
|
43
48
|
end
|
44
49
|
end
|
45
50
|
|
46
51
|
context "when the document is valid" do
|
47
52
|
|
48
53
|
let(:oxford) do
|
49
|
-
Dictionary.with(collection: "dicts")
|
54
|
+
Dictionary.with(collection: "dicts") do |klass|
|
55
|
+
klass.new(name: "oxford")
|
56
|
+
end
|
50
57
|
end
|
51
58
|
|
52
59
|
it "performs the validation on the correct collection" do
|
@@ -2431,7 +2438,7 @@ describe Mongoid::Validatable::UniquenessValidator do
|
|
2431
2438
|
it "transfers the options to the cloned client" do
|
2432
2439
|
expect {
|
2433
2440
|
Person.create!(ssn: "132-11-1111", username: "asdfsdfA")
|
2434
|
-
}.to raise_error
|
2441
|
+
}.to raise_error(Mongo::Error::OperationFailure)
|
2435
2442
|
end
|
2436
2443
|
end
|
2437
2444
|
end
|