mongoid 7.0.11 → 7.0.12

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2db36cde93b00ddee6d916461da83d9bfaf6c0ee58e8a82fac70b506256c6892
4
- data.tar.gz: 06a177507dd8099105f3d851c5b92d371ba9f8a399946944b1cea60c91ac1a34
3
+ metadata.gz: '08107532375c756a9a063a167169b570fa9d5f195e753a4f19a70ee7778eff1c'
4
+ data.tar.gz: addbf1ebd6dc0edc11a2604b4e3c1bf7297d67ad12739dcd44e981d2a8949cac
5
5
  SHA512:
6
- metadata.gz: 5f42d1faa7ae4f8815fe338eca85e76bbe5dc434a1dad4cbe6f883c0f4e5cd057d0a40898258306b238a10f80446699d70898b4b3dafa535f5fb1dfa3f5d71ba
7
- data.tar.gz: e3bfe307cb9e3bed02a247a27ad68b8556672badb4b5162410ae2b675fb61a99f9ca6fb4926af77294ba0c11b514eeeb73cbe3beeb4edbe240ae438d49e837ec
6
+ metadata.gz: 77dbc0a24838853d496fd5957770ef250c952cf57a126b36845540e6421888aa3abc9465ecb64d0a55940324c02a7e22a37935729deec400b6d2f0510138930a
7
+ data.tar.gz: 0b78a7bbe3049aff86657a02e88f61ef4b8281f5cd198567bbe153d44f7f56d74eca7b0119a40d9b8188ffb0b78f73847abbba82b39b601220f177ef7ac80a61
checksums.yaml.gz.sig CHANGED
Binary file
data.tar.gz.sig CHANGED
Binary file
data/Rakefile CHANGED
@@ -20,11 +20,8 @@ task :install => :build do
20
20
  system "sudo gem install mongoid-#{Mongoid::VERSION}.gem"
21
21
  end
22
22
 
23
- task :release => :build do
24
- system "git tag -a v#{Mongoid::VERSION} -m 'Tagging #{Mongoid::VERSION}'"
25
- system "git push --tags"
26
- system "gem push mongoid-#{Mongoid::VERSION}.gem"
27
- system "rm mongoid-#{Mongoid::VERSION}.gem"
23
+ task :release do
24
+ raise "Please use ./release.sh to release"
28
25
  end
29
26
 
30
27
  RSpec::Core::RakeTask.new("spec") do |spec|
@@ -57,5 +54,3 @@ namespace :release do
57
54
  end
58
55
  end
59
56
  end
60
-
61
- task :release => ['release:check_private_key', 'release:do']
@@ -227,8 +227,9 @@ module Mongoid
227
227
  became = klass.new(clone_document)
228
228
  became._id = _id
229
229
  became.instance_variable_set(:@changed_attributes, changed_attributes)
230
- became.instance_variable_set(:@errors, ActiveModel::Errors.new(became))
231
- became.errors.instance_variable_set(:@messages, errors.instance_variable_get(:@messages))
230
+ new_errors = ActiveModel::Errors.new(became)
231
+ new_errors.copy!(errors)
232
+ became.instance_variable_set(:@errors, new_errors)
232
233
  became.instance_variable_set(:@new_record, new_record?)
233
234
  became.instance_variable_set(:@destroyed, destroyed?)
234
235
  became.changed_attributes["_type"] = self.class.to_s
@@ -228,9 +228,11 @@ module Mongoid
228
228
  # document.halted_callback_hook(filter)
229
229
  #
230
230
  # @param [ Symbol ] filter The callback that halted.
231
+ # @param [ Symbol ] name The name of the callback that was halted
232
+ # (requires Rails 6.1+)
231
233
  #
232
234
  # @since 3.0.3
233
- def halted_callback_hook(filter)
235
+ def halted_callback_hook(filter, name = nil)
234
236
  @before_callback_halted = true
235
237
  end
236
238
 
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module Mongoid
4
- VERSION = "7.0.11"
4
+ VERSION = "7.0.12"
5
5
  end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
4
+ class Customer
5
+ include Mongoid::Document
6
+
7
+ field :name
8
+
9
+ embeds_one :home_address, class_name: 'CustomerAddress', as: :addressable
10
+ embeds_one :work_address, class_name: 'CustomerAddress', as: :addressable
11
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
4
+ class CustomerAddress
5
+ include Mongoid::Document
6
+
7
+ field :street, type: String
8
+ field :city, type: String
9
+ field :state, type: String
10
+
11
+ embedded_in :addressable, polymorphic: true
12
+ end
@@ -0,0 +1,49 @@
1
+ class Galaxy
2
+ include Mongoid::Document
3
+
4
+ field :age, type: Integer
5
+
6
+ before_validation :set_age
7
+
8
+ embeds_many :stars
9
+
10
+ private
11
+
12
+ def set_age
13
+ self.age ||= 100_000
14
+ end
15
+ end
16
+
17
+ class Star
18
+ include Mongoid::Document
19
+
20
+ embedded_in :galaxy
21
+
22
+ field :age, type: Integer
23
+
24
+ before_validation :set_age
25
+
26
+ embeds_many :planets
27
+
28
+ private
29
+
30
+ def set_age
31
+ self.age ||= 42_000
32
+ end
33
+ end
34
+
35
+ class Planet
36
+ include Mongoid::Document
37
+
38
+ embedded_in :star
39
+
40
+ field :age, type: Integer
41
+
42
+ before_validation :set_age
43
+
44
+ private
45
+
46
+ def set_age
47
+ self.age ||= 2_000
48
+ end
49
+ end
@@ -0,0 +1,216 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
4
+ require 'spec_helper'
5
+ require_relative './callbacks_models'
6
+
7
+ describe 'callbacks integration tests' do
8
+ context 'when modifying attributes in a callback' do
9
+
10
+ context 'when creating top-level document' do
11
+ context 'top level document' do
12
+ let(:instance) do
13
+ Galaxy.create!
14
+ end
15
+
16
+ it 'writes the attribute value into the model' do
17
+ instance.age.should == 100_000
18
+ end
19
+
20
+ it 'persists the attribute value' do
21
+ Galaxy.find(instance.id).age.should == 100_000
22
+ end
23
+ end
24
+
25
+ context 'embedded document' do
26
+ shared_examples 'persists the attribute value' do
27
+ it 'writes the attribute value into the model' do
28
+ instance.stars.first.age.should == 42_000
29
+ end
30
+
31
+ it 'persists the attribute value' do
32
+ Galaxy.find(instance.id).stars.first.age.should == 42_000
33
+ end
34
+ end
35
+
36
+ context 'set as a document instance' do
37
+ let(:instance) do
38
+ Galaxy.create!(stars: [Star.new])
39
+ end
40
+
41
+ include_examples 'persists the attribute value'
42
+ end
43
+
44
+ context 'set as attributes on parent' do
45
+ let(:instance) do
46
+ Galaxy.create!(stars: [{}])
47
+ end
48
+
49
+ include_examples 'persists the attribute value'
50
+ end
51
+ end
52
+
53
+ context 'nested embedded document' do
54
+ shared_examples 'persists the attribute value' do
55
+ it 'writes the attribute value into the model' do
56
+ instance.stars.first.planets.first.age.should == 2_000
57
+ end
58
+
59
+ it 'persists the attribute value' do
60
+ Galaxy.find(instance.id).stars.first.planets.first.age.should == 2_000
61
+ end
62
+ end
63
+
64
+ context 'set as a document instance' do
65
+ let(:instance) do
66
+ Galaxy.create!(stars: [Star.new(
67
+ planets: [Planet.new],
68
+ )])
69
+ end
70
+
71
+ include_examples 'persists the attribute value'
72
+ end
73
+
74
+ context 'set as attributes on parent' do
75
+ let(:instance) do
76
+ Galaxy.create!(stars: [
77
+ planets: [{}],
78
+ ])
79
+ end
80
+
81
+ include_examples 'persists the attribute value'
82
+ end
83
+ end
84
+ end
85
+
86
+ context 'when updating top-level document via #save' do
87
+ let!(:instance) do
88
+ Galaxy.create!
89
+ end
90
+
91
+ context 'embedded document' do
92
+ shared_examples 'persists the attribute value' do
93
+ it 'writes the attribute value into the model' do
94
+ instance.stars.first.age.should == 42_000
95
+ end
96
+
97
+ it 'persists the attribute value' do
98
+ Galaxy.find(instance.id).stars.first.age.should == 42_000
99
+ end
100
+ end
101
+
102
+ context 'set as a document instance' do
103
+ before do
104
+ instance.stars = [Star.new]
105
+ instance.save!
106
+ end
107
+
108
+ include_examples 'persists the attribute value'
109
+ end
110
+
111
+ context 'set as attributes on parent' do
112
+ before do
113
+ instance.stars = [{}]
114
+ instance.save!
115
+ end
116
+
117
+ include_examples 'persists the attribute value'
118
+ end
119
+ end
120
+
121
+ context 'nested embedded document' do
122
+ shared_examples 'persists the attribute value' do
123
+ it 'writes the attribute value into the model' do
124
+ instance.stars.first.planets.first.age.should == 2_000
125
+ end
126
+
127
+ it 'persists the attribute value' do
128
+ Galaxy.find(instance.id).stars.first.planets.first.age.should == 2_000
129
+ end
130
+ end
131
+
132
+ context 'set as a document instance' do
133
+ before do
134
+ instance.stars = [Star.new(planets: [Planet.new])]
135
+ instance.save!
136
+ end
137
+
138
+ include_examples 'persists the attribute value'
139
+ end
140
+
141
+ context 'set as attributes on parent' do
142
+ before do
143
+ instance.stars = [planets: [{}]]
144
+ instance.save!
145
+ end
146
+
147
+ include_examples 'persists the attribute value'
148
+ end
149
+ end
150
+ end
151
+
152
+ context 'when updating top-level document via #update_attributes' do
153
+ let!(:instance) do
154
+ Galaxy.create!
155
+ end
156
+
157
+ context 'embedded document' do
158
+ shared_examples 'persists the attribute value' do
159
+ it 'writes the attribute value into the model' do
160
+ instance.stars.first.age.should == 42_000
161
+ end
162
+
163
+ it 'persists the attribute value' do
164
+ Galaxy.find(instance.id).stars.first.age.should == 42_000
165
+ end
166
+ end
167
+
168
+ context 'set as a document instance' do
169
+ before do
170
+ instance.update_attributes(stars: [Star.new])
171
+ end
172
+
173
+ include_examples 'persists the attribute value'
174
+ end
175
+
176
+ context 'set as attributes on parent' do
177
+ before do
178
+ instance.update_attributes(stars: [{}])
179
+ end
180
+
181
+ include_examples 'persists the attribute value'
182
+ end
183
+ end
184
+
185
+ context 'nested embedded document' do
186
+ shared_examples 'persists the attribute value' do
187
+ it 'writes the attribute value into the model' do
188
+ instance.stars.first.planets.first.age.should == 2_000
189
+ end
190
+
191
+ it 'persists the attribute value' do
192
+ pending 'MONGOID-4476'
193
+
194
+ Galaxy.find(instance.id).stars.first.planets.first.age.should == 2_000
195
+ end
196
+ end
197
+
198
+ context 'set as a document instance' do
199
+ before do
200
+ instance.update_attributes(stars: [Star.new(planets: [Planet.new])])
201
+ end
202
+
203
+ include_examples 'persists the attribute value'
204
+ end
205
+
206
+ context 'set as attributes on parent' do
207
+ before do
208
+ instance.update_attributes(stars: [planets: [{}]])
209
+ end
210
+
211
+ include_examples 'persists the attribute value'
212
+ end
213
+ end
214
+ end
215
+ end
216
+ end
@@ -504,4 +504,54 @@ describe Mongoid::Association::Embedded::EmbeddedIn::Proxy do
504
504
  end
505
505
  end
506
506
  end
507
+
508
+ context "when the same class is embedded multiple times" do
509
+
510
+ let(:customer) do
511
+ Customer.new
512
+ end
513
+
514
+ context "assignment after saving" do
515
+
516
+ it "correctly sets the association for the embedded class" do
517
+ pending 'MONGOID-5039'
518
+
519
+ customer.home_address = CustomerAddress.new
520
+ customer.work_address = CustomerAddress.new
521
+
522
+ expect(customer.home_address._association.store_as).to eq("home_address")
523
+ expect(customer.work_address._association.store_as).to eq("work_address")
524
+
525
+ expect(customer.home_address.instance_eval { _association.store_as }).to eq("home_address")
526
+ expect(customer.work_address.instance_eval { _association.store_as }).to eq("work_address")
527
+
528
+ customer.save!
529
+
530
+ customer.home_address = CustomerAddress.new
531
+ customer.work_address = CustomerAddress.new
532
+
533
+ expect(customer.home_address._association.store_as).to eq("home_address")
534
+ expect(customer.work_address._association.store_as).to eq("work_address")
535
+
536
+ expect(customer.home_address.instance_eval { _association.store_as }).to eq("home_address")
537
+ expect(customer.work_address.instance_eval { _association.store_as }).to eq("work_address")
538
+ end
539
+ end
540
+
541
+ context "inverse assignment" do
542
+
543
+ it "correctly sets the association for the embedded class" do
544
+ pending 'MONGOID-5039'
545
+
546
+ customer.work_address = CustomerAddress.new
547
+ customer.work_address.addressable = customer
548
+
549
+ expect(customer.home_address._association.store_as).to eq("home_address")
550
+ expect(customer.work_address._association.store_as).to eq("work_address")
551
+
552
+ expect(customer.home_address.instance_eval { _association.store_as }).to eq("home_address")
553
+ expect(customer.work_address.instance_eval { _association.store_as }).to eq("work_address")
554
+ end
555
+ end
556
+ end
507
557
  end
@@ -265,5 +265,46 @@ describe Mongoid::Atomic::Paths do
265
265
  end
266
266
  end
267
267
  end
268
+
269
+ context "when the same class is embedded in multiple associations" do
270
+
271
+ let(:customer) do
272
+ Customer.new
273
+ end
274
+
275
+ context "assignment after saving" do
276
+
277
+ it "correctly sets the association for the embedded class" do
278
+ pending 'MONGOID-5039'
279
+
280
+ customer.home_address = CustomerAddress.new
281
+ customer.work_address = CustomerAddress.new
282
+
283
+ expect(customer.home_address.atomic_path).to eq("home_address")
284
+ expect(customer.work_address.atomic_path).to eq("work_address")
285
+
286
+ customer.save!
287
+
288
+ customer.home_address = CustomerAddress.new
289
+ customer.work_address = CustomerAddress.new
290
+
291
+ expect(customer.home_address.atomic_path).to eq("home_address")
292
+ expect(customer.work_address.atomic_path).to eq("work_address")
293
+ end
294
+ end
295
+
296
+ context "inverse assignment" do
297
+
298
+ it "correctly returns the path for each embedded class" do
299
+ pending 'MONGOID-5039'
300
+
301
+ customer.work_address = CustomerAddress.new
302
+ customer.work_address.addressable = customer
303
+
304
+ expect(customer.home_address.atomic_path).to eq("home_address")
305
+ expect(customer.work_address.atomic_path).to eq("work_address")
306
+ end
307
+ end
308
+ end
268
309
  end
269
310
  end