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
@@ -21,17 +21,6 @@ describe Mongoid::Relations::Cyclic do
|
|
21
21
|
it "sets cyclic to true" do
|
22
22
|
expect(document.cyclic).to be true
|
23
23
|
end
|
24
|
-
|
25
|
-
context "when a query is executed" do
|
26
|
-
|
27
|
-
before do
|
28
|
-
document.save
|
29
|
-
end
|
30
|
-
|
31
|
-
it "queries the database, not memory" do
|
32
|
-
expect(Role.first).to be_a(Role)
|
33
|
-
end
|
34
|
-
end
|
35
24
|
end
|
36
25
|
|
37
26
|
context "when the name is not inflected easily" do
|
@@ -144,17 +133,6 @@ describe Mongoid::Relations::Cyclic do
|
|
144
133
|
expect(document.class.relations['child_mango']).to be_cascading_callbacks
|
145
134
|
end
|
146
135
|
end
|
147
|
-
|
148
|
-
context "when a query is executed" do
|
149
|
-
|
150
|
-
before do
|
151
|
-
document.save
|
152
|
-
end
|
153
|
-
|
154
|
-
it "queries the database, not memory" do
|
155
|
-
expect(Shelf.first).to be_a(Shelf)
|
156
|
-
end
|
157
|
-
end
|
158
136
|
end
|
159
137
|
|
160
138
|
context "when building a namespaced hierarchy" do
|
@@ -3761,12 +3761,10 @@ describe Mongoid::Relations::Embedded::Many do
|
|
3761
3761
|
|
3762
3762
|
before do
|
3763
3763
|
expect(artist).to receive(:before_add_song).and_raise
|
3764
|
+
begin; artist.songs << song; rescue; end
|
3764
3765
|
end
|
3765
3766
|
|
3766
3767
|
it "does not add the document to the relation" do
|
3767
|
-
expect {
|
3768
|
-
artist.songs << song
|
3769
|
-
}.to raise_error
|
3770
3768
|
expect(artist.songs).to be_empty
|
3771
3769
|
end
|
3772
3770
|
end
|
@@ -3791,12 +3789,10 @@ describe Mongoid::Relations::Embedded::Many do
|
|
3791
3789
|
|
3792
3790
|
before do
|
3793
3791
|
expect(artist).to receive(:after_add_label).and_raise
|
3792
|
+
begin; artist.labels << label; rescue; end
|
3794
3793
|
end
|
3795
3794
|
|
3796
3795
|
it "adds the document to the relation" do
|
3797
|
-
expect {
|
3798
|
-
artist.labels << label
|
3799
|
-
}.to raise_error
|
3800
3796
|
expect(artist.labels).to eq([ label ])
|
3801
3797
|
end
|
3802
3798
|
end
|
@@ -3857,19 +3853,18 @@ describe Mongoid::Relations::Embedded::Many do
|
|
3857
3853
|
describe "#delete" do
|
3858
3854
|
|
3859
3855
|
it "does not remove the document from the relation" do
|
3860
|
-
|
3861
|
-
artist.songs.delete(song)
|
3862
|
-
}.to raise_error
|
3856
|
+
begin; artist.songs.delete(song); rescue; end
|
3863
3857
|
expect(artist.songs).to eq([ song ])
|
3864
3858
|
end
|
3865
3859
|
end
|
3866
3860
|
|
3867
3861
|
describe "#clear" do
|
3868
3862
|
|
3863
|
+
before do
|
3864
|
+
begin; artist.songs.clear; rescue; end
|
3865
|
+
end
|
3866
|
+
|
3869
3867
|
it "removes the documents from the relation" do
|
3870
|
-
expect {
|
3871
|
-
artist.songs.clear
|
3872
|
-
}.to raise_error
|
3873
3868
|
expect(artist.songs).to eq([ song ])
|
3874
3869
|
end
|
3875
3870
|
end
|
@@ -3925,9 +3920,7 @@ describe Mongoid::Relations::Embedded::Many do
|
|
3925
3920
|
describe "#delete" do
|
3926
3921
|
|
3927
3922
|
before do
|
3928
|
-
|
3929
|
-
artist.labels.delete(label)
|
3930
|
-
}.to raise_error
|
3923
|
+
begin; artist.labels.delete(label); rescue; end
|
3931
3924
|
end
|
3932
3925
|
|
3933
3926
|
it "removes the document from the relation" do
|
@@ -3938,9 +3931,7 @@ describe Mongoid::Relations::Embedded::Many do
|
|
3938
3931
|
describe "#clear" do
|
3939
3932
|
|
3940
3933
|
before do
|
3941
|
-
|
3942
|
-
artist.labels.clear
|
3943
|
-
}.to raise_error
|
3934
|
+
begin; artist.labels.clear; rescue; end
|
3944
3935
|
end
|
3945
3936
|
|
3946
3937
|
it "should remove from collection" do
|
@@ -4019,29 +4010,6 @@ describe Mongoid::Relations::Embedded::Many do
|
|
4019
4010
|
end
|
4020
4011
|
end
|
4021
4012
|
|
4022
|
-
context "when embedded documents get marshalled" do
|
4023
|
-
|
4024
|
-
let(:person) do
|
4025
|
-
Person.create
|
4026
|
-
end
|
4027
|
-
|
4028
|
-
let!(:addresses) do
|
4029
|
-
person.addresses
|
4030
|
-
end
|
4031
|
-
|
4032
|
-
let!(:dumped) do
|
4033
|
-
Marshal.dump(addresses)
|
4034
|
-
end
|
4035
|
-
|
4036
|
-
let!(:loaded) do
|
4037
|
-
Marshal.load(dumped)
|
4038
|
-
end
|
4039
|
-
|
4040
|
-
it "keeps the proxy extensions when remarshalling" do
|
4041
|
-
expect(loaded.extension).to eq("Testing")
|
4042
|
-
end
|
4043
|
-
end
|
4044
|
-
|
4045
4013
|
context "deleting embedded documents" do
|
4046
4014
|
|
4047
4015
|
it "able to delete embedded documents upon condition" do
|
@@ -70,7 +70,8 @@ describe Mongoid::Relations::Embedded::One do
|
|
70
70
|
name_without_default or (self.name = Name.new)
|
71
71
|
end
|
72
72
|
class << person
|
73
|
-
|
73
|
+
alias_method :name_without_default, :name
|
74
|
+
alias_method :name, :name_with_default
|
74
75
|
end
|
75
76
|
end
|
76
77
|
|
@@ -15,12 +15,30 @@ describe Mongoid::Relations::Macros do
|
|
15
15
|
klass._validators.clear
|
16
16
|
end
|
17
17
|
|
18
|
+
after do
|
19
|
+
klass.relations.clear
|
20
|
+
klass.validators.clear
|
21
|
+
end
|
22
|
+
|
18
23
|
describe ".embedded_in" do
|
19
24
|
|
20
25
|
it "defines the macro" do
|
21
26
|
expect(klass).to respond_to(:embedded_in)
|
22
27
|
end
|
23
28
|
|
29
|
+
context 'when the relation name is invalid' do
|
30
|
+
|
31
|
+
let(:relation) do
|
32
|
+
klass.embedded_in(:fields)
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'raises an InvalidRelation exception' do
|
36
|
+
expect {
|
37
|
+
relation
|
38
|
+
}.to raise_exception(Mongoid::Errors::InvalidRelation)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
24
42
|
context "when defining the relation" do
|
25
43
|
|
26
44
|
before do
|
@@ -74,6 +92,19 @@ describe Mongoid::Relations::Macros do
|
|
74
92
|
|
75
93
|
context "when defining the relation" do
|
76
94
|
|
95
|
+
context 'when the relation name is invalid' do
|
96
|
+
|
97
|
+
let(:relation) do
|
98
|
+
klass.embeds_many(:fields)
|
99
|
+
end
|
100
|
+
|
101
|
+
it 'raises an InvalidRelation exception' do
|
102
|
+
expect {
|
103
|
+
relation
|
104
|
+
}.to raise_exception(Mongoid::Errors::InvalidRelation)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
77
108
|
before do
|
78
109
|
klass.embeds_many(:addresses)
|
79
110
|
end
|
@@ -132,8 +163,8 @@ describe Mongoid::Relations::Macros do
|
|
132
163
|
expect(metadata.order).to_not be_nil
|
133
164
|
end
|
134
165
|
|
135
|
-
it "returns
|
136
|
-
expect(metadata.order).to be_kind_of(
|
166
|
+
it "returns Mongoid::Criteria::Queryable::Key" do
|
167
|
+
expect(metadata.order).to be_kind_of(Mongoid::Criteria::Queryable::Key)
|
137
168
|
end
|
138
169
|
end
|
139
170
|
|
@@ -157,6 +188,19 @@ describe Mongoid::Relations::Macros do
|
|
157
188
|
|
158
189
|
context "when defining the relation" do
|
159
190
|
|
191
|
+
context 'when the relation name is invalid' do
|
192
|
+
|
193
|
+
let(:relation) do
|
194
|
+
klass.embeds_one(:fields)
|
195
|
+
end
|
196
|
+
|
197
|
+
it 'raises an InvalidRelation exception' do
|
198
|
+
expect {
|
199
|
+
relation
|
200
|
+
}.to raise_exception(Mongoid::Errors::InvalidRelation)
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
160
204
|
before do
|
161
205
|
klass.embeds_one(:name)
|
162
206
|
end
|
@@ -223,8 +267,300 @@ describe Mongoid::Relations::Macros do
|
|
223
267
|
|
224
268
|
describe ".belongs_to" do
|
225
269
|
|
270
|
+
let(:_class) do
|
271
|
+
class RelationsTestClass
|
272
|
+
include Mongoid::Document
|
273
|
+
end
|
274
|
+
end
|
275
|
+
|
276
|
+
let(:conf) do
|
277
|
+
CONFIG.merge(options: { belongs_to_required_by_default: default_require })
|
278
|
+
end
|
279
|
+
|
280
|
+
let(:relation) do
|
281
|
+
_class.new
|
282
|
+
end
|
283
|
+
|
284
|
+
let(:relation_options) { {} }
|
285
|
+
|
286
|
+
let(:default_require) { Mongoid.belongs_to_required_by_default }
|
287
|
+
|
288
|
+
before do
|
289
|
+
Mongoid.configure do |config|
|
290
|
+
config.load_configuration(conf)
|
291
|
+
end
|
292
|
+
_class.belongs_to(:person, relation_options)
|
293
|
+
end
|
294
|
+
|
295
|
+
after do
|
296
|
+
Object.send(:remove_const, _class.name)
|
297
|
+
end
|
298
|
+
|
299
|
+
after(:all) do
|
300
|
+
Mongoid.configure do |config|
|
301
|
+
config.load_configuration(CONFIG)
|
302
|
+
end
|
303
|
+
end
|
304
|
+
|
226
305
|
it "defines the macro" do
|
227
|
-
expect(
|
306
|
+
expect(_class).to respond_to(:belongs_to)
|
307
|
+
end
|
308
|
+
|
309
|
+
context 'when the relation has options' do
|
310
|
+
|
311
|
+
context 'when the relation has the option :required' do
|
312
|
+
|
313
|
+
context 'when the relation does not have the :optional option' do
|
314
|
+
|
315
|
+
context 'when :required is true' do
|
316
|
+
|
317
|
+
let(:relation_options) do
|
318
|
+
{ required: true }
|
319
|
+
end
|
320
|
+
|
321
|
+
context 'when the default config is to require the association' do
|
322
|
+
|
323
|
+
let(:default_require) { true }
|
324
|
+
|
325
|
+
it 'requires the association' do
|
326
|
+
expect(relation.save).to be(false)
|
327
|
+
end
|
328
|
+
end
|
329
|
+
|
330
|
+
context 'when the default config is to not require the association' do
|
331
|
+
|
332
|
+
let(:default_require) { false }
|
333
|
+
|
334
|
+
it 'requires the association' do
|
335
|
+
expect(relation.save).to be(false)
|
336
|
+
end
|
337
|
+
end
|
338
|
+
end
|
339
|
+
|
340
|
+
context 'when :required is false' do
|
341
|
+
|
342
|
+
let(:relation_options) do
|
343
|
+
{ required: false }
|
344
|
+
end
|
345
|
+
|
346
|
+
context 'when the default config is to require the association' do
|
347
|
+
|
348
|
+
let(:default_require) { true }
|
349
|
+
|
350
|
+
it 'does not require the association' do
|
351
|
+
expect(relation.save).to be(true)
|
352
|
+
end
|
353
|
+
end
|
354
|
+
|
355
|
+
context 'when the default config is to not require the association' do
|
356
|
+
|
357
|
+
let(:default_require) { false }
|
358
|
+
|
359
|
+
it 'does not require the association' do
|
360
|
+
expect(relation.save).to be(true)
|
361
|
+
end
|
362
|
+
end
|
363
|
+
end
|
364
|
+
end
|
365
|
+
|
366
|
+
context 'when the relation has the option :optional' do
|
367
|
+
|
368
|
+
context 'when :required is true' do
|
369
|
+
|
370
|
+
context 'when :optional is true' do
|
371
|
+
|
372
|
+
let(:relation_options) do
|
373
|
+
{
|
374
|
+
required: true,
|
375
|
+
optional: true
|
376
|
+
}
|
377
|
+
end
|
378
|
+
|
379
|
+
context 'when the default config is to require the association' do
|
380
|
+
|
381
|
+
let(:default_require) { true }
|
382
|
+
|
383
|
+
it 'requires the association' do
|
384
|
+
expect(relation.save).to be(false)
|
385
|
+
end
|
386
|
+
end
|
387
|
+
|
388
|
+
context 'when the default config is to not require the association' do
|
389
|
+
|
390
|
+
let(:default_require) { false }
|
391
|
+
|
392
|
+
it 'requires the association' do
|
393
|
+
expect(relation.save).to be(false)
|
394
|
+
end
|
395
|
+
end
|
396
|
+
end
|
397
|
+
|
398
|
+
context 'when :optional is false' do
|
399
|
+
|
400
|
+
let(:relation_options) do
|
401
|
+
{
|
402
|
+
required: true,
|
403
|
+
optional: false
|
404
|
+
}
|
405
|
+
end
|
406
|
+
|
407
|
+
context 'when the default config is to require the association' do
|
408
|
+
|
409
|
+
let(:default_require) { true }
|
410
|
+
|
411
|
+
it 'requires the association' do
|
412
|
+
expect(relation.save).to be(false)
|
413
|
+
end
|
414
|
+
end
|
415
|
+
|
416
|
+
context 'when the default config is to not require the association' do
|
417
|
+
|
418
|
+
let(:default_require) { false }
|
419
|
+
|
420
|
+
it 'requires the association' do
|
421
|
+
expect(relation.save).to be(false)
|
422
|
+
end
|
423
|
+
end
|
424
|
+
end
|
425
|
+
end
|
426
|
+
|
427
|
+
context 'when :required is false' do
|
428
|
+
|
429
|
+
context 'when :optional is true' do
|
430
|
+
|
431
|
+
let(:relation_options) do
|
432
|
+
{
|
433
|
+
required: false,
|
434
|
+
optional: true
|
435
|
+
}
|
436
|
+
end
|
437
|
+
|
438
|
+
context 'when the default config is to require the association' do
|
439
|
+
|
440
|
+
let(:default_require) { true }
|
441
|
+
|
442
|
+
it 'does not require the association' do
|
443
|
+
expect(relation.save).to be(true)
|
444
|
+
end
|
445
|
+
end
|
446
|
+
|
447
|
+
context 'when the default config is to not require the association' do
|
448
|
+
|
449
|
+
let(:default_require) { true }
|
450
|
+
|
451
|
+
it 'does not require the association' do
|
452
|
+
expect(relation.save).to be(true)
|
453
|
+
end
|
454
|
+
end
|
455
|
+
end
|
456
|
+
|
457
|
+
context 'when :optional is false' do
|
458
|
+
|
459
|
+
let(:relation_options) do
|
460
|
+
{
|
461
|
+
required: false,
|
462
|
+
optional: false
|
463
|
+
}
|
464
|
+
end
|
465
|
+
|
466
|
+
context 'when the default config is to require the association' do
|
467
|
+
|
468
|
+
let(:default_require) { true }
|
469
|
+
|
470
|
+
it 'does not require the association' do
|
471
|
+
expect(relation.save).to be(true)
|
472
|
+
end
|
473
|
+
end
|
474
|
+
|
475
|
+
context 'when the default config is to not require the association' do
|
476
|
+
|
477
|
+
let(:default_require) { false }
|
478
|
+
|
479
|
+
it 'does not require the association' do
|
480
|
+
expect(relation.save).to be(true)
|
481
|
+
end
|
482
|
+
end
|
483
|
+
end
|
484
|
+
end
|
485
|
+
end
|
486
|
+
end
|
487
|
+
|
488
|
+
context 'when the relation does not have the option :required' do
|
489
|
+
|
490
|
+
context 'when the relation has the option :optional' do
|
491
|
+
|
492
|
+
context 'when :optional is true' do
|
493
|
+
|
494
|
+
let(:relation_options) do
|
495
|
+
{ optional: true }
|
496
|
+
end
|
497
|
+
|
498
|
+
context 'when the default config is to require the association' do
|
499
|
+
|
500
|
+
let(:default_require) { true }
|
501
|
+
|
502
|
+
it 'does not require the association' do
|
503
|
+
expect(relation.save).to be(true)
|
504
|
+
end
|
505
|
+
end
|
506
|
+
|
507
|
+
context 'when the default config is to not require the association' do
|
508
|
+
|
509
|
+
let(:default_require) { false }
|
510
|
+
|
511
|
+
it 'does not require the association' do
|
512
|
+
expect(relation.save).to be(true)
|
513
|
+
end
|
514
|
+
end
|
515
|
+
end
|
516
|
+
|
517
|
+
context 'when :optional is false' do
|
518
|
+
|
519
|
+
let(:relation_options) do
|
520
|
+
{ optional: false }
|
521
|
+
end
|
522
|
+
|
523
|
+
context 'when the default config is to require the association' do
|
524
|
+
|
525
|
+
let(:default_require) { true }
|
526
|
+
|
527
|
+
it 'requires the association' do
|
528
|
+
expect(relation.save).to be(false)
|
529
|
+
end
|
530
|
+
end
|
531
|
+
|
532
|
+
context 'when the default config is to not require the association' do
|
533
|
+
|
534
|
+
let(:default_require) { false }
|
535
|
+
|
536
|
+
it 'requires the association' do
|
537
|
+
expect(relation.save).to be(false)
|
538
|
+
end
|
539
|
+
end
|
540
|
+
end
|
541
|
+
end
|
542
|
+
end
|
543
|
+
end
|
544
|
+
|
545
|
+
context 'when the relation does not have options' do
|
546
|
+
|
547
|
+
context 'when the default config is to require the association' do
|
548
|
+
|
549
|
+
let(:default_require) { true }
|
550
|
+
|
551
|
+
it 'requires the association' do
|
552
|
+
expect(relation.save).to be(false)
|
553
|
+
end
|
554
|
+
end
|
555
|
+
|
556
|
+
context 'when the default config is to not require the association' do
|
557
|
+
|
558
|
+
let(:default_require) { false }
|
559
|
+
|
560
|
+
it 'does not require the association' do
|
561
|
+
expect(relation.save).to be(true)
|
562
|
+
end
|
563
|
+
end
|
228
564
|
end
|
229
565
|
|
230
566
|
context "when the relation is polymorphic" do
|
@@ -247,6 +583,19 @@ describe Mongoid::Relations::Macros do
|
|
247
583
|
|
248
584
|
context "when defining the relation" do
|
249
585
|
|
586
|
+
context 'when the relation name is invalid' do
|
587
|
+
|
588
|
+
let(:relation) do
|
589
|
+
klass.belongs_to(:fields)
|
590
|
+
end
|
591
|
+
|
592
|
+
it 'raises an InvalidRelation exception' do
|
593
|
+
expect {
|
594
|
+
relation
|
595
|
+
}.to raise_exception(Mongoid::Errors::InvalidRelation)
|
596
|
+
end
|
597
|
+
end
|
598
|
+
|
250
599
|
before do
|
251
600
|
klass.belongs_to(:person)
|
252
601
|
end
|
@@ -306,6 +655,19 @@ describe Mongoid::Relations::Macros do
|
|
306
655
|
|
307
656
|
context "when defining the relation" do
|
308
657
|
|
658
|
+
context 'when the relation name is invalid' do
|
659
|
+
|
660
|
+
let(:relation) do
|
661
|
+
klass.has_many(:fields)
|
662
|
+
end
|
663
|
+
|
664
|
+
it 'raises an InvalidRelation exception' do
|
665
|
+
expect {
|
666
|
+
relation
|
667
|
+
}.to raise_exception(Mongoid::Errors::InvalidRelation)
|
668
|
+
end
|
669
|
+
end
|
670
|
+
|
309
671
|
before do
|
310
672
|
klass.has_many(:posts)
|
311
673
|
end
|
@@ -364,8 +726,8 @@ describe Mongoid::Relations::Macros do
|
|
364
726
|
expect(metadata.order).to_not be_nil
|
365
727
|
end
|
366
728
|
|
367
|
-
it "returns
|
368
|
-
expect(metadata.order).to be_kind_of(
|
729
|
+
it "returns Mongoid::Criteria::Queryable::Key" do
|
730
|
+
expect(metadata.order).to be_kind_of(Mongoid::Criteria::Queryable::Key)
|
369
731
|
end
|
370
732
|
end
|
371
733
|
|
@@ -389,6 +751,19 @@ describe Mongoid::Relations::Macros do
|
|
389
751
|
|
390
752
|
context "when defining the relation" do
|
391
753
|
|
754
|
+
context 'when the relation name is invalid' do
|
755
|
+
|
756
|
+
let(:relation) do
|
757
|
+
klass.has_and_belongs_to_many(:fields)
|
758
|
+
end
|
759
|
+
|
760
|
+
it 'raises an InvalidRelation exception' do
|
761
|
+
expect {
|
762
|
+
relation
|
763
|
+
}.to raise_exception(Mongoid::Errors::InvalidRelation)
|
764
|
+
end
|
765
|
+
end
|
766
|
+
|
392
767
|
before do
|
393
768
|
klass.has_and_belongs_to_many(:preferences)
|
394
769
|
end
|
@@ -429,8 +804,8 @@ describe Mongoid::Relations::Macros do
|
|
429
804
|
expect(metadata.order).to_not be_nil
|
430
805
|
end
|
431
806
|
|
432
|
-
it "returns
|
433
|
-
expect(metadata.order).to be_kind_of(
|
807
|
+
it "returns Mongoid::Criteria::Queryable::Key" do
|
808
|
+
expect(metadata.order).to be_kind_of(Mongoid::Criteria::Queryable::Key)
|
434
809
|
end
|
435
810
|
end
|
436
811
|
|
@@ -459,6 +834,19 @@ describe Mongoid::Relations::Macros do
|
|
459
834
|
|
460
835
|
context "when defining the relation" do
|
461
836
|
|
837
|
+
context 'when the relation name is invalid' do
|
838
|
+
|
839
|
+
let(:relation) do
|
840
|
+
klass.has_one(:fields)
|
841
|
+
end
|
842
|
+
|
843
|
+
it 'raises an InvalidRelation exception' do
|
844
|
+
expect {
|
845
|
+
relation
|
846
|
+
}.to raise_exception(Mongoid::Errors::InvalidRelation)
|
847
|
+
end
|
848
|
+
end
|
849
|
+
|
462
850
|
before do
|
463
851
|
klass.has_one(:game)
|
464
852
|
end
|