mongoid 4.0.0.alpha1 → 4.0.0.alpha2
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 +30 -0
- data/README.md +1 -1
- data/lib/config/locales/en.yml +4 -6
- data/lib/mongoid/attributes/processing.rb +1 -1
- data/lib/mongoid/contextual.rb +2 -0
- data/lib/mongoid/contextual/map_reduce.rb +3 -1
- data/lib/mongoid/contextual/none.rb +90 -0
- data/lib/mongoid/criteria.rb +25 -0
- data/lib/mongoid/extensions/array.rb +1 -1
- data/lib/mongoid/extensions/big_decimal.rb +1 -1
- data/lib/mongoid/extensions/date.rb +1 -1
- data/lib/mongoid/extensions/date_time.rb +3 -3
- data/lib/mongoid/extensions/float.rb +1 -1
- data/lib/mongoid/extensions/hash.rb +1 -1
- data/lib/mongoid/extensions/integer.rb +1 -1
- data/lib/mongoid/extensions/object.rb +3 -3
- data/lib/mongoid/extensions/object_id.rb +1 -1
- data/lib/mongoid/extensions/range.rb +1 -1
- data/lib/mongoid/extensions/regexp.rb +1 -1
- data/lib/mongoid/extensions/set.rb +1 -1
- data/lib/mongoid/extensions/string.rb +1 -1
- data/lib/mongoid/extensions/symbol.rb +1 -1
- data/lib/mongoid/extensions/time.rb +1 -1
- data/lib/mongoid/extensions/time_with_zone.rb +1 -1
- data/lib/mongoid/findable.rb +1 -0
- data/lib/mongoid/interceptable.rb +4 -2
- data/lib/mongoid/persistable.rb +4 -3
- data/lib/mongoid/relations/embedded/many.rb +1 -1
- data/lib/mongoid/relations/metadata.rb +8 -4
- data/lib/mongoid/relations/referenced/many.rb +1 -1
- data/lib/mongoid/relations/touchable.rb +1 -1
- data/lib/mongoid/scopable.rb +2 -26
- data/lib/mongoid/validatable/uniqueness.rb +13 -0
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +0 -4
- data/spec/app/models/acolyte.rb +1 -1
- data/spec/app/models/address.rb +2 -2
- data/spec/app/models/appointment.rb +1 -1
- data/spec/app/models/audio.rb +1 -1
- data/spec/app/models/dog.rb +1 -1
- data/spec/app/models/event.rb +1 -1
- data/spec/app/models/house.rb +1 -1
- data/spec/app/models/message.rb +8 -0
- data/spec/app/models/person.rb +3 -2
- data/spec/app/models/player.rb +2 -2
- data/spec/app/models/post.rb +3 -2
- data/spec/app/models/preference.rb +1 -1
- data/spec/app/models/sound.rb +1 -1
- data/spec/app/models/symptom.rb +1 -1
- data/spec/app/models/tree.rb +2 -2
- data/spec/app/models/video.rb +1 -1
- data/spec/mongoid/attributes_spec.rb +3 -3
- data/spec/mongoid/changeable_spec.rb +3 -3
- data/spec/mongoid/contextual/mongo_spec.rb +14 -14
- data/spec/mongoid/contextual/none_spec.rb +127 -0
- data/spec/mongoid/criteria/scopable_spec.rb +6 -6
- data/spec/mongoid/criteria_spec.rb +52 -96
- data/spec/mongoid/errors/invalid_scope_spec.rb +2 -2
- data/spec/mongoid/errors/mongoid_error_spec.rb +1 -1
- data/spec/mongoid/extensions/date_time_spec.rb +1 -1
- data/spec/mongoid/fields_spec.rb +6 -7
- data/spec/mongoid/findable_spec.rb +65 -0
- data/spec/mongoid/interceptable_spec.rb +11 -11
- data/spec/mongoid/persistable_spec.rb +4 -4
- data/spec/mongoid/relations/auto_save_spec.rb +1 -1
- data/spec/mongoid/relations/bindings/embedded/in_spec.rb +5 -5
- data/spec/mongoid/relations/bindings/embedded/many_spec.rb +1 -1
- data/spec/mongoid/relations/bindings/embedded/one_spec.rb +2 -2
- data/spec/mongoid/relations/bindings/referenced/in_spec.rb +14 -14
- data/spec/mongoid/relations/bindings/referenced/many_spec.rb +4 -4
- data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +10 -10
- data/spec/mongoid/relations/bindings/referenced/one_spec.rb +6 -6
- data/spec/mongoid/relations/builders/referenced/in_spec.rb +2 -2
- data/spec/mongoid/relations/builders/referenced/one_spec.rb +1 -1
- data/spec/mongoid/relations/cascading/delete_spec.rb +2 -2
- data/spec/mongoid/relations/cascading/destroy_spec.rb +4 -4
- data/spec/mongoid/relations/cascading/nullify_spec.rb +2 -2
- data/spec/mongoid/relations/cascading/restrict_spec.rb +4 -4
- data/spec/mongoid/relations/eager_spec.rb +6 -6
- data/spec/mongoid/relations/embedded/many_spec.rb +36 -5
- data/spec/mongoid/relations/metadata_spec.rb +34 -15
- data/spec/mongoid/relations/referenced/many_spec.rb +19 -4
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +7 -7
- data/spec/mongoid/relations/referenced/one_spec.rb +1 -1
- data/spec/mongoid/relations/targets/enumerable_spec.rb +2 -2
- data/spec/mongoid/relations/touchable_spec.rb +17 -0
- data/spec/mongoid/scopable_spec.rb +17 -40
- data/spec/mongoid/sessions/options_spec.rb +1 -1
- data/spec/mongoid/timestamps/timeless_spec.rb +6 -6
- data/spec/mongoid/timestamps/updated/short_spec.rb +1 -1
- data/spec/mongoid/timestamps/updated_spec.rb +1 -1
- data/spec/mongoid/timestamps_spec.rb +2 -2
- data/spec/mongoid/validatable/associated_spec.rb +4 -4
- data/spec/mongoid/validatable/length_spec.rb +7 -7
- data/spec/mongoid/validatable/presence_spec.rb +6 -6
- data/spec/mongoid/validatable/uniqueness_spec.rb +44 -3
- data/spec/rails/mongoid_spec.rb +20 -20
- data/spec/spec_helper.rb +1 -0
- metadata +55 -50
|
@@ -39,7 +39,7 @@ describe Mongoid::Relations::Bindings::Referenced::ManyToMany do
|
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
it "passes the binding options through to the inverse" do
|
|
42
|
-
person.
|
|
42
|
+
expect(person).to receive(:save).never
|
|
43
43
|
end
|
|
44
44
|
|
|
45
45
|
it "syncs the base" do
|
|
@@ -60,7 +60,7 @@ describe Mongoid::Relations::Bindings::Referenced::ManyToMany do
|
|
|
60
60
|
end
|
|
61
61
|
|
|
62
62
|
it "does not save the parent on bind" do
|
|
63
|
-
person.
|
|
63
|
+
expect(person).to receive(:save).never
|
|
64
64
|
binding.bind_one(preference_two)
|
|
65
65
|
end
|
|
66
66
|
end
|
|
@@ -68,7 +68,7 @@ describe Mongoid::Relations::Bindings::Referenced::ManyToMany do
|
|
|
68
68
|
context "when the document is not bindable" do
|
|
69
69
|
|
|
70
70
|
it "does nothing" do
|
|
71
|
-
person.preferences.
|
|
71
|
+
expect(person.preferences).to receive(:<<).never
|
|
72
72
|
binding.bind_one(preference)
|
|
73
73
|
end
|
|
74
74
|
end
|
|
@@ -84,8 +84,8 @@ describe Mongoid::Relations::Bindings::Referenced::ManyToMany do
|
|
|
84
84
|
|
|
85
85
|
before do
|
|
86
86
|
binding.bind_one(target.first)
|
|
87
|
-
person.
|
|
88
|
-
preference.
|
|
87
|
+
expect(person).to receive(:delete).never
|
|
88
|
+
expect(preference).to receive(:delete).never
|
|
89
89
|
binding.unbind_one(target.first)
|
|
90
90
|
end
|
|
91
91
|
|
|
@@ -113,10 +113,10 @@ describe Mongoid::Relations::Bindings::Referenced::ManyToMany do
|
|
|
113
113
|
end
|
|
114
114
|
|
|
115
115
|
it "never performs a persistance operation" do
|
|
116
|
-
person.
|
|
117
|
-
person.
|
|
118
|
-
preference.
|
|
119
|
-
preference.
|
|
116
|
+
expect(person).to receive(:delete).never
|
|
117
|
+
expect(person).to receive(:save).never
|
|
118
|
+
expect(preference).to receive(:delete).never
|
|
119
|
+
expect(preference).to receive(:save).never
|
|
120
120
|
binding.unbind_one(target.first)
|
|
121
121
|
end
|
|
122
122
|
end
|
|
@@ -124,7 +124,7 @@ describe Mongoid::Relations::Bindings::Referenced::ManyToMany do
|
|
|
124
124
|
context "when the documents are not unbindable" do
|
|
125
125
|
|
|
126
126
|
it "does nothing" do
|
|
127
|
-
person.
|
|
127
|
+
expect(person).to receive(:preferences=).never
|
|
128
128
|
binding.unbind_one(target.first)
|
|
129
129
|
end
|
|
130
130
|
end
|
|
@@ -23,8 +23,8 @@ describe Mongoid::Relations::Bindings::Referenced::One do
|
|
|
23
23
|
context "when the document is bindable" do
|
|
24
24
|
|
|
25
25
|
before do
|
|
26
|
-
person.
|
|
27
|
-
game.
|
|
26
|
+
expect(person).to receive(:save).never
|
|
27
|
+
expect(game).to receive(:save).never
|
|
28
28
|
binding.bind_one
|
|
29
29
|
end
|
|
30
30
|
|
|
@@ -44,7 +44,7 @@ describe Mongoid::Relations::Bindings::Referenced::One do
|
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
it "does nothing" do
|
|
47
|
-
person.
|
|
47
|
+
expect(person).to receive(:game=).never
|
|
48
48
|
binding.bind_one
|
|
49
49
|
end
|
|
50
50
|
end
|
|
@@ -60,8 +60,8 @@ describe Mongoid::Relations::Bindings::Referenced::One do
|
|
|
60
60
|
|
|
61
61
|
before do
|
|
62
62
|
binding.bind_one
|
|
63
|
-
person.
|
|
64
|
-
game.
|
|
63
|
+
expect(person).to receive(:delete).never
|
|
64
|
+
expect(game).to receive(:delete).never
|
|
65
65
|
binding.unbind_one
|
|
66
66
|
end
|
|
67
67
|
|
|
@@ -77,7 +77,7 @@ describe Mongoid::Relations::Bindings::Referenced::One do
|
|
|
77
77
|
context "when the document is not unbindable" do
|
|
78
78
|
|
|
79
79
|
it "does nothing" do
|
|
80
|
-
person.
|
|
80
|
+
expect(person).to receive(:game=).never
|
|
81
81
|
binding.unbind_one
|
|
82
82
|
end
|
|
83
83
|
end
|
|
@@ -42,7 +42,7 @@ describe Mongoid::Relations::Builders::Referenced::In do
|
|
|
42
42
|
end
|
|
43
43
|
|
|
44
44
|
before do
|
|
45
|
-
criteria.
|
|
45
|
+
expect(criteria).to receive(:first).and_return(person)
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
let!(:document) do
|
|
@@ -83,7 +83,7 @@ describe Mongoid::Relations::Builders::Referenced::In do
|
|
|
83
83
|
end
|
|
84
84
|
|
|
85
85
|
before do
|
|
86
|
-
criteria.
|
|
86
|
+
expect(criteria).to receive(:first).and_return(person)
|
|
87
87
|
end
|
|
88
88
|
|
|
89
89
|
let!(:document) do
|
|
@@ -59,8 +59,8 @@ describe Mongoid::Relations::Cascading::Delete do
|
|
|
59
59
|
context "when the documents are in memory" do
|
|
60
60
|
|
|
61
61
|
before do
|
|
62
|
-
post_one.
|
|
63
|
-
post_two.
|
|
62
|
+
expect(post_one).to receive(:delete).never
|
|
63
|
+
expect(post_two).to receive(:delete).never
|
|
64
64
|
person.delete
|
|
65
65
|
end
|
|
66
66
|
|
|
@@ -23,11 +23,11 @@ describe Mongoid::Relations::Cascading::Destroy do
|
|
|
23
23
|
context "when the documents exist" do
|
|
24
24
|
|
|
25
25
|
before do
|
|
26
|
-
person.
|
|
26
|
+
expect(person).to receive(:posts).and_return([ post ])
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
it "destroys all documents in the relation" do
|
|
30
|
-
post.
|
|
30
|
+
expect(post).to receive(:destroy)
|
|
31
31
|
strategy.cascade
|
|
32
32
|
end
|
|
33
33
|
end
|
|
@@ -35,11 +35,11 @@ describe Mongoid::Relations::Cascading::Destroy do
|
|
|
35
35
|
context "when no documents exist" do
|
|
36
36
|
|
|
37
37
|
before do
|
|
38
|
-
person.
|
|
38
|
+
expect(person).to receive(:posts).and_return([])
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
it "does not destroy anything" do
|
|
42
|
-
post.
|
|
42
|
+
expect(post).to receive(:destroy).never
|
|
43
43
|
strategy.cascade
|
|
44
44
|
end
|
|
45
45
|
end
|
|
@@ -21,11 +21,11 @@ describe Mongoid::Relations::Cascading::Nullify do
|
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
before do
|
|
24
|
-
person.
|
|
24
|
+
expect(person).to receive(:posts).and_return(relation)
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
it "nullifies the relation" do
|
|
28
|
-
relation.
|
|
28
|
+
expect(relation).to receive(:nullify)
|
|
29
29
|
strategy.cascade
|
|
30
30
|
end
|
|
31
31
|
end
|
|
@@ -34,7 +34,7 @@ describe Mongoid::Relations::Cascading::Restrict do
|
|
|
34
34
|
context "when person has no drugs" do
|
|
35
35
|
|
|
36
36
|
before do
|
|
37
|
-
person.
|
|
37
|
+
expect(person).to receive(:drugs).and_return([ ])
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
it "deletes the person" do
|
|
@@ -45,7 +45,7 @@ describe Mongoid::Relations::Cascading::Restrict do
|
|
|
45
45
|
context "when person has drugs" do
|
|
46
46
|
|
|
47
47
|
before do
|
|
48
|
-
person.
|
|
48
|
+
expect(person).to receive(:drugs).and_return([ drug ])
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
it "it raises an error" do
|
|
@@ -56,11 +56,11 @@ describe Mongoid::Relations::Cascading::Restrict do
|
|
|
56
56
|
|
|
57
57
|
context "when no document exists" do
|
|
58
58
|
before do
|
|
59
|
-
person.
|
|
59
|
+
expect(person).to receive(:drugs).and_return([])
|
|
60
60
|
end
|
|
61
61
|
|
|
62
62
|
it "doesn't delete anything" do
|
|
63
|
-
drug.
|
|
63
|
+
expect(drug).to receive(:delete).never
|
|
64
64
|
strategy.cascade
|
|
65
65
|
end
|
|
66
66
|
end
|
|
@@ -33,7 +33,7 @@ describe Mongoid::Relations::Eager do
|
|
|
33
33
|
let(:includes) { [:person] }
|
|
34
34
|
|
|
35
35
|
it "groups by foreign_key" do
|
|
36
|
-
doc.
|
|
36
|
+
expect(doc).to receive(:person_id).once
|
|
37
37
|
context.preload(inclusions, [doc])
|
|
38
38
|
end
|
|
39
39
|
|
|
@@ -127,7 +127,7 @@ describe Mongoid::Relations::Eager do
|
|
|
127
127
|
end
|
|
128
128
|
|
|
129
129
|
it "runs the has_many preload" do
|
|
130
|
-
Mongoid::Relations::Eager::HasMany.
|
|
130
|
+
expect(Mongoid::Relations::Eager::HasMany).to receive(:new).with([posts_metadata], docs).once.and_call_original
|
|
131
131
|
|
|
132
132
|
context.eager_load(docs)
|
|
133
133
|
end
|
|
@@ -156,18 +156,18 @@ describe Mongoid::Relations::Eager do
|
|
|
156
156
|
end
|
|
157
157
|
|
|
158
158
|
it "runs the has_many preload" do
|
|
159
|
-
Mongoid::Relations::Eager::HasMany.
|
|
159
|
+
expect(Mongoid::Relations::Eager::HasMany).to receive(:new).with([posts_metadata], docs).once.and_call_original
|
|
160
160
|
|
|
161
161
|
context.eager_load(docs)
|
|
162
162
|
end
|
|
163
163
|
|
|
164
164
|
it "runs the has_one preload" do
|
|
165
|
-
Mongoid::Relations::Eager::HasOne.
|
|
165
|
+
expect(Mongoid::Relations::Eager::HasOne).to receive(:new).with([cat_metadata], docs).once.and_call_original
|
|
166
166
|
context.eager_load(docs)
|
|
167
167
|
end
|
|
168
168
|
|
|
169
169
|
it "runs the has_and_belongs_to_many preload" do
|
|
170
|
-
Mongoid::Relations::Eager::HasAndBelongsToMany.
|
|
170
|
+
expect(Mongoid::Relations::Eager::HasAndBelongsToMany).to receive(:new).with([houses_metadata], docs).once.and_call_original
|
|
171
171
|
context.eager_load(docs)
|
|
172
172
|
end
|
|
173
173
|
end
|
|
@@ -191,7 +191,7 @@ describe Mongoid::Relations::Eager do
|
|
|
191
191
|
end
|
|
192
192
|
|
|
193
193
|
it "runs the has_one preload" do
|
|
194
|
-
Mongoid::Relations::Eager::HasOne.
|
|
194
|
+
expect(Mongoid::Relations::Eager::HasOne).to receive(:new).with([book_metadata, cat_metadata], docs).once.and_call_original
|
|
195
195
|
context.eager_load(docs)
|
|
196
196
|
end
|
|
197
197
|
end
|
|
@@ -208,6 +208,37 @@ describe Mongoid::Relations::Embedded::Many do
|
|
|
208
208
|
end
|
|
209
209
|
end
|
|
210
210
|
end
|
|
211
|
+
|
|
212
|
+
context "when the child has one sided many to many relation" do
|
|
213
|
+
let(:person) do
|
|
214
|
+
Person.create
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
let(:message) do
|
|
218
|
+
Message.new
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
context "assign parent first" do
|
|
222
|
+
before do
|
|
223
|
+
message.person = person
|
|
224
|
+
message.receviers.send(method, person)
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
it "appends to the relation array" do
|
|
228
|
+
expect(message.receviers).to include(person)
|
|
229
|
+
end
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
context "not assign parent" do
|
|
233
|
+
before do
|
|
234
|
+
message.receviers.send(method, person)
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
it "appends to the relation array" do
|
|
238
|
+
expect(message.receviers).to include(person)
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
end
|
|
211
242
|
end
|
|
212
243
|
end
|
|
213
244
|
|
|
@@ -1216,7 +1247,7 @@ describe Mongoid::Relations::Embedded::Many do
|
|
|
1216
1247
|
end
|
|
1217
1248
|
|
|
1218
1249
|
before do
|
|
1219
|
-
person.addresses.
|
|
1250
|
+
expect(person.addresses).to_not receive(:batch_insert)
|
|
1220
1251
|
person.addresses.concat([])
|
|
1221
1252
|
end
|
|
1222
1253
|
|
|
@@ -3547,7 +3578,7 @@ describe Mongoid::Relations::Embedded::Many do
|
|
|
3547
3578
|
context "with errors" do
|
|
3548
3579
|
|
|
3549
3580
|
before do
|
|
3550
|
-
artist.
|
|
3581
|
+
expect(artist).to receive(:before_add_song).and_raise
|
|
3551
3582
|
end
|
|
3552
3583
|
|
|
3553
3584
|
it "does not add the document to the relation" do
|
|
@@ -3577,7 +3608,7 @@ describe Mongoid::Relations::Embedded::Many do
|
|
|
3577
3608
|
context "when errors are raised" do
|
|
3578
3609
|
|
|
3579
3610
|
before do
|
|
3580
|
-
artist.
|
|
3611
|
+
expect(artist).to receive(:after_add_label).and_raise
|
|
3581
3612
|
end
|
|
3582
3613
|
|
|
3583
3614
|
it "adds the document to the relation" do
|
|
@@ -3638,7 +3669,7 @@ describe Mongoid::Relations::Embedded::Many do
|
|
|
3638
3669
|
context "when errors are raised" do
|
|
3639
3670
|
|
|
3640
3671
|
before do
|
|
3641
|
-
artist.
|
|
3672
|
+
expect(artist).to receive(:before_remove_song).and_raise
|
|
3642
3673
|
end
|
|
3643
3674
|
|
|
3644
3675
|
describe "#delete" do
|
|
@@ -3706,7 +3737,7 @@ describe Mongoid::Relations::Embedded::Many do
|
|
|
3706
3737
|
context "when errors are raised" do
|
|
3707
3738
|
|
|
3708
3739
|
before do
|
|
3709
|
-
artist.
|
|
3740
|
+
expect(artist).to receive(:after_remove_label).and_raise
|
|
3710
3741
|
end
|
|
3711
3742
|
|
|
3712
3743
|
describe "#delete" do
|
|
@@ -82,7 +82,7 @@ describe Mongoid::Relations::Metadata do
|
|
|
82
82
|
end
|
|
83
83
|
|
|
84
84
|
before do
|
|
85
|
-
metadata.
|
|
85
|
+
expect(metadata).to receive(:inverse).and_return(:wheels)
|
|
86
86
|
end
|
|
87
87
|
|
|
88
88
|
it "returns inverse name + _count" do
|
|
@@ -315,11 +315,11 @@ describe Mongoid::Relations::Metadata do
|
|
|
315
315
|
end
|
|
316
316
|
|
|
317
317
|
before do
|
|
318
|
-
Mongoid::Relations::Options.
|
|
318
|
+
expect(Mongoid::Relations::Options).to receive(:validate!).at_least(:once)
|
|
319
319
|
end
|
|
320
320
|
|
|
321
321
|
it "concatenates the result from #find_module and name.classify" do
|
|
322
|
-
metadata.
|
|
322
|
+
expect(metadata).to receive(:find_module).once.and_return("Fruit")
|
|
323
323
|
expect(classified).to eq("Fruit::Name")
|
|
324
324
|
end
|
|
325
325
|
end
|
|
@@ -339,7 +339,7 @@ describe Mongoid::Relations::Metadata do
|
|
|
339
339
|
end
|
|
340
340
|
|
|
341
341
|
before do
|
|
342
|
-
Mongoid::Relations::Options.
|
|
342
|
+
expect(Mongoid::Relations::Options).to receive(:validate!).at_least(:once)
|
|
343
343
|
end
|
|
344
344
|
|
|
345
345
|
context "when inverse_class_name is nil" do
|
|
@@ -390,7 +390,7 @@ describe Mongoid::Relations::Metadata do
|
|
|
390
390
|
end
|
|
391
391
|
|
|
392
392
|
it "returns root namespace" do
|
|
393
|
-
expect(mod).to
|
|
393
|
+
expect(mod).to be_nil
|
|
394
394
|
end
|
|
395
395
|
end
|
|
396
396
|
|
|
@@ -1812,19 +1812,38 @@ describe Mongoid::Relations::Metadata do
|
|
|
1812
1812
|
|
|
1813
1813
|
context "when multiple matches" do
|
|
1814
1814
|
|
|
1815
|
-
|
|
1816
|
-
|
|
1817
|
-
|
|
1815
|
+
context "when the inverse_of is not nil" do
|
|
1816
|
+
|
|
1817
|
+
before do
|
|
1818
|
+
class_name.constantize.has_many(:evil_drugs, class_name: "Drug")
|
|
1819
|
+
end
|
|
1820
|
+
|
|
1821
|
+
after do
|
|
1822
|
+
class_name.constantize.relations.delete("evil_drugs")
|
|
1823
|
+
Person.reset_callbacks(:validate)
|
|
1824
|
+
end
|
|
1818
1825
|
|
|
1819
|
-
|
|
1820
|
-
|
|
1821
|
-
|
|
1826
|
+
it "raises AmbiguousRelationship" do
|
|
1827
|
+
expect {
|
|
1828
|
+
inverse_relation
|
|
1829
|
+
}.to raise_error(Mongoid::Errors::AmbiguousRelationship)
|
|
1830
|
+
end
|
|
1822
1831
|
end
|
|
1823
1832
|
|
|
1824
|
-
|
|
1825
|
-
|
|
1826
|
-
|
|
1827
|
-
|
|
1833
|
+
context "when the inverse_of is nil" do
|
|
1834
|
+
|
|
1835
|
+
before do
|
|
1836
|
+
class_name.constantize.has_many(:evil_drugs, class_name: "Drug", inverse_of: nil)
|
|
1837
|
+
end
|
|
1838
|
+
|
|
1839
|
+
after do
|
|
1840
|
+
class_name.constantize.relations.delete("evil_drugs")
|
|
1841
|
+
Person.reset_callbacks(:validate)
|
|
1842
|
+
end
|
|
1843
|
+
|
|
1844
|
+
it "returns the non-nil inverses" do
|
|
1845
|
+
expect(inverse_relation).to eq(:drugs)
|
|
1846
|
+
end
|
|
1828
1847
|
end
|
|
1829
1848
|
end
|
|
1830
1849
|
end
|
|
@@ -3286,7 +3286,7 @@ describe Mongoid::Relations::Referenced::Many do
|
|
|
3286
3286
|
context "when execution raises errors" do
|
|
3287
3287
|
|
|
3288
3288
|
before do
|
|
3289
|
-
artist.
|
|
3289
|
+
expect(artist).to receive(:before_add_album).and_raise
|
|
3290
3290
|
end
|
|
3291
3291
|
|
|
3292
3292
|
it "does not add the document to the relation" do
|
|
@@ -3316,7 +3316,7 @@ describe Mongoid::Relations::Referenced::Many do
|
|
|
3316
3316
|
context "when execution raises errors" do
|
|
3317
3317
|
|
|
3318
3318
|
before do
|
|
3319
|
-
artist.
|
|
3319
|
+
expect(artist).to receive(:after_add_album).and_raise
|
|
3320
3320
|
end
|
|
3321
3321
|
|
|
3322
3322
|
it "adds the document to the relation" do
|
|
@@ -3377,7 +3377,7 @@ describe Mongoid::Relations::Referenced::Many do
|
|
|
3377
3377
|
context "when execution raises errors" do
|
|
3378
3378
|
|
|
3379
3379
|
before do
|
|
3380
|
-
artist.
|
|
3380
|
+
expect(artist).to receive(:before_remove_album).and_raise
|
|
3381
3381
|
end
|
|
3382
3382
|
|
|
3383
3383
|
describe "#delete" do
|
|
@@ -3452,7 +3452,7 @@ describe Mongoid::Relations::Referenced::Many do
|
|
|
3452
3452
|
context "when errors are raised" do
|
|
3453
3453
|
|
|
3454
3454
|
before do
|
|
3455
|
-
artist.
|
|
3455
|
+
expect(artist).to receive(:after_remove_album).and_raise
|
|
3456
3456
|
end
|
|
3457
3457
|
|
|
3458
3458
|
describe "#delete" do
|
|
@@ -3505,4 +3505,19 @@ describe Mongoid::Relations::Referenced::Many do
|
|
|
3505
3505
|
expect(criteria).to eq([ post_two, post_one ])
|
|
3506
3506
|
end
|
|
3507
3507
|
end
|
|
3508
|
+
|
|
3509
|
+
context "when accessing a scope named open" do
|
|
3510
|
+
|
|
3511
|
+
let(:person) do
|
|
3512
|
+
Person.create
|
|
3513
|
+
end
|
|
3514
|
+
|
|
3515
|
+
let!(:post) do
|
|
3516
|
+
person.posts.create(title: "open")
|
|
3517
|
+
end
|
|
3518
|
+
|
|
3519
|
+
it "returns the appropriate documents" do
|
|
3520
|
+
expect(person.posts.open).to eq([ post ])
|
|
3521
|
+
end
|
|
3522
|
+
end
|
|
3508
3523
|
end
|