mongoid 6.1.0 → 6.2.0

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 (132) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/lib/mongoid/atomic.rb +3 -3
  4. data/lib/mongoid/attributes/dynamic.rb +3 -2
  5. data/lib/mongoid/attributes/nested.rb +1 -1
  6. data/lib/mongoid/attributes/processing.rb +0 -4
  7. data/lib/mongoid/attributes.rb +1 -2
  8. data/lib/mongoid/changeable.rb +1 -1
  9. data/lib/mongoid/clients/options.rb +1 -1
  10. data/lib/mongoid/composable.rb +3 -1
  11. data/lib/mongoid/contextual/atomic.rb +1 -1
  12. data/lib/mongoid/contextual/geo_near.rb +3 -2
  13. data/lib/mongoid/contextual/memory.rb +3 -3
  14. data/lib/mongoid/contextual/mongo.rb +5 -5
  15. data/lib/mongoid/contextual/none.rb +14 -2
  16. data/lib/mongoid/copyable.rb +1 -5
  17. data/lib/mongoid/criteria/findable.rb +3 -2
  18. data/lib/mongoid/criteria/includable.rb +2 -2
  19. data/lib/mongoid/criteria/queryable/aggregable.rb +1 -1
  20. data/lib/mongoid/criteria/queryable/extensions/array.rb +1 -1
  21. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +1 -1
  22. data/lib/mongoid/criteria/queryable/extensions/hash.rb +4 -4
  23. data/lib/mongoid/criteria/queryable/extensions/object.rb +4 -4
  24. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +34 -0
  25. data/lib/mongoid/criteria/queryable/options.rb +16 -0
  26. data/lib/mongoid/criteria/queryable/selector.rb +1 -1
  27. data/lib/mongoid/criteria.rb +2 -2
  28. data/lib/mongoid/document.rb +1 -1
  29. data/lib/mongoid/errors/delete_restriction.rb +2 -2
  30. data/lib/mongoid/errors/inverse_not_found.rb +1 -1
  31. data/lib/mongoid/extensions/hash.rb +3 -2
  32. data/lib/mongoid/extensions/object.rb +2 -2
  33. data/lib/mongoid/extensions/time.rb +1 -1
  34. data/lib/mongoid/factory.rb +0 -1
  35. data/lib/mongoid/fields/foreign_key.rb +2 -2
  36. data/lib/mongoid/findable.rb +1 -1
  37. data/lib/mongoid/indexable/specification.rb +1 -1
  38. data/lib/mongoid/indexable.rb +3 -2
  39. data/lib/mongoid/interceptable.rb +9 -11
  40. data/lib/mongoid/loggable.rb +1 -1
  41. data/lib/mongoid/matchable/all.rb +2 -2
  42. data/lib/mongoid/matchable/and.rb +3 -3
  43. data/lib/mongoid/matchable/default.rb +2 -2
  44. data/lib/mongoid/matchable/elem_match.rb +3 -3
  45. data/lib/mongoid/matchable/exists.rb +2 -2
  46. data/lib/mongoid/matchable/gt.rb +2 -2
  47. data/lib/mongoid/matchable/gte.rb +2 -2
  48. data/lib/mongoid/matchable/in.rb +2 -2
  49. data/lib/mongoid/matchable/lt.rb +2 -2
  50. data/lib/mongoid/matchable/lte.rb +2 -2
  51. data/lib/mongoid/matchable/ne.rb +2 -2
  52. data/lib/mongoid/matchable/nin.rb +2 -2
  53. data/lib/mongoid/matchable/or.rb +3 -3
  54. data/lib/mongoid/matchable/regexp.rb +27 -0
  55. data/lib/mongoid/matchable/size.rb +2 -2
  56. data/lib/mongoid/matchable.rb +16 -9
  57. data/lib/mongoid/persistable/creatable.rb +2 -4
  58. data/lib/mongoid/persistable/deletable.rb +1 -1
  59. data/lib/mongoid/persistable/settable.rb +1 -1
  60. data/lib/mongoid/persistable/upsertable.rb +1 -1
  61. data/lib/mongoid/persistable.rb +0 -3
  62. data/lib/mongoid/persistence_context.rb +2 -3
  63. data/lib/mongoid/relations/accessors.rb +1 -2
  64. data/lib/mongoid/relations/bindings/embedded/in.rb +0 -4
  65. data/lib/mongoid/relations/bindings/embedded/many.rb +1 -8
  66. data/lib/mongoid/relations/bindings/embedded/one.rb +0 -10
  67. data/lib/mongoid/relations/bindings/referenced/many.rb +0 -4
  68. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +4 -4
  69. data/lib/mongoid/relations/builders/embedded/one.rb +1 -1
  70. data/lib/mongoid/relations/builders/nested_attributes/many.rb +1 -1
  71. data/lib/mongoid/relations/conversions.rb +1 -1
  72. data/lib/mongoid/relations/counter_cache.rb +10 -10
  73. data/lib/mongoid/relations/eager/base.rb +4 -4
  74. data/lib/mongoid/relations/eager.rb +6 -11
  75. data/lib/mongoid/relations/embedded/batchable.rb +3 -3
  76. data/lib/mongoid/relations/embedded/in.rb +1 -3
  77. data/lib/mongoid/relations/embedded/many.rb +12 -9
  78. data/lib/mongoid/relations/embedded/one.rb +1 -3
  79. data/lib/mongoid/relations/macros.rb +3 -2
  80. data/lib/mongoid/relations/metadata.rb +3 -3
  81. data/lib/mongoid/relations/nested_builder.rb +1 -1
  82. data/lib/mongoid/relations/proxy.rb +3 -2
  83. data/lib/mongoid/relations/referenced/in.rb +1 -4
  84. data/lib/mongoid/relations/referenced/many.rb +5 -7
  85. data/lib/mongoid/relations/referenced/many_to_many.rb +2 -2
  86. data/lib/mongoid/relations/referenced/one.rb +0 -2
  87. data/lib/mongoid/relations/reflections.rb +2 -2
  88. data/lib/mongoid/relations/synchronization.rb +11 -11
  89. data/lib/mongoid/scopable.rb +2 -2
  90. data/lib/mongoid/serializable.rb +4 -3
  91. data/lib/mongoid/tasks/database.rb +2 -1
  92. data/lib/mongoid/threaded.rb +4 -4
  93. data/lib/mongoid/validatable/macros.rb +4 -2
  94. data/lib/mongoid/validatable.rb +1 -1
  95. data/lib/mongoid/version.rb +1 -1
  96. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +12 -2
  97. data/spec/app/models/book.rb +2 -1
  98. data/spec/app/models/page.rb +1 -1
  99. data/spec/mongoid/contextual/none_spec.rb +15 -0
  100. data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +89 -0
  101. data/spec/mongoid/criteria/queryable/selectable_spec.rb +15 -0
  102. data/spec/mongoid/criteria_spec.rb +6 -2
  103. data/spec/mongoid/interceptable_spec.rb +35 -8
  104. data/spec/mongoid/matchable/all_spec.rb +4 -4
  105. data/spec/mongoid/matchable/and_spec.rb +10 -10
  106. data/spec/mongoid/matchable/default_spec.rb +12 -12
  107. data/spec/mongoid/matchable/elem_match_spec.rb +11 -11
  108. data/spec/mongoid/matchable/exists_spec.rb +5 -5
  109. data/spec/mongoid/matchable/gt_spec.rb +8 -8
  110. data/spec/mongoid/matchable/gte_spec.rb +8 -8
  111. data/spec/mongoid/matchable/in_spec.rb +5 -5
  112. data/spec/mongoid/matchable/lt_spec.rb +8 -8
  113. data/spec/mongoid/matchable/lte_spec.rb +8 -8
  114. data/spec/mongoid/matchable/ne_spec.rb +5 -5
  115. data/spec/mongoid/matchable/nin_spec.rb +5 -5
  116. data/spec/mongoid/matchable/or_spec.rb +7 -7
  117. data/spec/mongoid/matchable/regexp_spec.rb +59 -0
  118. data/spec/mongoid/matchable/size_spec.rb +3 -3
  119. data/spec/mongoid/matchable_spec.rb +108 -58
  120. data/spec/mongoid/persistable/deletable_spec.rb +15 -0
  121. data/spec/mongoid/persistable/settable_spec.rb +16 -0
  122. data/spec/mongoid/persistence_context_spec.rb +22 -1
  123. data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +4 -4
  124. data/spec/mongoid/relations/embedded/many_spec.rb +24 -6
  125. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +1 -1
  126. data/spec/mongoid/relations/synchronization_spec.rb +48 -2
  127. data/spec/mongoid/relations/touchable_spec.rb +40 -0
  128. data/spec/mongoid/validatable/uniqueness_spec.rb +2 -0
  129. data/spec/spec_helper.rb +2 -2
  130. data.tar.gz.sig +0 -0
  131. metadata +10 -5
  132. metadata.gz.sig +1 -1
@@ -428,22 +428,40 @@ describe Mongoid::Relations::Embedded::Many do
428
428
  context "when replacing an existing relation" do
429
429
 
430
430
  let(:person) do
431
- Person.create(addresses: [
431
+ Person.create(addresses: addresses)
432
+ end
433
+
434
+ let(:addresses) do
435
+ [
432
436
  Address.new(street: "1st St"),
433
437
  Address.new(street: "2nd St")
434
- ])
438
+ ]
435
439
  end
436
440
 
437
441
  let(:address) do
438
442
  Address.new(street: "3rd St")
439
443
  end
440
444
 
441
- before do
442
- person.addresses = [ address ]
445
+ context "when the replaced relation is different from the existing relation" do
446
+
447
+ before do
448
+ person.addresses = [ address ]
449
+ end
450
+
451
+ it "deletes the old documents" do
452
+ expect(person.reload.addresses).to eq([ address ])
453
+ end
443
454
  end
444
455
 
445
- it "deletes the old documents" do
446
- expect(person.reload.addresses).to eq([ address ])
456
+ context "when the replaced relation is identical to the existing relation" do
457
+
458
+ before do
459
+ person.addresses = addresses
460
+ end
461
+
462
+ it "does nothing" do
463
+ expect(person.reload.addresses).to eq(addresses)
464
+ end
447
465
  end
448
466
  end
449
467
 
@@ -5,7 +5,7 @@ describe Mongoid::Relations::Referenced::ManyToMany do
5
5
  before(:all) do
6
6
  Mongoid.raise_not_found_error = true
7
7
  Person.autosave(Person.relations["preferences"].merge!(autosave: true))
8
- Person.synced(Person.relations["preferences"])
8
+ Person._synced(Person.relations["preferences"])
9
9
  end
10
10
 
11
11
  after(:all) do
@@ -4,7 +4,7 @@ describe Mongoid::Relations::Synchronization do
4
4
 
5
5
  before(:all) do
6
6
  Mongoid.raise_not_found_error = true
7
- Person.synced(Person.relations["preferences"])
7
+ Person._synced(Person.relations["preferences"])
8
8
  end
9
9
 
10
10
  after(:all) do
@@ -12,6 +12,52 @@ describe Mongoid::Relations::Synchronization do
12
12
  Person.reset_callbacks(:destroy)
13
13
  end
14
14
 
15
+ describe 'Model loading' do
16
+
17
+ let(:model_synced) do
18
+ class TestModel
19
+ include Mongoid::Document
20
+ field :_synced
21
+ end
22
+ end
23
+
24
+ let(:model_synced?) do
25
+ class TestModel
26
+ include Mongoid::Document
27
+ field :_synced?
28
+ end
29
+ end
30
+
31
+ let(:model_syncable?) do
32
+ class TestModel
33
+ include Mongoid::Document
34
+ field :_syncable?
35
+ end
36
+ end
37
+
38
+ after do
39
+ Object.send(:remove_const, :TestModel)
40
+ end
41
+
42
+ it 'prohibits the use of :_sycned as an attribute' do
43
+ expect {
44
+ model_synced
45
+ }.to raise_exception(Mongoid::Errors::InvalidField)
46
+ end
47
+
48
+ it 'prohibits the use of :_synced? as an attribute' do
49
+ expect {
50
+ model_synced?
51
+ }.to raise_exception(Mongoid::Errors::InvalidField)
52
+ end
53
+
54
+ it 'prohibits the use of :_syncable? as an attribute' do
55
+ expect {
56
+ model_syncable?
57
+ }.to raise_exception(Mongoid::Errors::InvalidField)
58
+ end
59
+ end
60
+
15
61
  describe ".update_inverse_keys" do
16
62
 
17
63
  let(:agent) do
@@ -119,7 +165,7 @@ describe Mongoid::Relations::Synchronization do
119
165
  end
120
166
 
121
167
  it "resets the synced flag" do
122
- expect(person.synced["preference_ids"]).to be false
168
+ expect(person._synced["preference_ids"]).to be false
123
169
  end
124
170
 
125
171
  context "when subsequently setting with keys" do
@@ -227,6 +227,44 @@ describe Mongoid::Relations::Touchable do
227
227
  end
228
228
  end
229
229
 
230
+ context "when the parent of embedded doc has cascade callbacks" do
231
+
232
+ let!(:book) do
233
+ Book.new
234
+ end
235
+
236
+ before do
237
+ book.pages.new
238
+ book.save
239
+ book.unset(:updated_at)
240
+ book.pages.first.touch
241
+ end
242
+
243
+ it "touches the parent document" do
244
+ expect(book.updated_at).to be_within(5).of(Time.now)
245
+ end
246
+ end
247
+
248
+ context "when multiple embedded docs with cascade callbacks" do
249
+
250
+ let!(:book) do
251
+ Book.new
252
+ end
253
+
254
+ before do
255
+ 2.times { book.pages.new }
256
+ book.save
257
+ book.unset(:updated_at)
258
+ book.pages.first.content = "foo"
259
+ book.pages.second.content = "bar"
260
+ book.pages.first.touch
261
+ end
262
+
263
+ it "touches the parent document" do
264
+ expect(book.updated_at).to be_within(5).of(Time.now)
265
+ end
266
+ end
267
+
230
268
  context "when the relation is nil" do
231
269
 
232
270
  let!(:agent) do
@@ -343,6 +381,7 @@ describe Mongoid::Relations::Touchable do
343
381
  end
344
382
 
345
383
  it "does not persist other attribute changes" do
384
+ expect(band.name).to eq('Nocebo')
346
385
  expect(band.reload.name).not_to eq('Nocebo')
347
386
  end
348
387
  end
@@ -354,6 +393,7 @@ describe Mongoid::Relations::Touchable do
354
393
  end
355
394
 
356
395
  it "does not persist other attribute changes" do
396
+ expect(band.name).to eq('Nocebo')
357
397
  expect(band.reload.name).not_to eq('Nocebo')
358
398
  end
359
399
  end
@@ -2424,6 +2424,7 @@ describe Mongoid::Validatable::UniquenessValidator do
2424
2424
 
2425
2425
  before do
2426
2426
  Person.validates_uniqueness_of(:username)
2427
+ Person.index({ ssn: 1 }, { unique: true })
2427
2428
  Person.create_indexes
2428
2429
  end
2429
2430
 
@@ -2433,6 +2434,7 @@ describe Mongoid::Validatable::UniquenessValidator do
2433
2434
 
2434
2435
  after do
2435
2436
  Person.reset_callbacks(:validate)
2437
+ Person.collection.drop
2436
2438
  end
2437
2439
 
2438
2440
  it "transfers the options to the cloned client" do
data/spec/spec_helper.rb CHANGED
@@ -36,7 +36,7 @@ require 'support/authorization'
36
36
  require 'support/expectations'
37
37
 
38
38
  # Give MongoDB time to start up on the travis ci environment.
39
- if (ENV['CI'] == 'travis')
39
+ if (ENV['CI'] == 'travis' || ENV['CI'] == 'evergreen')
40
40
  starting = true
41
41
  client = Mongo::Client.new(['127.0.0.1:27017'])
42
42
  while starting
@@ -57,7 +57,7 @@ CONFIG = {
57
57
  hosts: [ "#{HOST}:#{PORT}" ],
58
58
  options: {
59
59
  server_selection_timeout: 0.5,
60
- max_pool_size: 1,
60
+ max_pool_size: 5,
61
61
  heartbeat_frequency: 180,
62
62
  user: MONGOID_ROOT_USER.name,
63
63
  password: MONGOID_ROOT_USER.password,
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.1.0
4
+ version: 6.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Durran Jordan
@@ -30,7 +30,7 @@ cert_chain:
30
30
  cGiNQIiHBj/9/xHfOyOthBPUevTiVnuffarDr434z/LGLwYzgaG5EcJFvZqpvUpP
31
31
  fGcAPtAZUMGLXwcOB1BJEFkDxUQIJiEpSmf4YzzZhEM=
32
32
  -----END CERTIFICATE-----
33
- date: 2017-01-26 00:00:00.000000000 Z
33
+ date: 2017-06-07 00:00:00.000000000 Z
34
34
  dependencies:
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: activemodel
@@ -38,14 +38,14 @@ dependencies:
38
38
  requirements:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: '5.0'
41
+ version: '5.1'
42
42
  type: :runtime
43
43
  prerelease: false
44
44
  version_requirements: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: '5.0'
48
+ version: '5.1'
49
49
  - !ruby/object:Gem::Dependency
50
50
  name: mongo
51
51
  requirement: !ruby/object:Gem::Requirement
@@ -258,6 +258,7 @@ files:
258
258
  - lib/mongoid/matchable/ne.rb
259
259
  - lib/mongoid/matchable/nin.rb
260
260
  - lib/mongoid/matchable/or.rb
261
+ - lib/mongoid/matchable/regexp.rb
261
262
  - lib/mongoid/matchable/size.rb
262
263
  - lib/mongoid/persistable.rb
263
264
  - lib/mongoid/persistable/creatable.rb
@@ -631,6 +632,7 @@ files:
631
632
  - spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb
632
633
  - spec/mongoid/criteria/queryable/extensions/object_spec.rb
633
634
  - spec/mongoid/criteria/queryable/extensions/range_spec.rb
635
+ - spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb
634
636
  - spec/mongoid/criteria/queryable/extensions/regexp_spec.rb
635
637
  - spec/mongoid/criteria/queryable/extensions/set_spec.rb
636
638
  - spec/mongoid/criteria/queryable/extensions/string_spec.rb
@@ -742,6 +744,7 @@ files:
742
744
  - spec/mongoid/matchable/ne_spec.rb
743
745
  - spec/mongoid/matchable/nin_spec.rb
744
746
  - spec/mongoid/matchable/or_spec.rb
747
+ - spec/mongoid/matchable/regexp_spec.rb
745
748
  - spec/mongoid/matchable/size_spec.rb
746
749
  - spec/mongoid/matchable_spec.rb
747
750
  - spec/mongoid/persistable/creatable_spec.rb
@@ -862,7 +865,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
862
865
  version: 1.3.6
863
866
  requirements: []
864
867
  rubyforge_project: mongoid
865
- rubygems_version: 2.4.5.1
868
+ rubygems_version: 2.6.11
866
869
  signing_key:
867
870
  specification_version: 4
868
871
  summary: Elegant Persistence in Ruby for MongoDB.
@@ -1123,6 +1126,7 @@ test_files:
1123
1126
  - spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb
1124
1127
  - spec/mongoid/criteria/queryable/extensions/object_spec.rb
1125
1128
  - spec/mongoid/criteria/queryable/extensions/range_spec.rb
1129
+ - spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb
1126
1130
  - spec/mongoid/criteria/queryable/extensions/regexp_spec.rb
1127
1131
  - spec/mongoid/criteria/queryable/extensions/set_spec.rb
1128
1132
  - spec/mongoid/criteria/queryable/extensions/string_spec.rb
@@ -1234,6 +1238,7 @@ test_files:
1234
1238
  - spec/mongoid/matchable/ne_spec.rb
1235
1239
  - spec/mongoid/matchable/nin_spec.rb
1236
1240
  - spec/mongoid/matchable/or_spec.rb
1241
+ - spec/mongoid/matchable/regexp_spec.rb
1237
1242
  - spec/mongoid/matchable/size_spec.rb
1238
1243
  - spec/mongoid/matchable_spec.rb
1239
1244
  - spec/mongoid/persistable/creatable_spec.rb
metadata.gz.sig CHANGED
@@ -1 +1 @@
1
- '���$l��Փ����Z�pkSu�%�)@���Z�$�0kj�b+�t��tQ�!�Mȹ�����KdL0��AS��H���՝���#k@y2�/[`�I�?m��V�]U��L��f�`-aЉ�������A>��<�`�x��G[ �W0懍2�)k���6blW��!����75�|X������f8Z��)+D�6幩�2��T�N�H.^0a����&5\�� �L�L����C.l
1
+ \1��j��XD�|� @m3-@��{�MG�谞�kb��V�$O� ���E[U/��Q���b\77��戮ߨ�s�\����]E ��KFw(2h#������$;s-�����W� #@k�c���%@c�G���B6 �GD�WyqA�Y[� �j4�v� ��x9߮(����j]an�����ۚ~���ྲf����yYY�N�@�4z61�Y��6�~i2=�#��stz���ŚWqi��