mongoid 8.0.5 → 8.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (174) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +3 -3
  4. data/README.md +3 -3
  5. data/Rakefile +0 -25
  6. data/lib/config/locales/en.yml +46 -14
  7. data/lib/mongoid/association/accessors.rb +2 -2
  8. data/lib/mongoid/association/builders.rb +1 -1
  9. data/lib/mongoid/association/embedded/batchable.rb +2 -2
  10. data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -2
  11. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +2 -1
  12. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +3 -2
  13. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +6 -6
  14. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +1 -1
  15. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +1 -1
  16. data/lib/mongoid/association/nested/one.rb +40 -2
  17. data/lib/mongoid/association/proxy.rb +1 -1
  18. data/lib/mongoid/association/referenced/counter_cache.rb +2 -2
  19. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +1 -1
  20. data/lib/mongoid/association/referenced/has_many/enumerable.rb +2 -2
  21. data/lib/mongoid/association/referenced/has_many/proxy.rb +3 -3
  22. data/lib/mongoid/association/reflections.rb +2 -2
  23. data/lib/mongoid/atomic.rb +0 -7
  24. data/lib/mongoid/attributes/dynamic.rb +1 -1
  25. data/lib/mongoid/attributes/nested.rb +2 -2
  26. data/lib/mongoid/attributes/projector.rb +1 -1
  27. data/lib/mongoid/attributes/readonly.rb +1 -1
  28. data/lib/mongoid/attributes.rb +8 -2
  29. data/lib/mongoid/changeable.rb +107 -5
  30. data/lib/mongoid/clients/storage_options.rb +2 -5
  31. data/lib/mongoid/clients/validators/storage.rb +1 -13
  32. data/lib/mongoid/collection_configurable.rb +58 -0
  33. data/lib/mongoid/composable.rb +2 -0
  34. data/lib/mongoid/config/defaults.rb +60 -0
  35. data/lib/mongoid/config/validators/async_query_executor.rb +24 -0
  36. data/lib/mongoid/config/validators.rb +1 -0
  37. data/lib/mongoid/config.rb +101 -0
  38. data/lib/mongoid/contextual/atomic.rb +1 -1
  39. data/lib/mongoid/contextual/memory.rb +233 -33
  40. data/lib/mongoid/contextual/mongo/documents_loader.rb +177 -0
  41. data/lib/mongoid/contextual/mongo.rb +373 -113
  42. data/lib/mongoid/contextual/none.rb +162 -7
  43. data/lib/mongoid/contextual.rb +12 -0
  44. data/lib/mongoid/criteria/findable.rb +2 -2
  45. data/lib/mongoid/criteria/includable.rb +4 -3
  46. data/lib/mongoid/criteria/queryable/key.rb +1 -1
  47. data/lib/mongoid/criteria/queryable/mergeable.rb +1 -1
  48. data/lib/mongoid/criteria/queryable/optional.rb +8 -8
  49. data/lib/mongoid/criteria/queryable/selectable.rb +43 -12
  50. data/lib/mongoid/criteria.rb +6 -5
  51. data/lib/mongoid/deprecable.rb +1 -1
  52. data/lib/mongoid/errors/create_collection_failure.rb +33 -0
  53. data/lib/mongoid/errors/drop_collection_failure.rb +27 -0
  54. data/lib/mongoid/errors/immutable_attribute.rb +26 -0
  55. data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
  56. data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
  57. data/lib/mongoid/errors/invalid_storage_parent.rb +2 -0
  58. data/lib/mongoid/errors.rb +4 -1
  59. data/lib/mongoid/extensions/object.rb +2 -2
  60. data/lib/mongoid/extensions/time.rb +2 -0
  61. data/lib/mongoid/fields/localized.rb +10 -0
  62. data/lib/mongoid/fields/standard.rb +10 -0
  63. data/lib/mongoid/fields.rb +69 -13
  64. data/lib/mongoid/findable.rb +27 -3
  65. data/lib/mongoid/interceptable.rb +7 -6
  66. data/lib/mongoid/matcher/eq_impl.rb +1 -1
  67. data/lib/mongoid/matcher/type.rb +1 -1
  68. data/lib/mongoid/persistable/creatable.rb +1 -0
  69. data/lib/mongoid/persistable/deletable.rb +1 -1
  70. data/lib/mongoid/persistable/savable.rb +13 -1
  71. data/lib/mongoid/persistable/unsettable.rb +2 -2
  72. data/lib/mongoid/persistable/updatable.rb +51 -1
  73. data/lib/mongoid/persistable/upsertable.rb +20 -1
  74. data/lib/mongoid/persistable.rb +3 -0
  75. data/lib/mongoid/query_cache.rb +5 -1
  76. data/lib/mongoid/railties/database.rake +7 -2
  77. data/lib/mongoid/reloadable.rb +5 -3
  78. data/lib/mongoid/stateful.rb +22 -1
  79. data/lib/mongoid/tasks/database.rake +12 -0
  80. data/lib/mongoid/tasks/database.rb +20 -0
  81. data/lib/mongoid/utils.rb +22 -0
  82. data/lib/mongoid/validatable/macros.rb +5 -5
  83. data/lib/mongoid/validatable.rb +4 -1
  84. data/lib/mongoid/version.rb +1 -1
  85. data/lib/mongoid/warnings.rb +17 -1
  86. data/lib/mongoid.rb +16 -3
  87. data/spec/integration/app_spec.rb +2 -2
  88. data/spec/integration/callbacks_models.rb +37 -0
  89. data/spec/integration/callbacks_spec.rb +134 -0
  90. data/spec/integration/discriminator_key_spec.rb +4 -5
  91. data/spec/integration/i18n_fallbacks_spec.rb +3 -2
  92. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +27 -0
  93. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +20 -25
  94. data/spec/mongoid/association/embedded/embeds_many_models.rb +1 -0
  95. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +15 -2
  96. data/spec/mongoid/association/referenced/belongs_to_spec.rb +2 -18
  97. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +5 -27
  98. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +9 -50
  99. data/spec/mongoid/association/syncable_spec.rb +1 -1
  100. data/spec/mongoid/attributes_spec.rb +3 -6
  101. data/spec/mongoid/changeable_spec.rb +299 -24
  102. data/spec/mongoid/clients_spec.rb +122 -13
  103. data/spec/mongoid/collection_configurable_spec.rb +158 -0
  104. data/spec/mongoid/config/defaults_spec.rb +160 -0
  105. data/spec/mongoid/config_spec.rb +154 -18
  106. data/spec/mongoid/contextual/memory_spec.rb +332 -76
  107. data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +187 -0
  108. data/spec/mongoid/contextual/mongo_spec.rb +995 -36
  109. data/spec/mongoid/contextual/none_spec.rb +49 -2
  110. data/spec/mongoid/copyable_spec.rb +3 -11
  111. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +4 -10
  112. data/spec/mongoid/criteria/queryable/options_spec.rb +1 -1
  113. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +419 -0
  114. data/spec/mongoid/criteria/queryable/selectable_spec.rb +1 -1
  115. data/spec/mongoid/criteria/queryable/selector_spec.rb +1 -1
  116. data/spec/mongoid/criteria_projection_spec.rb +1 -4
  117. data/spec/mongoid/criteria_spec.rb +5 -9
  118. data/spec/mongoid/errors/readonly_document_spec.rb +2 -2
  119. data/spec/mongoid/extensions/time_spec.rb +8 -43
  120. data/spec/mongoid/extensions/time_with_zone_spec.rb +7 -52
  121. data/spec/mongoid/fields/localized_spec.rb +46 -28
  122. data/spec/mongoid/fields_spec.rb +136 -34
  123. data/spec/mongoid/findable_spec.rb +391 -34
  124. data/spec/mongoid/indexable_spec.rb +16 -10
  125. data/spec/mongoid/interceptable_spec.rb +15 -3
  126. data/spec/mongoid/persistable/deletable_spec.rb +26 -6
  127. data/spec/mongoid/persistable/destroyable_spec.rb +26 -6
  128. data/spec/mongoid/persistable/incrementable_spec.rb +37 -0
  129. data/spec/mongoid/persistable/logical_spec.rb +37 -0
  130. data/spec/mongoid/persistable/poppable_spec.rb +36 -0
  131. data/spec/mongoid/persistable/pullable_spec.rb +72 -0
  132. data/spec/mongoid/persistable/pushable_spec.rb +72 -0
  133. data/spec/mongoid/persistable/renamable_spec.rb +36 -0
  134. data/spec/mongoid/persistable/savable_spec.rb +96 -0
  135. data/spec/mongoid/persistable/settable_spec.rb +37 -0
  136. data/spec/mongoid/persistable/unsettable_spec.rb +36 -0
  137. data/spec/mongoid/persistable/updatable_spec.rb +20 -28
  138. data/spec/mongoid/persistable/upsertable_spec.rb +80 -6
  139. data/spec/mongoid/persistence_context_spec.rb +7 -57
  140. data/spec/mongoid/query_cache_spec.rb +56 -61
  141. data/spec/mongoid/reloadable_spec.rb +24 -28
  142. data/spec/mongoid/scopable_spec.rb +70 -0
  143. data/spec/mongoid/serializable_spec.rb +9 -30
  144. data/spec/mongoid/stateful_spec.rb +122 -8
  145. data/spec/mongoid/tasks/database_rake_spec.rb +74 -0
  146. data/spec/mongoid/tasks/database_spec.rb +127 -0
  147. data/spec/mongoid/timestamps_spec.rb +9 -11
  148. data/spec/mongoid/touchable_spec.rb +277 -5
  149. data/spec/mongoid/touchable_spec_models.rb +3 -1
  150. data/spec/mongoid/traversable_spec.rb +9 -24
  151. data/spec/mongoid/validatable/uniqueness_spec.rb +2 -3
  152. data/spec/mongoid_spec.rb +36 -10
  153. data/spec/shared/lib/mrss/docker_runner.rb +7 -0
  154. data/spec/shared/lib/mrss/event_subscriber.rb +15 -5
  155. data/spec/shared/lib/mrss/lite_constraints.rb +10 -2
  156. data/spec/shared/lib/mrss/server_version_registry.rb +16 -23
  157. data/spec/shared/lib/mrss/utils.rb +28 -6
  158. data/spec/shared/share/Dockerfile.erb +36 -40
  159. data/spec/shared/shlib/server.sh +32 -8
  160. data/spec/shared/shlib/set_env.sh +4 -4
  161. data/spec/spec_helper.rb +5 -0
  162. data/spec/support/immutable_ids.rb +118 -0
  163. data/spec/support/macros.rb +47 -15
  164. data/spec/support/models/artist.rb +0 -1
  165. data/spec/support/models/band.rb +1 -0
  166. data/spec/support/models/book.rb +1 -0
  167. data/spec/support/models/building.rb +2 -0
  168. data/spec/support/models/cover.rb +10 -0
  169. data/spec/support/models/product.rb +1 -0
  170. data.tar.gz.sig +0 -0
  171. metadata +686 -650
  172. metadata.gz.sig +0 -0
  173. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -60
  174. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -60
@@ -411,19 +411,12 @@ describe Mongoid::PersistenceContext do
411
411
  end
412
412
 
413
413
  context 'when there is a database override' do
414
+ persistence_context_override :database, :other
414
415
 
415
416
  before do
416
417
  object.store_in database: :musique
417
418
  end
418
419
 
419
- before do
420
- Mongoid::Threaded.database_override = :other
421
- end
422
-
423
- after do
424
- Mongoid::Threaded.database_override = nil
425
- end
426
-
427
420
  it 'uses the override' do
428
421
  expect(persistence_context.database_name).to eq(:other)
429
422
  end
@@ -458,14 +451,7 @@ describe Mongoid::PersistenceContext do
458
451
  end
459
452
 
460
453
  context 'when there is a database override' do
461
-
462
- before do
463
- Mongoid::Threaded.database_override = :other
464
- end
465
-
466
- after do
467
- Mongoid::Threaded.database_override = nil
468
- end
454
+ persistence_context_override :database, :other
469
455
 
470
456
  it 'uses the persistence context options' do
471
457
  expect(persistence_context.database_name).to eq(:musique)
@@ -517,14 +503,7 @@ describe Mongoid::PersistenceContext do
517
503
  end
518
504
 
519
505
  context 'when there is a database override' do
520
-
521
- before do
522
- Mongoid::Threaded.database_override = :other
523
- end
524
-
525
- after do
526
- Mongoid::Threaded.database_override = nil
527
- end
506
+ persistence_context_override :database, :other
528
507
 
529
508
  it 'uses the persistence context options' do
530
509
  expect(persistence_context.database_name).to eq(:musique)
@@ -535,14 +514,7 @@ describe Mongoid::PersistenceContext do
535
514
  context 'when there are no options passed to the Persistence Context' do
536
515
 
537
516
  context 'when there is a database override' do
538
-
539
- before do
540
- Mongoid::Threaded.database_override = :other
541
- end
542
-
543
- after do
544
- Mongoid::Threaded.database_override = nil
545
- end
517
+ persistence_context_override :database, :other
546
518
 
547
519
  it 'uses the database override options' do
548
520
  expect(persistence_context.database_name).to eq(Mongoid::Threaded.database_override)
@@ -585,15 +557,7 @@ describe Mongoid::PersistenceContext do
585
557
  end
586
558
 
587
559
  context 'when there is a client override' do
588
-
589
- before do
590
- Mongoid::Threaded.client_override = :other
591
- end
592
-
593
- after do
594
- persistence_context.client.close
595
- Mongoid::Threaded.client_override = nil
596
- end
560
+ persistence_context_override :client, :other
597
561
 
598
562
  it 'uses the client option' do
599
563
  expect(persistence_context.client).to eq(Mongoid::Clients.with_name(:alternative))
@@ -637,14 +601,7 @@ describe Mongoid::PersistenceContext do
637
601
  end
638
602
 
639
603
  context 'when there is a client override' do
640
-
641
- before do
642
- Mongoid::Threaded.client_override = :alternative
643
- end
644
-
645
- after do
646
- Mongoid::Threaded.client_override = nil
647
- end
604
+ persistence_context_override :client, :alternative
648
605
 
649
606
  it 'uses the client override' do
650
607
  expect(persistence_context.client).to eq(Mongoid::Clients.with_name(:alternative))
@@ -680,14 +637,7 @@ describe Mongoid::PersistenceContext do
680
637
  end
681
638
 
682
639
  context 'when there is a client override' do
683
-
684
- before do
685
- Mongoid::Threaded.client_override = :alternative
686
- end
687
-
688
- after do
689
- Mongoid::Threaded.client_override = nil
690
- end
640
+ persistence_context_override :client, :alternative
691
641
 
692
642
  it 'uses the client override' do
693
643
  expect(persistence_context.client).to eq(Mongoid::Clients.with_name(:alternative))
@@ -24,21 +24,12 @@ describe Mongoid::QueryCache do
24
24
  Mrss::SessionRegistry.instance.verify_sessions_ended!
25
25
  end
26
26
 
27
- let(:reset_legacy_qc_warning) do
28
- begin
29
- Mongoid::QueryCache.remove_instance_variable('@legacy_query_cache_warned')
30
- rescue NameError
31
- # raised if the instance variable wasn't set
32
- end
33
- end
34
-
35
27
  describe '#cache' do
28
+
36
29
  context 'with driver query cache' do
37
30
 
38
31
  context 'when query cache is not enabled' do
39
- before do
40
- Mongoid::QueryCache.enabled = false
41
- end
32
+ override_query_cache false
42
33
 
43
34
  it 'turns on the query cache within the block' do
44
35
  expect(Mongoid::QueryCache.enabled?).to be false
@@ -52,9 +43,7 @@ describe Mongoid::QueryCache do
52
43
  end
53
44
 
54
45
  context 'when query cache is enabled' do
55
- before do
56
- Mongoid::QueryCache.enabled = true
57
- end
46
+ override_query_cache true
58
47
 
59
48
  it 'keeps the query cache enabled within the block' do
60
49
  expect(Mongoid::QueryCache.enabled?).to be true
@@ -84,12 +73,11 @@ describe Mongoid::QueryCache do
84
73
  end
85
74
 
86
75
  describe '#uncached' do
76
+
87
77
  context 'with driver query cache' do
88
78
 
89
79
  context 'when query cache is not enabled' do
90
- before do
91
- Mongoid::QueryCache.enabled = false
92
- end
80
+ override_query_cache false
93
81
 
94
82
  it 'keeps the query cache turned off within the block' do
95
83
  expect(Mongoid::QueryCache.enabled?).to be false
@@ -103,9 +91,7 @@ describe Mongoid::QueryCache do
103
91
  end
104
92
 
105
93
  context 'when query cache is enabled' do
106
- before do
107
- Mongoid::QueryCache.enabled = true
108
- end
94
+ override_query_cache true
109
95
 
110
96
  it 'turns off the query cache within the block' do
111
97
  expect(Mongoid::QueryCache.enabled?).to be true
@@ -159,10 +145,7 @@ describe Mongoid::QueryCache do
159
145
  end
160
146
 
161
147
  context 'does not query for the relation and instead sets the base' do
162
-
163
- before do
164
- Mongoid::QueryCache.enabled = false
165
- end
148
+ override_query_cache false
166
149
 
167
150
  it 'queries for each access to the base' do
168
151
  expect(server).to receive(:with_connection).exactly(0).times.and_call_original
@@ -180,10 +163,7 @@ describe Mongoid::QueryCache do
180
163
  end
181
164
 
182
165
  context 'when query cache is disabled' do
183
-
184
- before do
185
- Mongoid::QueryCache.enabled = false
186
- end
166
+ override_query_cache false
187
167
 
188
168
  it 'does not query for access to the base' do
189
169
  expect(server).to receive(:context).exactly(0).times.and_call_original
@@ -194,10 +174,7 @@ describe Mongoid::QueryCache do
194
174
  end
195
175
 
196
176
  context 'when query cache is enabled' do
197
-
198
- before do
199
- Mongoid::QueryCache.enabled = true
200
- end
177
+ override_query_cache true
201
178
 
202
179
  it 'does not query for access to the base' do
203
180
  expect(server).to receive(:context).exactly(0).times.and_call_original
@@ -243,10 +220,7 @@ describe Mongoid::QueryCache do
243
220
  end
244
221
 
245
222
  context 'when block is cached' do
246
-
247
- before do
248
- Mongoid::QueryCache.enabled = false
249
- end
223
+ override_query_cache false
250
224
 
251
225
  it 'uses the driver query cache' do
252
226
  expect(Mongo::QueryCache).to receive(:cache).and_call_original
@@ -259,10 +233,7 @@ describe Mongoid::QueryCache do
259
233
  end
260
234
 
261
235
  context 'when block is uncached' do
262
-
263
- before do
264
- Mongoid::QueryCache.enabled = true
265
- end
236
+ override_query_cache true
266
237
 
267
238
  it 'uses the driver query cache' do
268
239
  expect(Mongo::QueryCache).to receive(:uncached).and_call_original
@@ -314,10 +285,7 @@ describe Mongoid::QueryCache do
314
285
  end
315
286
 
316
287
  context "when query cache is disabled" do
317
-
318
- before do
319
- Mongoid::QueryCache.enabled = false
320
- end
288
+ override_query_cache false
321
289
 
322
290
  it "queries again" do
323
291
  expect_query(1) do
@@ -440,10 +408,7 @@ describe Mongoid::QueryCache do
440
408
  end
441
409
 
442
410
  context "when query cache is disabled" do
443
-
444
- before do
445
- Mongoid::QueryCache.enabled = false
446
- end
411
+ override_query_cache false
447
412
 
448
413
  it "queries again" do
449
414
  expect_query(1) do
@@ -669,13 +634,7 @@ describe Mongoid::QueryCache do
669
634
  end
670
635
 
671
636
  context "when query caching is enabled and the batch_size is set" do
672
-
673
- around(:each) do |example|
674
- query_cache_enabled = Mongoid::QueryCache.enabled?
675
- Mongoid::QueryCache.enabled = true
676
- example.run
677
- Mongoid::QueryCache.enabled = query_cache_enabled
678
- end
637
+ override_query_cache true
679
638
 
680
639
  it "does not raise an error when requesting the second batch" do
681
640
  expect {
@@ -684,7 +643,6 @@ describe Mongoid::QueryCache do
684
643
  end
685
644
  }.not_to raise_error
686
645
  end
687
-
688
646
  end
689
647
  end
690
648
 
@@ -752,10 +710,7 @@ describe Mongoid::QueryCache do
752
710
  end
753
711
 
754
712
  context 'when query cache is disabled' do
755
-
756
- before do
757
- Mongoid::QueryCache.enabled = false
758
- end
713
+ override_query_cache false
759
714
 
760
715
  it "queries again" do
761
716
  band = Band.find(band_id)
@@ -819,8 +774,9 @@ describe Mongoid::QueryCache do
819
774
  end
820
775
 
821
776
  context 'when the initial query does not exhaust the results' do
777
+ override_query_cache true
778
+
822
779
  before do
823
- Mongoid::QueryCache.enabled = true
824
780
  10.times { Band.create! }
825
781
 
826
782
  Band.batch_size(4).to_a
@@ -867,4 +823,43 @@ describe Mongoid::QueryCache do
867
823
  school.students.to_a.length.should == 5
868
824
  end
869
825
  end
826
+
827
+ describe 'deprecation warnings' do
828
+
829
+ context '#cache' do
830
+ it 'should raise a warning' do
831
+ expect(Mongoid::Warnings).to receive(:warn_mongoid_query_cache)
832
+ Mongoid::QueryCache.cache {}
833
+ end
834
+ end
835
+
836
+ context '#uncached' do
837
+ it 'should raise a warning' do
838
+ expect(Mongoid::Warnings).to receive(:warn_mongoid_query_cache)
839
+ Mongoid::QueryCache.uncached {}
840
+ end
841
+ end
842
+
843
+ context '#clear_cache' do
844
+ it 'should raise a warning' do
845
+ expect(Mongoid::Warnings).to receive(:warn_mongoid_query_cache_clear)
846
+ Mongoid::QueryCache.clear_cache
847
+ end
848
+ end
849
+
850
+ context '#enabled?' do
851
+ it 'should raise a warning' do
852
+ expect(Mongoid::Warnings).to receive(:warn_mongoid_query_cache)
853
+ Mongoid::QueryCache.enabled?
854
+ end
855
+ end
856
+
857
+ context '#enabled=' do
858
+ it 'should raise a warning' do
859
+ old_enabled = Mongoid::QueryCache.enabled?
860
+ expect(Mongoid::Warnings).to receive(:warn_mongoid_query_cache)
861
+ Mongoid::QueryCache.enabled = old_enabled
862
+ end
863
+ end
864
+ end
870
865
  end
@@ -390,30 +390,6 @@ describe Mongoid::Reloadable do
390
390
  end
391
391
  end
392
392
 
393
- context 'when embeds_many is modified' do
394
- let(:contractor1) { Contractor.new(name: 'b') }
395
- let(:contractor2) { Contractor.new(name: 'c') }
396
-
397
- let(:building) do
398
- Building.create!(contractors: [ contractor1 ])
399
- end
400
-
401
- let(:more_contractors) { building.contractors + [ contractor2 ] }
402
-
403
- let(:modified_building) do
404
- building.tap do
405
- building.assign_attributes contractors: more_contractors
406
- end
407
- end
408
-
409
- let(:reloaded_building) { modified_building.reload }
410
-
411
- it 'resets delayed_atomic_sets' do
412
- expect(modified_building.delayed_atomic_sets).not_to be_empty
413
- expect(reloaded_building.delayed_atomic_sets).to be_empty
414
- end
415
- end
416
-
417
393
  context "when embedded document is nil" do
418
394
 
419
395
  let(:palette) do
@@ -512,12 +488,32 @@ describe Mongoid::Reloadable do
512
488
  Person.create!
513
489
  end
514
490
 
515
- let(:reloaded) do
516
- Person.only(:name).first.reload
491
+ context "when legacy_readonly is on" do
492
+ config_override :legacy_readonly, true
493
+
494
+ let(:reloaded) do
495
+ Person.only(:name).first.reload
496
+ end
497
+
498
+ it 'resets the readonly state after reloading' do
499
+ expect(reloaded.readonly?).to be(false)
500
+ end
517
501
  end
518
502
 
519
- it 'resets the readonly state after reloading' do
520
- expect(reloaded.readonly?).to be(false)
503
+ context "when legacy_readonly is off" do
504
+ config_override :legacy_readonly, false
505
+
506
+ let(:reloaded) do
507
+ Person.only(:name).first.tap do |doc|
508
+ doc.readonly!
509
+ expect(doc.readonly?).to be true
510
+ doc.reload
511
+ end
512
+ end
513
+
514
+ it 'does not reset the readonly state after reloading' do
515
+ expect(reloaded.readonly?).to be(true)
516
+ end
521
517
  end
522
518
  end
523
519
 
@@ -121,6 +121,76 @@ describe Mongoid::Scopable do
121
121
  expect(selector).to eq({'active' => true})
122
122
  end
123
123
  end
124
+
125
+ context "when the default scope is dotted" do
126
+
127
+ let(:criteria) do
128
+ Band.where('tags.foo' => 'bar')
129
+ end
130
+
131
+ before do
132
+ Band.default_scope ->{ criteria }
133
+ end
134
+
135
+ after do
136
+ Band.default_scoping = nil
137
+ end
138
+
139
+ let!(:band) do
140
+ Band.create!
141
+ end
142
+
143
+ it "adds the scope as a dotted key attribute" do
144
+ expect(band.attributes['tags.foo']).to eq('bar')
145
+ end
146
+
147
+ it "adds the default scope to the class" do
148
+ expect(Band.default_scoping.call).to eq(criteria)
149
+ end
150
+
151
+ it "flags as being default scoped" do
152
+ expect(Band).to be_default_scoping
153
+ end
154
+
155
+ it "does not find the correct document" do
156
+ expect(Band.count).to eq(0)
157
+ end
158
+ end
159
+
160
+ context "when the default scope is dotted with a query" do
161
+
162
+ let(:criteria) do
163
+ Band.where('tags.foo' => {'$eq' => 'bar'})
164
+ end
165
+
166
+ before do
167
+ Band.default_scope ->{ criteria }
168
+ end
169
+
170
+ after do
171
+ Band.default_scoping = nil
172
+ end
173
+
174
+ let!(:band) do
175
+ Band.create!('tags' => { 'foo' => 'bar' })
176
+ end
177
+
178
+ it "does not add the scope as a dotted key attribute" do
179
+ expect(band.attributes).to_not have_key('tags.foo')
180
+ end
181
+
182
+ it "adds the default scope to the class" do
183
+ expect(Band.default_scoping.call).to eq(criteria)
184
+ end
185
+
186
+ it "flags as being default scoped" do
187
+ expect(Band).to be_default_scoping
188
+ end
189
+
190
+ it "finds the correct document" do
191
+ expect(Band.where.first).to eq(band)
192
+ end
193
+ end
124
194
  end
125
195
 
126
196
  describe ".default_scopable?" do
@@ -14,19 +14,19 @@ describe Mongoid::Serializable do
14
14
  expect(guitar.send(:field_names, {})).to eq(guitar.fields.except("_type").keys.sort)
15
15
  end
16
16
 
17
- context "when using a custom discriminator_key" do
18
- before do
17
+ context "when using a custom discriminator_key" do
18
+ before do
19
19
  Instrument.discriminator_key = "dkey"
20
20
  end
21
21
 
22
- after do
22
+ after do
23
23
  Instrument.discriminator_key = nil
24
24
  end
25
25
 
26
26
  let(:guitar) do
27
27
  Guitar.new
28
28
  end
29
-
29
+
30
30
  it "includes _type but does not include the new discriminator key" do
31
31
  expect(guitar.send(:field_names, {})).to eq(guitar.fields.except("dkey").keys.sort)
32
32
  end
@@ -41,15 +41,11 @@ describe Mongoid::Serializable do
41
41
  end
42
42
 
43
43
  after do
44
- Mongoid.include_root_in_json = false
45
44
  reload_model(:Minim)
46
45
  end
47
46
 
48
47
  context "when global config is set to true" do
49
-
50
- before do
51
- Mongoid.include_root_in_json = true
52
- end
48
+ config_override :include_root_in_json, true
53
49
 
54
50
  it "returns true" do
55
51
  expect(Minim.public_send(meth)).to be true
@@ -67,10 +63,7 @@ describe Mongoid::Serializable do
67
63
  end
68
64
 
69
65
  context "when global config set to false" do
70
-
71
- before do
72
- Mongoid.include_root_in_json = false
73
- end
66
+ config_override :include_root_in_json, false
74
67
 
75
68
  it "returns false" do
76
69
  expect(Minim.public_send(meth)).to be false
@@ -89,13 +82,13 @@ describe Mongoid::Serializable do
89
82
  end
90
83
 
91
84
  describe "#include_root_in_json" do
85
+ config_override :include_root_in_json, false
92
86
 
93
87
  before do
94
88
  reload_model(:Minim)
95
89
  end
96
90
 
97
91
  after do
98
- Mongoid.include_root_in_json = false
99
92
  reload_model(:Minim)
100
93
  end
101
94
 
@@ -127,10 +120,6 @@ describe Mongoid::Serializable do
127
120
 
128
121
  context "when global config set to false" do
129
122
 
130
- before do
131
- Mongoid.include_root_in_json = false
132
- end
133
-
134
123
  it "returns false" do
135
124
  expect(minim.public_send(meth)).to be false
136
125
  end
@@ -297,14 +286,7 @@ describe Mongoid::Serializable do
297
286
  end
298
287
 
299
288
  context "when include_type_for_serialization is true" do
300
-
301
- before do
302
- Mongoid.include_type_for_serialization = true
303
- end
304
-
305
- after do
306
- Mongoid.include_type_for_serialization = false
307
- end
289
+ config_override :include_type_for_serialization, true
308
290
 
309
291
  it "includes _type field" do
310
292
  expect(person.serializable_hash.keys).to include '_type'
@@ -881,16 +863,13 @@ describe Mongoid::Serializable do
881
863
  end
882
864
 
883
865
  context "when including root in json via Mongoid" do
866
+ config_override :include_root_in_json, false
884
867
 
885
868
  before do
886
869
  account.include_root_in_json.should be false
887
870
  Mongoid.include_root_in_json = true
888
871
  end
889
872
 
890
- after do
891
- Mongoid.include_root_in_json = false
892
- end
893
-
894
873
  it "uses the mongoid configuration" do
895
874
  expect(JSON.parse(account.to_json)).to have_key("account")
896
875
  end