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.
Files changed (100) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +30 -0
  3. data/README.md +1 -1
  4. data/lib/config/locales/en.yml +4 -6
  5. data/lib/mongoid/attributes/processing.rb +1 -1
  6. data/lib/mongoid/contextual.rb +2 -0
  7. data/lib/mongoid/contextual/map_reduce.rb +3 -1
  8. data/lib/mongoid/contextual/none.rb +90 -0
  9. data/lib/mongoid/criteria.rb +25 -0
  10. data/lib/mongoid/extensions/array.rb +1 -1
  11. data/lib/mongoid/extensions/big_decimal.rb +1 -1
  12. data/lib/mongoid/extensions/date.rb +1 -1
  13. data/lib/mongoid/extensions/date_time.rb +3 -3
  14. data/lib/mongoid/extensions/float.rb +1 -1
  15. data/lib/mongoid/extensions/hash.rb +1 -1
  16. data/lib/mongoid/extensions/integer.rb +1 -1
  17. data/lib/mongoid/extensions/object.rb +3 -3
  18. data/lib/mongoid/extensions/object_id.rb +1 -1
  19. data/lib/mongoid/extensions/range.rb +1 -1
  20. data/lib/mongoid/extensions/regexp.rb +1 -1
  21. data/lib/mongoid/extensions/set.rb +1 -1
  22. data/lib/mongoid/extensions/string.rb +1 -1
  23. data/lib/mongoid/extensions/symbol.rb +1 -1
  24. data/lib/mongoid/extensions/time.rb +1 -1
  25. data/lib/mongoid/extensions/time_with_zone.rb +1 -1
  26. data/lib/mongoid/findable.rb +1 -0
  27. data/lib/mongoid/interceptable.rb +4 -2
  28. data/lib/mongoid/persistable.rb +4 -3
  29. data/lib/mongoid/relations/embedded/many.rb +1 -1
  30. data/lib/mongoid/relations/metadata.rb +8 -4
  31. data/lib/mongoid/relations/referenced/many.rb +1 -1
  32. data/lib/mongoid/relations/touchable.rb +1 -1
  33. data/lib/mongoid/scopable.rb +2 -26
  34. data/lib/mongoid/validatable/uniqueness.rb +13 -0
  35. data/lib/mongoid/version.rb +1 -1
  36. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +0 -4
  37. data/spec/app/models/acolyte.rb +1 -1
  38. data/spec/app/models/address.rb +2 -2
  39. data/spec/app/models/appointment.rb +1 -1
  40. data/spec/app/models/audio.rb +1 -1
  41. data/spec/app/models/dog.rb +1 -1
  42. data/spec/app/models/event.rb +1 -1
  43. data/spec/app/models/house.rb +1 -1
  44. data/spec/app/models/message.rb +8 -0
  45. data/spec/app/models/person.rb +3 -2
  46. data/spec/app/models/player.rb +2 -2
  47. data/spec/app/models/post.rb +3 -2
  48. data/spec/app/models/preference.rb +1 -1
  49. data/spec/app/models/sound.rb +1 -1
  50. data/spec/app/models/symptom.rb +1 -1
  51. data/spec/app/models/tree.rb +2 -2
  52. data/spec/app/models/video.rb +1 -1
  53. data/spec/mongoid/attributes_spec.rb +3 -3
  54. data/spec/mongoid/changeable_spec.rb +3 -3
  55. data/spec/mongoid/contextual/mongo_spec.rb +14 -14
  56. data/spec/mongoid/contextual/none_spec.rb +127 -0
  57. data/spec/mongoid/criteria/scopable_spec.rb +6 -6
  58. data/spec/mongoid/criteria_spec.rb +52 -96
  59. data/spec/mongoid/errors/invalid_scope_spec.rb +2 -2
  60. data/spec/mongoid/errors/mongoid_error_spec.rb +1 -1
  61. data/spec/mongoid/extensions/date_time_spec.rb +1 -1
  62. data/spec/mongoid/fields_spec.rb +6 -7
  63. data/spec/mongoid/findable_spec.rb +65 -0
  64. data/spec/mongoid/interceptable_spec.rb +11 -11
  65. data/spec/mongoid/persistable_spec.rb +4 -4
  66. data/spec/mongoid/relations/auto_save_spec.rb +1 -1
  67. data/spec/mongoid/relations/bindings/embedded/in_spec.rb +5 -5
  68. data/spec/mongoid/relations/bindings/embedded/many_spec.rb +1 -1
  69. data/spec/mongoid/relations/bindings/embedded/one_spec.rb +2 -2
  70. data/spec/mongoid/relations/bindings/referenced/in_spec.rb +14 -14
  71. data/spec/mongoid/relations/bindings/referenced/many_spec.rb +4 -4
  72. data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +10 -10
  73. data/spec/mongoid/relations/bindings/referenced/one_spec.rb +6 -6
  74. data/spec/mongoid/relations/builders/referenced/in_spec.rb +2 -2
  75. data/spec/mongoid/relations/builders/referenced/one_spec.rb +1 -1
  76. data/spec/mongoid/relations/cascading/delete_spec.rb +2 -2
  77. data/spec/mongoid/relations/cascading/destroy_spec.rb +4 -4
  78. data/spec/mongoid/relations/cascading/nullify_spec.rb +2 -2
  79. data/spec/mongoid/relations/cascading/restrict_spec.rb +4 -4
  80. data/spec/mongoid/relations/eager_spec.rb +6 -6
  81. data/spec/mongoid/relations/embedded/many_spec.rb +36 -5
  82. data/spec/mongoid/relations/metadata_spec.rb +34 -15
  83. data/spec/mongoid/relations/referenced/many_spec.rb +19 -4
  84. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +7 -7
  85. data/spec/mongoid/relations/referenced/one_spec.rb +1 -1
  86. data/spec/mongoid/relations/targets/enumerable_spec.rb +2 -2
  87. data/spec/mongoid/relations/touchable_spec.rb +17 -0
  88. data/spec/mongoid/scopable_spec.rb +17 -40
  89. data/spec/mongoid/sessions/options_spec.rb +1 -1
  90. data/spec/mongoid/timestamps/timeless_spec.rb +6 -6
  91. data/spec/mongoid/timestamps/updated/short_spec.rb +1 -1
  92. data/spec/mongoid/timestamps/updated_spec.rb +1 -1
  93. data/spec/mongoid/timestamps_spec.rb +2 -2
  94. data/spec/mongoid/validatable/associated_spec.rb +4 -4
  95. data/spec/mongoid/validatable/length_spec.rb +7 -7
  96. data/spec/mongoid/validatable/presence_spec.rb +6 -6
  97. data/spec/mongoid/validatable/uniqueness_spec.rb +44 -3
  98. data/spec/rails/mongoid_spec.rb +20 -20
  99. data/spec/spec_helper.rb +1 -0
  100. 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.should_receive(:save).never
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.should_receive(:save).never
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.should_receive(:<<).never
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.should_receive(:delete).never
88
- preference.should_receive(:delete).never
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.should_receive(:delete).never
117
- person.should_receive(:save).never
118
- preference.should_receive(:delete).never
119
- preference.should_receive(:save).never
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.should_receive(:preferences=).never
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.should_receive(:save).never
27
- game.should_receive(:save).never
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.should_receive(:game=).never
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.should_receive(:delete).never
64
- game.should_receive(:delete).never
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.should_receive(:game=).never
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.should_receive(:first).and_return(person)
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.should_receive(:first).and_return(person)
86
+ expect(criteria).to receive(:first).and_return(person)
87
87
  end
88
88
 
89
89
  let!(:document) do
@@ -41,7 +41,7 @@ describe Mongoid::Relations::Builders::Referenced::One do
41
41
  end
42
42
 
43
43
  before do
44
- criteria.should_receive(:first).and_return(post)
44
+ expect(criteria).to receive(:first).and_return(post)
45
45
  end
46
46
 
47
47
  let!(:documents) 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.should_receive(:delete).never
63
- post_two.should_receive(:delete).never
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.should_receive(:posts).and_return([ post ])
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.should_receive(:destroy)
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.should_receive(:posts).and_return([])
38
+ expect(person).to receive(:posts).and_return([])
39
39
  end
40
40
 
41
41
  it "does not destroy anything" do
42
- post.should_receive(:destroy).never
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.should_receive(:posts).and_return(relation)
24
+ expect(person).to receive(:posts).and_return(relation)
25
25
  end
26
26
 
27
27
  it "nullifies the relation" do
28
- relation.should_receive(:nullify)
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.should_receive(:drugs).and_return([ ])
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.should_receive(:drugs).and_return([ drug ])
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.should_receive(:drugs).and_return([])
59
+ expect(person).to receive(:drugs).and_return([])
60
60
  end
61
61
 
62
62
  it "doesn't delete anything" do
63
- drug.should_receive(:delete).never
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.should_receive(:person_id).once
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.should_receive(:new).with([posts_metadata], docs).once.and_call_original
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.should_receive(:new).with([posts_metadata], docs).once.and_call_original
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.should_receive(:new).with([cat_metadata], docs).once.and_call_original
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.should_receive(:new).with([houses_metadata], docs).once.and_call_original
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.should_receive(:new).with([book_metadata, cat_metadata], docs).once.and_call_original
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.should_not_receive(:batch_insert)
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.should_receive(:before_add_song).and_raise
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.should_receive(:after_add_label).and_raise
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.should_receive(:before_remove_song).and_raise
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.should_receive(:after_remove_label).and_raise
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.should_receive(:inverse).and_return(:wheels)
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.should_receive(:validate!).at_least(:once)
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.should_receive(:find_module).once.and_return("Fruit")
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.should_receive(:validate!).at_least(:once)
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 be_empty
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
- before do
1816
- class_name.constantize.has_many(:evil_drugs, class_name: "Drug")
1817
- end
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
- after do
1820
- class_name.constantize.relations.delete("evil_drugs")
1821
- Person.reset_callbacks(:validate)
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
- it "raises AmbiguousRelationship" do
1825
- expect {
1826
- inverse_relation
1827
- }.to raise_error(Mongoid::Errors::AmbiguousRelationship)
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.should_receive(:before_add_album).and_raise
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.should_receive(:after_add_album).and_raise
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.should_receive(:before_remove_album).and_raise
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.should_receive(:after_remove_album).and_raise
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