mongoid 6.3.0 → 6.4.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.
- checksums.yaml +5 -5
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/config/locales/en.yml +21 -0
- data/lib/mongoid.rb +1 -1
- data/lib/mongoid/clients.rb +2 -0
- data/lib/mongoid/clients/sessions.rb +113 -0
- data/lib/mongoid/clients/storage_options.rb +1 -0
- data/lib/mongoid/contextual/aggregable/mongo.rb +1 -1
- data/lib/mongoid/contextual/map_reduce.rb +6 -2
- data/lib/mongoid/contextual/memory.rb +7 -2
- data/lib/mongoid/contextual/mongo.rb +11 -2
- data/lib/mongoid/criteria.rb +1 -0
- data/lib/mongoid/criteria/queryable/mergeable.rb +3 -1
- data/lib/mongoid/errors.rb +1 -0
- data/lib/mongoid/errors/invalid_session_use.rb +24 -0
- data/lib/mongoid/indexable.rb +4 -4
- data/lib/mongoid/persistable.rb +1 -1
- data/lib/mongoid/persistable/creatable.rb +4 -2
- data/lib/mongoid/persistable/deletable.rb +4 -2
- data/lib/mongoid/persistable/destroyable.rb +1 -5
- data/lib/mongoid/persistable/updatable.rb +2 -2
- data/lib/mongoid/persistable/upsertable.rb +2 -1
- data/lib/mongoid/relations/embedded/batchable.rb +10 -4
- data/lib/mongoid/relations/many.rb +4 -0
- data/lib/mongoid/relations/referenced/many.rb +1 -1
- data/lib/mongoid/relations/touchable.rb +1 -1
- data/lib/mongoid/reloadable.rb +1 -1
- data/lib/mongoid/tasks/database.rb +3 -2
- data/lib/mongoid/threaded.rb +38 -0
- data/lib/mongoid/version.rb +1 -1
- data/spec/mongoid/attributes/nested_spec.rb +4 -0
- data/spec/mongoid/clients/sessions_spec.rb +325 -0
- data/spec/mongoid/contextual/mongo_spec.rb +38 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +32 -3
- data/spec/mongoid/interceptable_spec.rb +1 -1
- data/spec/mongoid/persistable/deletable_spec.rb +19 -0
- data/spec/mongoid/persistable/destroyable_spec.rb +19 -0
- data/spec/mongoid/persistable_spec.rb +16 -16
- data/spec/spec_helper.rb +70 -0
- metadata +17 -7
- metadata.gz.sig +0 -0
@@ -275,6 +275,23 @@ describe Mongoid::Contextual::Mongo do
|
|
275
275
|
expect(Band.count).to eq(0)
|
276
276
|
end
|
277
277
|
end
|
278
|
+
|
279
|
+
context 'when the write concern is unacknowledged' do
|
280
|
+
|
281
|
+
let(:criteria) do
|
282
|
+
Band.all
|
283
|
+
end
|
284
|
+
|
285
|
+
let!(:deleted) do
|
286
|
+
criteria.with(write: { w: 0 }) do |crit|
|
287
|
+
crit.send(method)
|
288
|
+
end
|
289
|
+
end
|
290
|
+
|
291
|
+
it 'returns 0' do
|
292
|
+
expect(deleted).to eq(0)
|
293
|
+
end
|
294
|
+
end
|
278
295
|
end
|
279
296
|
end
|
280
297
|
|
@@ -363,6 +380,27 @@ describe Mongoid::Contextual::Mongo do
|
|
363
380
|
end
|
364
381
|
end
|
365
382
|
end
|
383
|
+
|
384
|
+
context 'when the write concern is unacknowledged' do
|
385
|
+
|
386
|
+
before do
|
387
|
+
2.times { Band.create }
|
388
|
+
end
|
389
|
+
|
390
|
+
let(:criteria) do
|
391
|
+
Band.all
|
392
|
+
end
|
393
|
+
|
394
|
+
let!(:deleted) do
|
395
|
+
criteria.with(write: { w: 0 }) do |crit|
|
396
|
+
crit.send(method)
|
397
|
+
end
|
398
|
+
end
|
399
|
+
|
400
|
+
it 'returns 0' do
|
401
|
+
expect(deleted).to eq(0)
|
402
|
+
end
|
403
|
+
end
|
366
404
|
end
|
367
405
|
|
368
406
|
describe "#distinct" do
|
@@ -1449,7 +1449,7 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
1449
1449
|
|
1450
1450
|
context "when the criterion are on the same field" do
|
1451
1451
|
|
1452
|
-
context "when the
|
1452
|
+
context "when the strategy is the default (intersection)" do
|
1453
1453
|
|
1454
1454
|
let(:selection) do
|
1455
1455
|
query.in(first: [ 1, 2 ].freeze).in(first: [ 2, 3 ])
|
@@ -1466,6 +1466,35 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
1466
1466
|
end
|
1467
1467
|
end
|
1468
1468
|
|
1469
|
+
context 'when the field is aliased' do
|
1470
|
+
|
1471
|
+
before(:all) do
|
1472
|
+
class TestModel
|
1473
|
+
include Mongoid::Document
|
1474
|
+
end
|
1475
|
+
end
|
1476
|
+
|
1477
|
+
after(:all) do
|
1478
|
+
Object.send(:remove_const, :TestModel)
|
1479
|
+
end
|
1480
|
+
|
1481
|
+
let(:bson_object_id) do
|
1482
|
+
BSON::ObjectId.new
|
1483
|
+
end
|
1484
|
+
|
1485
|
+
let(:selection) do
|
1486
|
+
TestModel.in(id: [bson_object_id.to_s]).in(id: [bson_object_id.to_s])
|
1487
|
+
end
|
1488
|
+
|
1489
|
+
it "intersects the $in selectors" do
|
1490
|
+
expect(selection.selector).to eq("_id" => { "$in" => [ bson_object_id ] })
|
1491
|
+
end
|
1492
|
+
|
1493
|
+
it "returns a cloned query" do
|
1494
|
+
expect(selection).to_not equal(query)
|
1495
|
+
end
|
1496
|
+
end
|
1497
|
+
|
1469
1498
|
context "when the stretegy is intersect" do
|
1470
1499
|
|
1471
1500
|
let(:selection) do
|
@@ -1483,7 +1512,7 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
1483
1512
|
end
|
1484
1513
|
end
|
1485
1514
|
|
1486
|
-
context "when the
|
1515
|
+
context "when the strategy is override" do
|
1487
1516
|
|
1488
1517
|
let(:selection) do
|
1489
1518
|
query.in(first: [ 1, 2 ]).override.in(first: [ 3, 4 ])
|
@@ -1500,7 +1529,7 @@ describe Mongoid::Criteria::Queryable::Selectable do
|
|
1500
1529
|
end
|
1501
1530
|
end
|
1502
1531
|
|
1503
|
-
context "when the
|
1532
|
+
context "when the strategy is union" do
|
1504
1533
|
|
1505
1534
|
let(:selection) do
|
1506
1535
|
query.in(first: [ 1, 2 ]).union.in(first: [ 3, 4 ])
|
@@ -228,6 +228,25 @@ describe Mongoid::Persistable::Deletable do
|
|
228
228
|
expect(removed).to eq(1)
|
229
229
|
end
|
230
230
|
end
|
231
|
+
|
232
|
+
context 'when the write concern is unacknowledged' do
|
233
|
+
|
234
|
+
before do
|
235
|
+
Person.create(title: 'miss')
|
236
|
+
end
|
237
|
+
|
238
|
+
let!(:deleted) do
|
239
|
+
Person.with(write: { w: 0 }) { |klass| klass.delete_all(title: "sir") }
|
240
|
+
end
|
241
|
+
|
242
|
+
it "removes the matching documents" do
|
243
|
+
expect(Person.where(title: 'miss').count).to eq(1)
|
244
|
+
end
|
245
|
+
|
246
|
+
it "returns 0" do
|
247
|
+
expect(deleted).to eq(0)
|
248
|
+
end
|
249
|
+
end
|
231
250
|
end
|
232
251
|
end
|
233
252
|
end
|
@@ -222,6 +222,25 @@ describe Mongoid::Persistable::Destroyable do
|
|
222
222
|
end
|
223
223
|
end
|
224
224
|
|
225
|
+
context 'when the write concern is unacknowledged' do
|
226
|
+
|
227
|
+
before do
|
228
|
+
Person.create(title: 'miss')
|
229
|
+
end
|
230
|
+
|
231
|
+
let!(:removed) do
|
232
|
+
Person.with(write: { w: 0 }) { |klass| klass.destroy_all(title: "sir") }
|
233
|
+
end
|
234
|
+
|
235
|
+
it "removes the matching documents" do
|
236
|
+
expect(Person.where(title: 'miss').count).to eq(1)
|
237
|
+
end
|
238
|
+
|
239
|
+
it "returns 0" do
|
240
|
+
expect(removed).to eq(0)
|
241
|
+
end
|
242
|
+
end
|
243
|
+
|
225
244
|
context 'when removing a list of embedded documents' do
|
226
245
|
|
227
246
|
context 'when the embedded documents list is reversed in memory' do
|
@@ -52,16 +52,16 @@ describe Mongoid::Persistable do
|
|
52
52
|
context "when not chaining the operations" do
|
53
53
|
|
54
54
|
let(:operations) do
|
55
|
-
{
|
55
|
+
[{
|
56
56
|
"$inc" => { "member_count" => 10 },
|
57
57
|
"$bit" => { "likes" => { :and => 13 }},
|
58
58
|
"$set" => { "name" => "Placebo" },
|
59
|
-
"$unset" => { "origin" => true }
|
60
|
-
|
59
|
+
"$unset" => { "origin" => true }},
|
60
|
+
{ session: nil }]
|
61
61
|
end
|
62
62
|
|
63
63
|
before do
|
64
|
-
expect_any_instance_of(Mongo::Collection::View).to receive(:update_one).with(operations).and_call_original
|
64
|
+
expect_any_instance_of(Mongo::Collection::View).to receive(:update_one).with(*operations).and_call_original
|
65
65
|
end
|
66
66
|
|
67
67
|
let!(:update) do
|
@@ -79,16 +79,16 @@ describe Mongoid::Persistable do
|
|
79
79
|
context "when chaining the operations" do
|
80
80
|
|
81
81
|
let(:operations) do
|
82
|
-
{
|
82
|
+
[{
|
83
83
|
"$inc" => { "member_count" => 10 },
|
84
84
|
"$bit" => { "likes" => { :and => 13 }},
|
85
85
|
"$set" => { "name" => "Placebo" },
|
86
|
-
"$unset" => { "origin" => true }
|
87
|
-
|
86
|
+
"$unset" => { "origin" => true }},
|
87
|
+
{ :session => nil } ]
|
88
88
|
end
|
89
89
|
|
90
90
|
before do
|
91
|
-
expect_any_instance_of(Mongo::Collection::View).to receive(:update_one).with(operations).and_call_original
|
91
|
+
expect_any_instance_of(Mongo::Collection::View).to receive(:update_one).with(*operations).and_call_original
|
92
92
|
end
|
93
93
|
|
94
94
|
let!(:update) do
|
@@ -107,16 +107,16 @@ describe Mongoid::Persistable do
|
|
107
107
|
context "when given multiple operations of the same type" do
|
108
108
|
|
109
109
|
let(:operations) do
|
110
|
-
{
|
110
|
+
[{
|
111
111
|
"$inc" => { "member_count" => 10, "other_count" => 10 },
|
112
112
|
"$bit" => { "likes" => { :and => 13 }},
|
113
113
|
"$set" => { "name" => "Placebo" },
|
114
|
-
"$unset" => { "origin" => true }
|
115
|
-
|
114
|
+
"$unset" => { "origin" => true }},
|
115
|
+
{ session: nil }]
|
116
116
|
end
|
117
117
|
|
118
118
|
before do
|
119
|
-
expect_any_instance_of(Mongo::Collection::View).to receive(:update_one).with(operations).and_call_original
|
119
|
+
expect_any_instance_of(Mongo::Collection::View).to receive(:update_one).with(*operations).and_call_original
|
120
120
|
end
|
121
121
|
|
122
122
|
let!(:update) do
|
@@ -144,16 +144,16 @@ describe Mongoid::Persistable do
|
|
144
144
|
context "when expecting the document to be yielded" do
|
145
145
|
|
146
146
|
let(:operations) do
|
147
|
-
{
|
147
|
+
[{
|
148
148
|
"$inc" => { "member_count" => 10 },
|
149
149
|
"$bit" => { "likes" => { :and => 13 }},
|
150
150
|
"$set" => { "name" => "Placebo" },
|
151
|
-
"$unset" => { "origin" => true }
|
152
|
-
|
151
|
+
"$unset" => { "origin" => true }},
|
152
|
+
{ session: nil }]
|
153
153
|
end
|
154
154
|
|
155
155
|
before do
|
156
|
-
expect_any_instance_of(Mongo::Collection::View).to receive(:update_one).with(operations).and_call_original
|
156
|
+
expect_any_instance_of(Mongo::Collection::View).to receive(:update_one).with(*operations).and_call_original
|
157
157
|
end
|
158
158
|
|
159
159
|
let!(:update) do
|
data/spec/spec_helper.rb
CHANGED
@@ -90,6 +90,7 @@ end
|
|
90
90
|
def array_filters_supported?
|
91
91
|
Mongoid::Clients.default.cluster.next_primary.features.array_filters_enabled?
|
92
92
|
end
|
93
|
+
alias :sessions_supported? :array_filters_supported?
|
93
94
|
|
94
95
|
# Set the database that the spec suite connects to.
|
95
96
|
Mongoid.configure do |config|
|
@@ -145,3 +146,72 @@ RSpec.configure do |config|
|
|
145
146
|
Mongoid.purge!
|
146
147
|
end
|
147
148
|
end
|
149
|
+
|
150
|
+
# A subscriber to be used with the Ruby driver for testing.
|
151
|
+
#
|
152
|
+
# @since 6.4.0
|
153
|
+
class EventSubscriber
|
154
|
+
|
155
|
+
# The started events.
|
156
|
+
#
|
157
|
+
# @since 6.4.0
|
158
|
+
attr_reader :started_events
|
159
|
+
|
160
|
+
# The succeeded events.
|
161
|
+
#
|
162
|
+
# @since 6.4.0
|
163
|
+
attr_reader :succeeded_events
|
164
|
+
|
165
|
+
# The failed events.
|
166
|
+
#
|
167
|
+
# @since 6.4.0
|
168
|
+
attr_reader :failed_events
|
169
|
+
|
170
|
+
# Create the test event subscriber.
|
171
|
+
#
|
172
|
+
# @example Create the subscriber
|
173
|
+
# EventSubscriber.new
|
174
|
+
#
|
175
|
+
# @since 6.4.0
|
176
|
+
def initialize
|
177
|
+
@started_events = []
|
178
|
+
@succeeded_events = []
|
179
|
+
@failed_events = []
|
180
|
+
end
|
181
|
+
|
182
|
+
# Cache the succeeded event.
|
183
|
+
#
|
184
|
+
# @param [ Event ] event The event.
|
185
|
+
#
|
186
|
+
# @since 6.4.0
|
187
|
+
def succeeded(event)
|
188
|
+
@succeeded_events.push(event)
|
189
|
+
end
|
190
|
+
|
191
|
+
# Cache the started event.
|
192
|
+
#
|
193
|
+
# @param [ Event ] event The event.
|
194
|
+
#
|
195
|
+
# @since 6.4.0
|
196
|
+
def started(event)
|
197
|
+
@started_events.push(event)
|
198
|
+
end
|
199
|
+
|
200
|
+
# Cache the failed event.
|
201
|
+
#
|
202
|
+
# @param [ Event ] event The event.
|
203
|
+
#
|
204
|
+
# @since 6.4.0
|
205
|
+
def failed(event)
|
206
|
+
@failed_events.push(event)
|
207
|
+
end
|
208
|
+
|
209
|
+
# Clear all cached events.
|
210
|
+
#
|
211
|
+
# @since 6.4.0
|
212
|
+
def clear_events!
|
213
|
+
@started_events = []
|
214
|
+
@succeeded_events = []
|
215
|
+
@failed_events = []
|
216
|
+
end
|
217
|
+
end
|
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.
|
4
|
+
version: 6.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Durran Jordan
|
@@ -30,29 +30,35 @@ cert_chain:
|
|
30
30
|
fxN/GvhskJEgmdQToxEBRLOu5/udtPpVe/hb3gk5hzsxcWuKN/VTi4SbtFQdz9cq
|
31
31
|
fqd6ctFDOqcJmOYdlSRgb9g8zm4BiNgFWPBSk8NsP7c=
|
32
32
|
-----END CERTIFICATE-----
|
33
|
-
date: 2018-
|
33
|
+
date: 2018-03-12 00:00:00.000000000 Z
|
34
34
|
dependencies:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: activemodel
|
37
37
|
requirement: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- - "
|
39
|
+
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '5.1'
|
42
|
+
- - "<"
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: 6.0.0
|
42
45
|
type: :runtime
|
43
46
|
prerelease: false
|
44
47
|
version_requirements: !ruby/object:Gem::Requirement
|
45
48
|
requirements:
|
46
|
-
- - "
|
49
|
+
- - ">="
|
47
50
|
- !ruby/object:Gem::Version
|
48
51
|
version: '5.1'
|
52
|
+
- - "<"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 6.0.0
|
49
55
|
- !ruby/object:Gem::Dependency
|
50
56
|
name: mongo
|
51
57
|
requirement: !ruby/object:Gem::Requirement
|
52
58
|
requirements:
|
53
59
|
- - ">="
|
54
60
|
- !ruby/object:Gem::Version
|
55
|
-
version: 2.5.
|
61
|
+
version: 2.5.1
|
56
62
|
- - "<"
|
57
63
|
- !ruby/object:Gem::Version
|
58
64
|
version: 3.0.0
|
@@ -62,7 +68,7 @@ dependencies:
|
|
62
68
|
requirements:
|
63
69
|
- - ">="
|
64
70
|
- !ruby/object:Gem::Version
|
65
|
-
version: 2.5.
|
71
|
+
version: 2.5.1
|
66
72
|
- - "<"
|
67
73
|
- !ruby/object:Gem::Version
|
68
74
|
version: 3.0.0
|
@@ -97,6 +103,7 @@ files:
|
|
97
103
|
- lib/mongoid/clients.rb
|
98
104
|
- lib/mongoid/clients/factory.rb
|
99
105
|
- lib/mongoid/clients/options.rb
|
106
|
+
- lib/mongoid/clients/sessions.rb
|
100
107
|
- lib/mongoid/clients/storage_options.rb
|
101
108
|
- lib/mongoid/clients/validators.rb
|
102
109
|
- lib/mongoid/clients/validators/storage.rb
|
@@ -179,6 +186,7 @@ files:
|
|
179
186
|
- lib/mongoid/errors/invalid_persistence_option.rb
|
180
187
|
- lib/mongoid/errors/invalid_relation.rb
|
181
188
|
- lib/mongoid/errors/invalid_scope.rb
|
189
|
+
- lib/mongoid/errors/invalid_session_use.rb
|
182
190
|
- lib/mongoid/errors/invalid_set_polymorphic_relation.rb
|
183
191
|
- lib/mongoid/errors/invalid_storage_options.rb
|
184
192
|
- lib/mongoid/errors/invalid_storage_parent.rb
|
@@ -598,6 +606,7 @@ files:
|
|
598
606
|
- spec/mongoid/changeable_spec.rb
|
599
607
|
- spec/mongoid/clients/factory_spec.rb
|
600
608
|
- spec/mongoid/clients/options_spec.rb
|
609
|
+
- spec/mongoid/clients/sessions_spec.rb
|
601
610
|
- spec/mongoid/clients_spec.rb
|
602
611
|
- spec/mongoid/composable_spec.rb
|
603
612
|
- spec/mongoid/config/environment_spec.rb
|
@@ -863,7 +872,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
863
872
|
version: 1.3.6
|
864
873
|
requirements: []
|
865
874
|
rubyforge_project: mongoid
|
866
|
-
rubygems_version: 2.
|
875
|
+
rubygems_version: 2.7.3
|
867
876
|
signing_key:
|
868
877
|
specification_version: 4
|
869
878
|
summary: Elegant Persistence in Ruby for MongoDB.
|
@@ -872,6 +881,7 @@ test_files:
|
|
872
881
|
- spec/mongoid/scopable_spec.rb
|
873
882
|
- spec/mongoid/clients/factory_spec.rb
|
874
883
|
- spec/mongoid/clients/options_spec.rb
|
884
|
+
- spec/mongoid/clients/sessions_spec.rb
|
875
885
|
- spec/mongoid/matchable_spec.rb
|
876
886
|
- spec/mongoid/copyable_spec.rb
|
877
887
|
- spec/mongoid/changeable_spec.rb
|
metadata.gz.sig
CHANGED
Binary file
|