mongoid 5.0.0 → 5.0.1
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
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +2 -0
- data/CHANGELOG.md +54 -2
- data/lib/config/locales/en.yml +1 -1
- data/lib/mongoid/attributes.rb +1 -1
- data/lib/mongoid/clients.rb +7 -4
- data/lib/mongoid/clients/options.rb +2 -2
- data/lib/mongoid/contextual/aggregable/mongo.rb +2 -1
- data/lib/mongoid/contextual/geo_near.rb +1 -1
- data/lib/mongoid/contextual/memory.rb +4 -1
- data/lib/mongoid/contextual/mongo.rb +4 -5
- data/lib/mongoid/document.rb +1 -0
- data/lib/mongoid/indexable/specification.rb +3 -5
- data/lib/mongoid/indexable/validators/options.rb +7 -1
- data/lib/mongoid/matchable/exists.rb +1 -1
- data/lib/mongoid/persistable.rb +2 -1
- data/lib/mongoid/persistable/creatable.rb +1 -1
- data/lib/mongoid/persistable/deletable.rb +1 -1
- data/lib/mongoid/persistable/updatable.rb +2 -2
- data/lib/mongoid/positional.rb +75 -0
- data/lib/mongoid/relations/counter_cache.rb +19 -0
- data/lib/mongoid/relations/eager/base.rb +4 -2
- data/lib/mongoid/relations/embedded/batchable.rb +10 -3
- data/lib/mongoid/relations/proxy.rb +1 -1
- data/lib/mongoid/relations/touchable.rb +1 -1
- data/lib/mongoid/scopable.rb +6 -5
- data/lib/mongoid/selectable.rb +36 -1
- data/lib/mongoid/threaded.rb +34 -2
- data/lib/mongoid/timestamps/created.rb +1 -2
- data/lib/mongoid/timestamps/timeless.rb +19 -2
- data/lib/mongoid/timestamps/updated.rb +1 -1
- data/lib/mongoid/traversable.rb +1 -1
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +3 -1
- data/spec/app/models/account.rb +8 -0
- data/spec/app/models/answer.rb +2 -0
- data/spec/app/models/article.rb +2 -0
- data/spec/app/models/author.rb +2 -0
- data/spec/app/models/baby.rb +4 -0
- data/spec/app/models/book.rb +2 -0
- data/spec/app/models/consumption_period.rb +7 -0
- data/spec/app/models/exhibitor.rb +1 -0
- data/spec/app/models/kaleidoscope.rb +6 -0
- data/spec/app/models/kangaroo.rb +4 -0
- data/spec/app/models/note.rb +3 -0
- data/spec/app/models/page.rb +11 -0
- data/spec/app/models/simple.rb +5 -0
- data/spec/config/mongoid.yml +3 -1
- data/spec/mongoid/atomic/paths_spec.rb +17 -10
- data/spec/mongoid/attributes_spec.rb +2 -2
- data/spec/mongoid/clients/options_spec.rb +15 -0
- data/spec/mongoid/clients_spec.rb +6 -2
- data/spec/mongoid/config_spec.rb +3 -2
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +25 -2
- data/spec/mongoid/contextual/atomic_spec.rb +6 -6
- data/spec/mongoid/contextual/mongo_spec.rb +28 -75
- data/spec/mongoid/criteria_spec.rb +54 -0
- data/spec/mongoid/fields/standard_spec.rb +1 -1
- data/spec/mongoid/fields_spec.rb +1 -1
- data/spec/mongoid/indexable/specification_spec.rb +1 -1
- data/spec/mongoid/indexable_spec.rb +7 -7
- data/spec/mongoid/interceptable_spec.rb +55 -0
- data/spec/mongoid/persistable/creatable_spec.rb +19 -0
- data/spec/mongoid/persistable/destroyable_spec.rb +50 -0
- data/spec/mongoid/persistable/incrementable_spec.rb +56 -4
- data/spec/mongoid/persistable/pushable_spec.rb +11 -0
- data/spec/mongoid/persistable/savable_spec.rb +20 -2
- data/spec/mongoid/positional_spec.rb +221 -0
- data/spec/mongoid/query_cache_spec.rb +19 -0
- data/spec/mongoid/relations/auto_save_spec.rb +1 -1
- data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +1 -1
- data/spec/mongoid/relations/counter_cache_spec.rb +64 -11
- data/spec/mongoid/relations/eager/has_many_spec.rb +37 -0
- data/spec/mongoid/relations/eager_spec.rb +11 -0
- data/spec/mongoid/relations/embedded/many_spec.rb +38 -9
- data/spec/mongoid/relations/embedded/one_spec.rb +1 -1
- data/spec/mongoid/relations/proxy_spec.rb +22 -0
- data/spec/mongoid/relations/reflections_spec.rb +1 -1
- data/spec/mongoid/scopable_spec.rb +160 -19
- data/spec/mongoid/selectable_spec.rb +16 -6
- data/spec/mongoid/timestamps/timeless_spec.rb +17 -0
- data/spec/mongoid/validatable/uniqueness_spec.rb +17 -0
- metadata +40 -5
- metadata.gz.sig +3 -0
@@ -123,6 +123,25 @@ describe Mongoid::QueryCache do
|
|
123
123
|
end
|
124
124
|
end
|
125
125
|
end
|
126
|
+
|
127
|
+
context "when query caching is enabled and the batch_size is set" do
|
128
|
+
|
129
|
+
around(:each) do |example|
|
130
|
+
query_cache_enabled = Mongoid::QueryCache.enabled?
|
131
|
+
Mongoid::QueryCache.enabled = true
|
132
|
+
example.run
|
133
|
+
Mongoid::QueryCache.enabled = query_cache_enabled
|
134
|
+
end
|
135
|
+
|
136
|
+
it "does not raise an error when requesting the second batch" do
|
137
|
+
expect {
|
138
|
+
Band.batch_size(4).where(:views.gte => 0).each do |doc|
|
139
|
+
doc.set(likes: Random.rand(100))
|
140
|
+
end
|
141
|
+
}.not_to raise_error
|
142
|
+
end
|
143
|
+
|
144
|
+
end
|
126
145
|
end
|
127
146
|
|
128
147
|
context "when querying in different collection" do
|
@@ -219,7 +219,7 @@ describe Mongoid::Relations::AutoSave do
|
|
219
219
|
end
|
220
220
|
end
|
221
221
|
|
222
|
-
context "when it has two
|
222
|
+
context "when it has two relations with autosaves" do
|
223
223
|
|
224
224
|
before do
|
225
225
|
Person.autosave(Person.relations["drugs"].merge!(autosave: true))
|
@@ -112,7 +112,7 @@ describe Mongoid::Relations::Bindings::Referenced::ManyToMany do
|
|
112
112
|
binding.bind_one(target.first)
|
113
113
|
end
|
114
114
|
|
115
|
-
it "never performs a
|
115
|
+
it "never performs a persistence operation" do
|
116
116
|
expect(person).to receive(:delete).never
|
117
117
|
expect(person).to receive(:save).never
|
118
118
|
expect(preference).to receive(:delete).never
|
@@ -290,27 +290,80 @@ describe Mongoid::Relations::CounterCache do
|
|
290
290
|
|
291
291
|
describe "#add_counter_cache_callbacks" do
|
292
292
|
|
293
|
-
|
294
|
-
Person.create
|
295
|
-
end
|
293
|
+
context "when parent is not frozen" do
|
296
294
|
|
297
|
-
|
298
|
-
person.drugs.create
|
299
|
-
end
|
295
|
+
context 'when #destroy is called on the object' do
|
300
296
|
|
301
|
-
|
297
|
+
let(:person) do
|
298
|
+
Person.create
|
299
|
+
end
|
302
300
|
|
303
|
-
|
304
|
-
|
301
|
+
let!(:drug) do
|
302
|
+
person.drugs.create
|
303
|
+
end
|
304
|
+
|
305
|
+
before do
|
306
|
+
drug.destroy
|
307
|
+
end
|
308
|
+
|
309
|
+
it "updates the counter cache" do
|
310
|
+
expect(person.drugs_count).to eq(0)
|
311
|
+
end
|
305
312
|
end
|
306
313
|
|
307
|
-
|
308
|
-
|
314
|
+
context 'when #create is called on the object' do
|
315
|
+
|
316
|
+
let(:person) do
|
317
|
+
Person.create { |p| p.drugs += [Drug.create, Drug.create] }
|
318
|
+
end
|
319
|
+
|
320
|
+
it "updates the counter cache" do
|
321
|
+
expect(person.drugs_count).to eq(2)
|
322
|
+
end
|
323
|
+
end
|
324
|
+
|
325
|
+
context 'when #update is called on the object' do
|
326
|
+
|
327
|
+
let(:person1) do
|
328
|
+
Person.create { |p| p.drugs += [Drug.create, Drug.create] }
|
329
|
+
end
|
330
|
+
|
331
|
+
let(:drug) do
|
332
|
+
person1.drugs.first
|
333
|
+
end
|
334
|
+
|
335
|
+
let(:person2) do
|
336
|
+
Person.create
|
337
|
+
end
|
338
|
+
|
339
|
+
before do
|
340
|
+
drug.update_attribute(:person, person2)
|
341
|
+
end
|
342
|
+
|
343
|
+
it "updates the current counter cache" do
|
344
|
+
expect(drug.person.drugs_count).to eq(1)
|
345
|
+
end
|
346
|
+
|
347
|
+
it "updates the current counter cache" do
|
348
|
+
expect(person2.drugs_count).to eq(1)
|
349
|
+
end
|
350
|
+
|
351
|
+
it "updates the original object's counter cache" do
|
352
|
+
expect(person1.reload.drugs_count).to eq(1)
|
353
|
+
end
|
309
354
|
end
|
310
355
|
end
|
311
356
|
|
312
357
|
context "when parent is frozen" do
|
313
358
|
|
359
|
+
let(:person) do
|
360
|
+
Person.create
|
361
|
+
end
|
362
|
+
|
363
|
+
let!(:drug) do
|
364
|
+
person.drugs.create
|
365
|
+
end
|
366
|
+
|
314
367
|
before do
|
315
368
|
person.destroy
|
316
369
|
drug.destroy
|
@@ -177,6 +177,43 @@ describe Mongoid::Relations::Eager::HasMany do
|
|
177
177
|
expect(eager.last.ivar(:posts)).to be_empty
|
178
178
|
end
|
179
179
|
end
|
180
|
+
|
181
|
+
context "when the child has a default scope" do
|
182
|
+
|
183
|
+
let(:criteria) do
|
184
|
+
Exhibitor.where(:status.ne => "removed")
|
185
|
+
end
|
186
|
+
|
187
|
+
let(:exhibitorPresent) do
|
188
|
+
Exhibitor.create!(status: "present")
|
189
|
+
end
|
190
|
+
|
191
|
+
let(:exhibitorRemoved) do
|
192
|
+
Exhibitor.create!(status: "removed")
|
193
|
+
end
|
194
|
+
|
195
|
+
let(:exhibitionIncludesExhibitors) do
|
196
|
+
Exhibition.includes(:exhibitors).first
|
197
|
+
end
|
198
|
+
|
199
|
+
before do
|
200
|
+
Exhibitor.default_scope ->{ criteria }
|
201
|
+
exhibition = Exhibition.create!
|
202
|
+
exhibition.exhibitors << exhibitorPresent
|
203
|
+
exhibition.exhibitors << exhibitorRemoved
|
204
|
+
exhibitionIncludesExhibitors
|
205
|
+
end
|
206
|
+
|
207
|
+
after do
|
208
|
+
Exhibitor.default_scoping = nil
|
209
|
+
end
|
210
|
+
|
211
|
+
it "does not send another query when the children are accessed" do
|
212
|
+
expect_query(0) do
|
213
|
+
expect(exhibitionIncludesExhibitors.exhibitors).to eq( [exhibitorPresent] )
|
214
|
+
end
|
215
|
+
end
|
216
|
+
end
|
180
217
|
end
|
181
218
|
|
182
219
|
context "when the relation is polymorphic" do
|
@@ -131,6 +131,17 @@ describe Mongoid::Relations::Eager do
|
|
131
131
|
|
132
132
|
context.eager_load(docs)
|
133
133
|
end
|
134
|
+
|
135
|
+
context 'when combined with a #find_by' do
|
136
|
+
|
137
|
+
let!(:person) do
|
138
|
+
Person.create!(title: 'manager')
|
139
|
+
end
|
140
|
+
|
141
|
+
it 'executes the find_by' do
|
142
|
+
expect(criteria.find_by(title: 'manager')).to eq(person)
|
143
|
+
end
|
144
|
+
end
|
134
145
|
end
|
135
146
|
|
136
147
|
context "when including multiple relations" do
|
@@ -2748,26 +2748,55 @@ describe Mongoid::Relations::Embedded::Many do
|
|
2748
2748
|
end
|
2749
2749
|
|
2750
2750
|
let!(:location) do
|
2751
|
-
address.locations.create(name: "
|
2751
|
+
address.locations.create(name: "vacation", number: 0)
|
2752
|
+
address.locations.create(name: "work", number: 3)
|
2752
2753
|
end
|
2753
2754
|
|
2754
|
-
context "when updating with
|
2755
|
+
context "when updating with replacement of embedded array" do
|
2756
|
+
|
2757
|
+
context "when updating with a hash" do
|
2758
|
+
|
2759
|
+
before do
|
2760
|
+
address.update_attributes(locations: [{ name: "home" }])
|
2761
|
+
end
|
2762
|
+
|
2763
|
+
it "updates the attributes" do
|
2764
|
+
expect(address.locations.first.name).to eq("home")
|
2765
|
+
end
|
2766
|
+
|
2767
|
+
it "overwrites the existing documents" do
|
2768
|
+
expect(address.locations.count).to eq(1)
|
2769
|
+
end
|
2770
|
+
|
2771
|
+
it "persists the changes" do
|
2772
|
+
expect(address.reload.locations.count).to eq(1)
|
2773
|
+
end
|
2774
|
+
end
|
2775
|
+
end
|
2776
|
+
|
2777
|
+
context "when updating a field in a document of the embedded array" do
|
2755
2778
|
|
2756
2779
|
before do
|
2757
|
-
|
2780
|
+
location.number = 7
|
2781
|
+
location.save
|
2758
2782
|
end
|
2759
2783
|
|
2760
|
-
|
2761
|
-
|
2784
|
+
let(:updated_location_number) do
|
2785
|
+
person.reload.addresses.first.locations.find(location.id).number
|
2762
2786
|
end
|
2763
2787
|
|
2764
|
-
|
2765
|
-
|
2788
|
+
let(:updated_location_name) do
|
2789
|
+
person.reload.addresses.first.locations.find(location.id).name
|
2766
2790
|
end
|
2767
2791
|
|
2768
|
-
it "
|
2769
|
-
expect(
|
2792
|
+
it "the change is persisted" do
|
2793
|
+
expect(updated_location_number).to eq(7)
|
2794
|
+
end
|
2795
|
+
|
2796
|
+
it "the other field remains unaffected" do
|
2797
|
+
expect(updated_location_name).to eq("work")
|
2770
2798
|
end
|
2799
|
+
|
2771
2800
|
end
|
2772
2801
|
end
|
2773
2802
|
|
@@ -2,6 +2,28 @@ require "spec_helper"
|
|
2
2
|
|
3
3
|
describe Mongoid::Relations::Proxy do
|
4
4
|
|
5
|
+
describe '#with', if: non_legacy_server? do
|
6
|
+
|
7
|
+
let(:circus) do
|
8
|
+
Circus.new
|
9
|
+
end
|
10
|
+
|
11
|
+
let(:animal) do
|
12
|
+
Animal.new
|
13
|
+
end
|
14
|
+
|
15
|
+
before do
|
16
|
+
circus.animals << animal
|
17
|
+
circus.save
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'uses the new persistence options' do
|
21
|
+
expect {
|
22
|
+
animal.with(write: { w: 100 }).update_attribute(:name, 'kangaroo')
|
23
|
+
}.to raise_exception(Mongo::Error::OperationFailure)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
5
27
|
describe "#find" do
|
6
28
|
let(:person) do
|
7
29
|
Person.create
|
@@ -51,7 +51,7 @@ describe Mongoid::Scopable do
|
|
51
51
|
end
|
52
52
|
|
53
53
|
let(:rand_criteria) do
|
54
|
-
->{ Band.gt(likes:
|
54
|
+
->{ Band.gt(likes: Mongo::Monitoring.next_operation_id) }
|
55
55
|
end
|
56
56
|
|
57
57
|
before do
|
@@ -143,16 +143,34 @@ describe Mongoid::Scopable do
|
|
143
143
|
Band.where(name: "Depeche Mode")
|
144
144
|
end
|
145
145
|
|
146
|
-
|
147
|
-
Mongoid::Threaded.current_scope = criteria
|
148
|
-
end
|
146
|
+
context "when using #current_scope=scope" do
|
149
147
|
|
150
|
-
|
151
|
-
|
148
|
+
before do
|
149
|
+
Mongoid::Threaded.current_scope = criteria
|
150
|
+
end
|
151
|
+
|
152
|
+
after do
|
153
|
+
Mongoid::Threaded.current_scope = nil
|
154
|
+
end
|
155
|
+
|
156
|
+
it "returns the criteria on the stack" do
|
157
|
+
expect(Band.queryable).to eq(criteria)
|
158
|
+
end
|
152
159
|
end
|
153
160
|
|
154
|
-
|
155
|
-
|
161
|
+
context "when using #set_current_scope(scope, klass)" do
|
162
|
+
|
163
|
+
before do
|
164
|
+
Mongoid::Threaded.set_current_scope(criteria, Band)
|
165
|
+
end
|
166
|
+
|
167
|
+
after do
|
168
|
+
Mongoid::Threaded.set_current_scope(nil, Band)
|
169
|
+
end
|
170
|
+
|
171
|
+
it "returns the criteria on the stack" do
|
172
|
+
expect(Band.queryable).to eq(criteria)
|
173
|
+
end
|
156
174
|
end
|
157
175
|
end
|
158
176
|
end
|
@@ -398,6 +416,45 @@ describe Mongoid::Scopable do
|
|
398
416
|
end
|
399
417
|
end
|
400
418
|
|
419
|
+
context 'when the block is an none scope' do
|
420
|
+
|
421
|
+
before do
|
422
|
+
Simple.create!(name: 'Emily')
|
423
|
+
end
|
424
|
+
|
425
|
+
context 'when there is no default scope' do
|
426
|
+
|
427
|
+
before do
|
428
|
+
Simple.scope(:nothing, ->{ none })
|
429
|
+
end
|
430
|
+
|
431
|
+
it 'returns no results' do
|
432
|
+
expect(Simple.nothing).to be_empty
|
433
|
+
end
|
434
|
+
end
|
435
|
+
|
436
|
+
context 'when there is a default scope' do
|
437
|
+
|
438
|
+
let(:criteria) do
|
439
|
+
Simple.where(name: "Emily")
|
440
|
+
end
|
441
|
+
|
442
|
+
before do
|
443
|
+
Simple.default_scope ->{ criteria }
|
444
|
+
Simple.scope(:nothing, ->{ none })
|
445
|
+
end
|
446
|
+
|
447
|
+
after do
|
448
|
+
Simple.default_scoping = nil
|
449
|
+
end
|
450
|
+
|
451
|
+
it 'returns no results' do
|
452
|
+
expect(Simple.nothing).to be_empty
|
453
|
+
end
|
454
|
+
end
|
455
|
+
|
456
|
+
end
|
457
|
+
|
401
458
|
context "when no block is provided" do
|
402
459
|
|
403
460
|
before do
|
@@ -509,6 +566,58 @@ describe Mongoid::Scopable do
|
|
509
566
|
expect(criteria.selector).to eq({ "origin" => "England" })
|
510
567
|
end
|
511
568
|
end
|
569
|
+
|
570
|
+
context "when chaining scopes through more than one model" do
|
571
|
+
|
572
|
+
before do
|
573
|
+
Author.scope(:author, -> { where(author: true) } )
|
574
|
+
Article.scope(:is_public, -> { where(public: true) } )
|
575
|
+
Article.scope(:authored, -> {
|
576
|
+
author_ids = Author.author.pluck(:id)
|
577
|
+
where(:author_id.in => author_ids)
|
578
|
+
})
|
579
|
+
|
580
|
+
Author.create(author: true, id: 1)
|
581
|
+
Author.create(author: true, id: 2)
|
582
|
+
Author.create(author: true, id: 3)
|
583
|
+
Article.create(author_id: 1, public: true)
|
584
|
+
Article.create(author_id: 2, public: true)
|
585
|
+
Article.create(author_id: 3, public: false)
|
586
|
+
end
|
587
|
+
|
588
|
+
after do
|
589
|
+
class << Article
|
590
|
+
undef_method :is_public
|
591
|
+
undef_method :authored
|
592
|
+
end
|
593
|
+
Article._declared_scopes.clear
|
594
|
+
class << Author
|
595
|
+
undef_method :author
|
596
|
+
end
|
597
|
+
Author._declared_scopes.clear
|
598
|
+
end
|
599
|
+
|
600
|
+
context "when calling another model's scope from within a scope" do
|
601
|
+
|
602
|
+
let(:authored_count) do
|
603
|
+
Article.authored.size
|
604
|
+
end
|
605
|
+
|
606
|
+
it "returns the correct documents" do
|
607
|
+
expect(authored_count).to eq(3)
|
608
|
+
end
|
609
|
+
end
|
610
|
+
|
611
|
+
context "when calling another model's scope from within a chained scope" do
|
612
|
+
let(:is_public_authored_count) do
|
613
|
+
Article.is_public.authored.size
|
614
|
+
end
|
615
|
+
|
616
|
+
it "returns the correct documents" do
|
617
|
+
expect(is_public_authored_count).to eq(2)
|
618
|
+
end
|
619
|
+
end
|
620
|
+
end
|
512
621
|
end
|
513
622
|
end
|
514
623
|
|
@@ -784,17 +893,38 @@ describe Mongoid::Scopable do
|
|
784
893
|
|
785
894
|
context "when default scope is in a super class" do
|
786
895
|
|
787
|
-
|
788
|
-
Band.scope(:active, ->{ Band.where(active: true) })
|
789
|
-
end
|
896
|
+
context "when scope is already defined in parent class" do
|
790
897
|
|
791
|
-
|
792
|
-
|
793
|
-
|
898
|
+
let(:unscoped) do
|
899
|
+
class U1 < Kaleidoscope; end
|
900
|
+
U1.unscoped.activated
|
901
|
+
end
|
902
|
+
|
903
|
+
it "clears default scope" do
|
904
|
+
expect(unscoped.selector).to eq({ "active" => true })
|
905
|
+
end
|
794
906
|
end
|
795
907
|
|
796
|
-
|
797
|
-
|
908
|
+
context "when the scope is created dynamically" do
|
909
|
+
|
910
|
+
before do
|
911
|
+
Band.scope(:active, ->{ Band.where(active: true) })
|
912
|
+
end
|
913
|
+
|
914
|
+
after do
|
915
|
+
class << Band
|
916
|
+
undef_method :active
|
917
|
+
end
|
918
|
+
end
|
919
|
+
|
920
|
+
let(:unscoped) do
|
921
|
+
class U2 < Band; end
|
922
|
+
U2.unscoped.active
|
923
|
+
end
|
924
|
+
|
925
|
+
it "clears default scope" do
|
926
|
+
expect(unscoped.selector).to eq({ "active" => true })
|
927
|
+
end
|
798
928
|
end
|
799
929
|
end
|
800
930
|
end
|
@@ -899,9 +1029,20 @@ describe Mongoid::Scopable do
|
|
899
1029
|
end
|
900
1030
|
end
|
901
1031
|
|
902
|
-
|
903
|
-
|
904
|
-
|
1032
|
+
context "when using #current_scope" do
|
1033
|
+
|
1034
|
+
it "pops the criteria off the stack" do
|
1035
|
+
Band.with_scope(criteria) do;end
|
1036
|
+
expect(Mongoid::Threaded.current_scope).to be_nil
|
1037
|
+
end
|
1038
|
+
end
|
1039
|
+
|
1040
|
+
context "when using #current_scope(klass)" do
|
1041
|
+
|
1042
|
+
it "pops the criteria off the stack" do
|
1043
|
+
Band.with_scope(criteria) do;end
|
1044
|
+
expect(Mongoid::Threaded.current_scope(Band)).to be_nil
|
1045
|
+
end
|
905
1046
|
end
|
906
1047
|
end
|
907
1048
|
|