mongoid 7.4.3 → 7.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/config/locales/en.yml +7 -0
- data/lib/mongoid/association/embedded/batchable.rb +3 -20
- data/lib/mongoid/association/macros.rb +20 -0
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +12 -8
- data/lib/mongoid/association/referenced/has_many/proxy.rb +2 -2
- data/lib/mongoid/atomic/paths/embedded/many.rb +0 -19
- data/lib/mongoid/config.rb +6 -1
- data/lib/mongoid/contextual/memory.rb +144 -12
- data/lib/mongoid/contextual/mongo.rb +118 -26
- data/lib/mongoid/contextual/none.rb +45 -1
- data/lib/mongoid/criteria/queryable/extensions/array.rb +2 -0
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +2 -0
- data/lib/mongoid/criteria/queryable/mergeable.rb +21 -0
- data/lib/mongoid/criteria/queryable/selectable.rb +26 -10
- data/lib/mongoid/criteria.rb +2 -0
- data/lib/mongoid/document.rb +2 -0
- data/lib/mongoid/equality.rb +4 -4
- data/lib/mongoid/errors/document_not_found.rb +23 -6
- data/lib/mongoid/fields.rb +145 -21
- data/lib/mongoid/findable.rb +20 -5
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/warnings.rb +29 -0
- data/lib/mongoid.rb +1 -0
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +4 -3
- data/spec/integration/i18n_fallbacks_spec.rb +15 -1
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +0 -21
- data/spec/mongoid/association/embedded/embeds_many_models.rb +0 -121
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +0 -8
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +54 -0
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +8 -24
- data/spec/mongoid/clients/options_spec.rb +1 -0
- data/spec/mongoid/config_spec.rb +10 -4
- data/spec/mongoid/contextual/memory_spec.rb +826 -65
- data/spec/mongoid/contextual/mongo_spec.rb +781 -18
- data/spec/mongoid/contextual/none_spec.rb +46 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +212 -39
- data/spec/mongoid/criteria_spec.rb +8 -0
- data/spec/mongoid/equality_spec.rb +12 -12
- data/spec/mongoid/errors/document_not_found_spec.rb +49 -0
- data/spec/mongoid/findable_spec.rb +30 -0
- data/spec/support/models/code.rb +2 -0
- data.tar.gz.sig +0 -0
- metadata +3 -2
- metadata.gz.sig +0 -0
@@ -67,124 +67,3 @@ class EmmOuter
|
|
67
67
|
|
68
68
|
field :level, :type => Integer
|
69
69
|
end
|
70
|
-
|
71
|
-
class EmmCustomerAddress
|
72
|
-
include Mongoid::Document
|
73
|
-
|
74
|
-
embedded_in :addressable, polymorphic: true, inverse_of: :work_address
|
75
|
-
end
|
76
|
-
|
77
|
-
class EmmFriend
|
78
|
-
include Mongoid::Document
|
79
|
-
|
80
|
-
embedded_in :befriendable, polymorphic: true
|
81
|
-
end
|
82
|
-
|
83
|
-
class EmmCustomer
|
84
|
-
include Mongoid::Document
|
85
|
-
|
86
|
-
embeds_one :home_address, class_name: 'EmmCustomerAddress', as: :addressable
|
87
|
-
embeds_one :work_address, class_name: 'EmmCustomerAddress', as: :addressable
|
88
|
-
|
89
|
-
embeds_many :close_friends, class_name: 'EmmFriend', as: :befriendable
|
90
|
-
embeds_many :acquaintances, class_name: 'EmmFriend', as: :befriendable
|
91
|
-
end
|
92
|
-
|
93
|
-
class EmmUser
|
94
|
-
include Mongoid::Document
|
95
|
-
include Mongoid::Timestamps
|
96
|
-
|
97
|
-
embeds_many :orders, class_name: 'EmmOrder'
|
98
|
-
end
|
99
|
-
|
100
|
-
class EmmOrder
|
101
|
-
include Mongoid::Document
|
102
|
-
|
103
|
-
field :amount, type: Integer
|
104
|
-
|
105
|
-
embedded_in :user, class_name: 'EmmUser'
|
106
|
-
end
|
107
|
-
|
108
|
-
module EmmSpec
|
109
|
-
# There is also a top-level Car class defined.
|
110
|
-
class Car
|
111
|
-
include Mongoid::Document
|
112
|
-
|
113
|
-
embeds_many :doors
|
114
|
-
end
|
115
|
-
|
116
|
-
class Door
|
117
|
-
include Mongoid::Document
|
118
|
-
|
119
|
-
embedded_in :car
|
120
|
-
end
|
121
|
-
|
122
|
-
class Tank
|
123
|
-
include Mongoid::Document
|
124
|
-
|
125
|
-
embeds_many :guns
|
126
|
-
embeds_many :emm_turrets
|
127
|
-
# This association references a model that is not in our module,
|
128
|
-
# and it does not define class_name hence Mongoid will not be able to
|
129
|
-
# figure out the inverse for this association.
|
130
|
-
embeds_many :emm_hatches
|
131
|
-
|
132
|
-
# class_name is intentionally unqualified, references a class in the
|
133
|
-
# same module. Rails permits class_name to be unqualified like this.
|
134
|
-
embeds_many :launchers, class_name: 'Launcher'
|
135
|
-
end
|
136
|
-
|
137
|
-
class Gun
|
138
|
-
include Mongoid::Document
|
139
|
-
|
140
|
-
embedded_in :tank
|
141
|
-
end
|
142
|
-
|
143
|
-
class Launcher
|
144
|
-
include Mongoid::Document
|
145
|
-
|
146
|
-
# class_name is intentionally unqualified.
|
147
|
-
embedded_in :tank, class_name: 'Tank'
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
# This is intentionally on top level.
|
152
|
-
class EmmTurret
|
153
|
-
include Mongoid::Document
|
154
|
-
|
155
|
-
embedded_in :tank, class_name: 'EmmSpec::Tank'
|
156
|
-
end
|
157
|
-
|
158
|
-
# This is intentionally on top level.
|
159
|
-
class EmmHatch
|
160
|
-
include Mongoid::Document
|
161
|
-
|
162
|
-
# No :class_name option on this association intentionally.
|
163
|
-
embedded_in :tank
|
164
|
-
end
|
165
|
-
|
166
|
-
class EmmPost
|
167
|
-
include Mongoid::Document
|
168
|
-
|
169
|
-
embeds_many :company_tags, class_name: "EmmCompanyTag"
|
170
|
-
embeds_many :user_tags, class_name: "EmmUserTag"
|
171
|
-
end
|
172
|
-
|
173
|
-
|
174
|
-
class EmmCompanyTag
|
175
|
-
include Mongoid::Document
|
176
|
-
|
177
|
-
field :title, type: String
|
178
|
-
|
179
|
-
embedded_in :post, class_name: "EmmPost"
|
180
|
-
end
|
181
|
-
|
182
|
-
|
183
|
-
class EmmUserTag
|
184
|
-
include Mongoid::Document
|
185
|
-
|
186
|
-
field :title, type: String
|
187
|
-
|
188
|
-
embedded_in :post, class_name: "EmmPost"
|
189
|
-
end
|
190
|
-
|
@@ -2394,10 +2394,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
2394
2394
|
it "removes the ids from the foreign key" do
|
2395
2395
|
expect(person.preference_ids).to eq([ preference_two.id ])
|
2396
2396
|
end
|
2397
|
-
|
2398
|
-
it "sets the association locally" do
|
2399
|
-
expect(person.preferences).to eq([preference_two])
|
2400
|
-
end
|
2401
2397
|
end
|
2402
2398
|
|
2403
2399
|
context "when conditions are not provided" do
|
@@ -2424,10 +2420,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
2424
2420
|
it "returns the number of documents deleted" do
|
2425
2421
|
expect(deleted).to eq(2)
|
2426
2422
|
end
|
2427
|
-
|
2428
|
-
it "sets the association locally" do
|
2429
|
-
expect(person.preferences).to eq([])
|
2430
|
-
end
|
2431
2423
|
end
|
2432
2424
|
end
|
2433
2425
|
end
|
@@ -1264,6 +1264,33 @@ describe Mongoid::Association::Referenced::HasMany::Enumerable do
|
|
1264
1264
|
end
|
1265
1265
|
end
|
1266
1266
|
|
1267
|
+
context 'when including a limit' do
|
1268
|
+
|
1269
|
+
let(:person) do
|
1270
|
+
Person.create!
|
1271
|
+
end
|
1272
|
+
|
1273
|
+
let(:criteria) do
|
1274
|
+
Post.where(person_id: person.id)
|
1275
|
+
end
|
1276
|
+
|
1277
|
+
let(:enumerable) do
|
1278
|
+
described_class.new(criteria)
|
1279
|
+
end
|
1280
|
+
|
1281
|
+
let!(:first_post) do
|
1282
|
+
person.posts.create!(title: "One")
|
1283
|
+
end
|
1284
|
+
|
1285
|
+
let!(:second_post) do
|
1286
|
+
person.posts.create!(title: "Two")
|
1287
|
+
end
|
1288
|
+
|
1289
|
+
it 'returns the matching document' do
|
1290
|
+
expect(enumerable.first(1)).to eq([first_post])
|
1291
|
+
end
|
1292
|
+
end
|
1293
|
+
|
1267
1294
|
context 'when the id_sort option is not provided' do
|
1268
1295
|
|
1269
1296
|
let(:person) do
|
@@ -1707,6 +1734,33 @@ describe Mongoid::Association::Referenced::HasMany::Enumerable do
|
|
1707
1734
|
end
|
1708
1735
|
end
|
1709
1736
|
|
1737
|
+
context 'when including a limit' do
|
1738
|
+
|
1739
|
+
let(:person) do
|
1740
|
+
Person.create!
|
1741
|
+
end
|
1742
|
+
|
1743
|
+
let(:criteria) do
|
1744
|
+
Post.where(person_id: person.id)
|
1745
|
+
end
|
1746
|
+
|
1747
|
+
let(:enumerable) do
|
1748
|
+
described_class.new(criteria)
|
1749
|
+
end
|
1750
|
+
|
1751
|
+
let!(:first_post) do
|
1752
|
+
person.posts.create!(title: "One")
|
1753
|
+
end
|
1754
|
+
|
1755
|
+
let!(:second_post) do
|
1756
|
+
person.posts.create!(title: "Two")
|
1757
|
+
end
|
1758
|
+
|
1759
|
+
it 'returns the matching document' do
|
1760
|
+
expect(enumerable.last(1)).to eq([second_post])
|
1761
|
+
end
|
1762
|
+
end
|
1763
|
+
|
1710
1764
|
context 'when the id_sort option is none' do
|
1711
1765
|
|
1712
1766
|
let(:person) do
|
@@ -2239,8 +2239,10 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
2239
2239
|
Person.create!(username: 'durran')
|
2240
2240
|
end
|
2241
2241
|
|
2242
|
-
|
2243
|
-
|
2242
|
+
before do
|
2243
|
+
person.posts.create!(title: "Testing")
|
2244
|
+
person.posts.create!(title: "Test")
|
2245
|
+
end
|
2244
2246
|
|
2245
2247
|
it "removes the correct posts" do
|
2246
2248
|
person.posts.send(method, { title: "Testing" })
|
@@ -2256,11 +2258,6 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
2256
2258
|
it "returns the number of documents deleted" do
|
2257
2259
|
expect(person.posts.send(method, { title: "Testing" })).to eq(1)
|
2258
2260
|
end
|
2259
|
-
|
2260
|
-
it "sets the association locally" do
|
2261
|
-
person.posts.send(method, { title: "Testing" })
|
2262
|
-
expect(person.posts).to eq([post2])
|
2263
|
-
end
|
2264
2261
|
end
|
2265
2262
|
|
2266
2263
|
context "when conditions are not provided" do
|
@@ -2287,11 +2284,6 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
2287
2284
|
it "returns the number of documents deleted" do
|
2288
2285
|
expect(person.posts.send(method)).to eq(2)
|
2289
2286
|
end
|
2290
|
-
|
2291
|
-
it "sets the association locally" do
|
2292
|
-
person.posts.send(method)
|
2293
|
-
expect(person.posts).to eq([])
|
2294
|
-
end
|
2295
2287
|
end
|
2296
2288
|
end
|
2297
2289
|
|
@@ -2303,8 +2295,10 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
2303
2295
|
Movie.create!(title: "Bladerunner")
|
2304
2296
|
end
|
2305
2297
|
|
2306
|
-
|
2307
|
-
|
2298
|
+
before do
|
2299
|
+
movie.ratings.create!(value: 1)
|
2300
|
+
movie.ratings.create!(value: 2)
|
2301
|
+
end
|
2308
2302
|
|
2309
2303
|
it "removes the correct ratings" do
|
2310
2304
|
movie.ratings.send(method, { value: 1 })
|
@@ -2319,11 +2313,6 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
2319
2313
|
it "returns the number of documents deleted" do
|
2320
2314
|
expect(movie.ratings.send(method, { value: 1 })).to eq(1)
|
2321
2315
|
end
|
2322
|
-
|
2323
|
-
it "sets the association locally" do
|
2324
|
-
movie.ratings.send(method, { value: 1 })
|
2325
|
-
expect(movie.ratings).to eq([rating2])
|
2326
|
-
end
|
2327
2316
|
end
|
2328
2317
|
|
2329
2318
|
context "when conditions are not provided" do
|
@@ -2350,11 +2339,6 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
2350
2339
|
it "returns the number of documents deleted" do
|
2351
2340
|
expect(movie.ratings.send(method)).to eq(2)
|
2352
2341
|
end
|
2353
|
-
|
2354
|
-
it "sets the association locally" do
|
2355
|
-
movie.ratings.send(method)
|
2356
|
-
expect(movie.ratings).to eq([])
|
2357
|
-
end
|
2358
2342
|
end
|
2359
2343
|
end
|
2360
2344
|
end
|
data/spec/mongoid/config_spec.rb
CHANGED
@@ -204,7 +204,7 @@ describe Mongoid::Config do
|
|
204
204
|
|
205
205
|
Mongoid.configure { |config| config.load_configuration(configuration) }
|
206
206
|
|
207
|
-
expect(Mongoid::Config.discriminator_key).to
|
207
|
+
expect(Mongoid::Config.discriminator_key).to eq("_type")
|
208
208
|
end
|
209
209
|
end
|
210
210
|
|
@@ -215,11 +215,11 @@ describe Mongoid::Config do
|
|
215
215
|
|
216
216
|
Mongoid.configure { |config| config.load_configuration(configuration) }
|
217
217
|
|
218
|
-
expect(Mongoid::Config.discriminator_key).to
|
218
|
+
expect(Mongoid::Config.discriminator_key).to eq("test")
|
219
219
|
end
|
220
220
|
|
221
221
|
it 'is set globally' do
|
222
|
-
expect(Mongoid.discriminator_key).to
|
222
|
+
expect(Mongoid.discriminator_key).to eq("test")
|
223
223
|
end
|
224
224
|
end
|
225
225
|
end
|
@@ -260,7 +260,7 @@ describe Mongoid::Config do
|
|
260
260
|
let(:conf) { CONFIG }
|
261
261
|
|
262
262
|
it "it is set to its default" do
|
263
|
-
expect(Mongoid.send(option)).to
|
263
|
+
expect(Mongoid.send(option)).to eq(default)
|
264
264
|
end
|
265
265
|
end
|
266
266
|
end
|
@@ -328,6 +328,12 @@ describe Mongoid::Config do
|
|
328
328
|
it_behaves_like "a config option"
|
329
329
|
end
|
330
330
|
|
331
|
+
context 'when setting the overwrite_chained_operators option in the config' do
|
332
|
+
let(:option) { :overwrite_chained_operators }
|
333
|
+
let(:default) { true }
|
334
|
+
|
335
|
+
it_behaves_like "a config option"
|
336
|
+
end
|
331
337
|
|
332
338
|
describe "#load!" do
|
333
339
|
|