mongoid 7.0.0 → 7.0.1
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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/mongoid/association/embedded/batchable.rb +4 -4
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +24 -1
- data/lib/mongoid/association/many.rb +2 -2
- data/lib/mongoid/association/referenced/has_many/proxy.rb +1 -1
- data/lib/mongoid/association/touchable.rb +1 -1
- data/lib/mongoid/clients/sessions.rb +2 -2
- data/lib/mongoid/contextual/aggregable/mongo.rb +1 -1
- data/lib/mongoid/contextual/map_reduce.rb +3 -3
- data/lib/mongoid/contextual/memory.rb +4 -4
- data/lib/mongoid/contextual/mongo.rb +3 -3
- data/lib/mongoid/indexable.rb +4 -4
- data/lib/mongoid/persistable.rb +1 -1
- data/lib/mongoid/persistable/creatable.rb +2 -2
- data/lib/mongoid/persistable/deletable.rb +2 -2
- data/lib/mongoid/persistable/updatable.rb +2 -2
- data/lib/mongoid/persistable/upsertable.rb +1 -1
- data/lib/mongoid/reloadable.rb +1 -1
- data/lib/mongoid/tasks/database.rb +2 -2
- data/lib/mongoid/version.rb +1 -1
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +246 -16
- metadata +2 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 24a3c4aba84097db1be0810c29d175dfa6e69f6346efa857ac124aeb77bec1b1
|
4
|
+
data.tar.gz: b181a4840f966322895bf4dfe0b64cb136513412d8a3ca89b9aa28a342d27054
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 12979183bf4d077b673beb7a57632fc73b7f1672be666401c68969ae675164b0d0641881cdcb8fb43bec283c4b4ca4d946f63a0c988bb58ac4065e677a5278c6
|
7
|
+
data.tar.gz: 3ae9210672c5c5dc3f8536983e814840fc823668373c9594d9a7cb834b533e945eca850c5840dbf0f90e7f707318c0a16823c0a54599d29b5f3a6308f5bf2dd1
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
@@ -39,7 +39,7 @@ module Mongoid
|
|
39
39
|
unless docs.empty?
|
40
40
|
collection.find(selector).update_one(
|
41
41
|
positionally(selector, "$unset" => { path => true }),
|
42
|
-
session:
|
42
|
+
session: _session
|
43
43
|
)
|
44
44
|
post_process_batch_remove(docs, :delete)
|
45
45
|
end
|
@@ -60,7 +60,7 @@ module Mongoid
|
|
60
60
|
if !docs.empty?
|
61
61
|
collection.find(selector).update_one(
|
62
62
|
positionally(selector, "$pullAll" => { path => removals }),
|
63
|
-
session:
|
63
|
+
session: _session
|
64
64
|
)
|
65
65
|
post_process_batch_remove(docs, method)
|
66
66
|
end
|
@@ -136,7 +136,7 @@ module Mongoid
|
|
136
136
|
if insertable?
|
137
137
|
collection.find(selector).update_one(
|
138
138
|
positionally(selector, '$set' => { path => inserts }),
|
139
|
-
session:
|
139
|
+
session: _session
|
140
140
|
)
|
141
141
|
post_process_batch_insert(docs)
|
142
142
|
end
|
@@ -161,7 +161,7 @@ module Mongoid
|
|
161
161
|
if insertable?
|
162
162
|
collection.find(selector).update_one(
|
163
163
|
positionally(selector, '$push' => { path => { '$each' => pushes } }),
|
164
|
-
session:
|
164
|
+
session: _session
|
165
165
|
)
|
166
166
|
post_process_batch_insert(docs)
|
167
167
|
end
|
@@ -271,6 +271,29 @@ module Mongoid
|
|
271
271
|
end
|
272
272
|
end
|
273
273
|
|
274
|
+
# Shift documents off the relation. This can be a single document or
|
275
|
+
# multiples, and will automatically persist the changes.
|
276
|
+
#
|
277
|
+
# @example Shift a single document.
|
278
|
+
# relation.shift
|
279
|
+
#
|
280
|
+
# @example Shift multiple documents.
|
281
|
+
# relation.shift(3)
|
282
|
+
#
|
283
|
+
# @param [ Integer ] count The number of documents to shift, or 1 if not
|
284
|
+
# provided.
|
285
|
+
#
|
286
|
+
# @return [ Document, Array<Document> ] The shifted document(s).
|
287
|
+
def shift(count = nil)
|
288
|
+
if count
|
289
|
+
if _target.size > 0 && docs = _target[0, count]
|
290
|
+
docs.each { |doc| delete(doc) }
|
291
|
+
end
|
292
|
+
else
|
293
|
+
delete(_target[0])
|
294
|
+
end
|
295
|
+
end
|
296
|
+
|
274
297
|
# Substitutes the supplied target documents for the existing documents
|
275
298
|
# in the relation.
|
276
299
|
#
|
@@ -526,4 +549,4 @@ module Mongoid
|
|
526
549
|
end
|
527
550
|
end
|
528
551
|
end
|
529
|
-
end
|
552
|
+
end
|
@@ -456,7 +456,7 @@ module Mongoid
|
|
456
456
|
# @since 3.0.0
|
457
457
|
def persist_delayed(docs, inserts)
|
458
458
|
unless docs.empty?
|
459
|
-
collection.insert_many(inserts, session:
|
459
|
+
collection.insert_many(inserts, session: _session)
|
460
460
|
docs.each do |doc|
|
461
461
|
doc.new_record = false
|
462
462
|
doc.run_after_callbacks(:create, :save)
|
@@ -32,7 +32,7 @@ module Mongoid
|
|
32
32
|
touches = touch_atomic_updates(field)
|
33
33
|
unless touches["$set"].blank?
|
34
34
|
selector = atomic_selector
|
35
|
-
_root.collection.find(selector).update_one(positionally(selector, touches), session:
|
35
|
+
_root.collection.find(selector).update_one(positionally(selector, touches), session: _session)
|
36
36
|
end
|
37
37
|
run_callbacks(:touch)
|
38
38
|
true
|
@@ -23,7 +23,7 @@ module Mongoid
|
|
23
23
|
#
|
24
24
|
# @since 3.0.0
|
25
25
|
def aggregates(field)
|
26
|
-
result = collection.find.aggregate(pipeline(field), session:
|
26
|
+
result = collection.find.aggregate(pipeline(field), session: _session).to_a
|
27
27
|
if result.empty?
|
28
28
|
{ "count" => 0, "sum" => nil, "avg" => nil, "min" => nil, "max" => nil }
|
29
29
|
else
|
@@ -166,7 +166,7 @@ module Mongoid
|
|
166
166
|
validate_out!
|
167
167
|
cmd = command
|
168
168
|
opts = { read: cmd.delete(:read).options } if cmd[:read]
|
169
|
-
@map_reduce.database.command(cmd, (opts || {}).merge(session:
|
169
|
+
@map_reduce.database.command(cmd, (opts || {}).merge(session: _session)).first
|
170
170
|
end
|
171
171
|
alias :results :raw
|
172
172
|
|
@@ -250,8 +250,8 @@ module Mongoid
|
|
250
250
|
raise Errors::NoMapReduceOutput.new({}) unless @map_reduce.out
|
251
251
|
end
|
252
252
|
|
253
|
-
def
|
254
|
-
criteria.send(:
|
253
|
+
def _session
|
254
|
+
criteria.send(:_session)
|
255
255
|
end
|
256
256
|
end
|
257
257
|
end
|
@@ -49,7 +49,7 @@ module Mongoid
|
|
49
49
|
unless removed.empty?
|
50
50
|
collection.find(selector).update_one(
|
51
51
|
positionally(selector, "$pullAll" => { path => removed }),
|
52
|
-
session:
|
52
|
+
session: _session
|
53
53
|
)
|
54
54
|
end
|
55
55
|
deleted
|
@@ -320,7 +320,7 @@ module Mongoid
|
|
320
320
|
updates["$set"].merge!(doc.atomic_updates["$set"] || {})
|
321
321
|
doc.move_changes
|
322
322
|
end
|
323
|
-
collection.find(selector).update_one(updates, session:
|
323
|
+
collection.find(selector).update_one(updates, session: _session) unless updates["$set"].empty?
|
324
324
|
end
|
325
325
|
|
326
326
|
# Get the limiting value.
|
@@ -464,8 +464,8 @@ module Mongoid
|
|
464
464
|
|
465
465
|
private
|
466
466
|
|
467
|
-
def
|
468
|
-
@criteria.send(:
|
467
|
+
def _session
|
468
|
+
@criteria.send(:_session)
|
469
469
|
end
|
470
470
|
end
|
471
471
|
end
|
@@ -341,7 +341,7 @@ module Mongoid
|
|
341
341
|
@criteria, @klass, @cache = criteria, criteria.klass, criteria.options[:cache]
|
342
342
|
@collection = @klass.collection
|
343
343
|
criteria.send(:merge_type_selection)
|
344
|
-
@view = collection.find(criteria.selector, session:
|
344
|
+
@view = collection.find(criteria.selector, session: _session)
|
345
345
|
apply_options
|
346
346
|
end
|
347
347
|
|
@@ -708,8 +708,8 @@ module Mongoid
|
|
708
708
|
|
709
709
|
private
|
710
710
|
|
711
|
-
def
|
712
|
-
@criteria.send(:
|
711
|
+
def _session
|
712
|
+
@criteria.send(:_session)
|
713
713
|
end
|
714
714
|
|
715
715
|
def acknowledged_write?
|
data/lib/mongoid/indexable.rb
CHANGED
@@ -35,10 +35,10 @@ module Mongoid
|
|
35
35
|
key, options = spec.key, default_options.merge(spec.options)
|
36
36
|
if database = options[:database]
|
37
37
|
with(database: database) do |klass|
|
38
|
-
klass.collection.indexes(session:
|
38
|
+
klass.collection.indexes(session: _session).create_one(key, options.except(:database))
|
39
39
|
end
|
40
40
|
else
|
41
|
-
collection.indexes(session:
|
41
|
+
collection.indexes(session: _session).create_one(key, options)
|
42
42
|
end
|
43
43
|
end and true
|
44
44
|
end
|
@@ -56,9 +56,9 @@ module Mongoid
|
|
56
56
|
indexed_database_names.each do |database|
|
57
57
|
with(database: database) do |klass|
|
58
58
|
begin
|
59
|
-
klass.collection.indexes(session:
|
59
|
+
klass.collection.indexes(session: _session).each do |spec|
|
60
60
|
unless spec["name"] == "_id_"
|
61
|
-
klass.collection.indexes(session:
|
61
|
+
klass.collection.indexes(session: _session).drop_one(spec["key"])
|
62
62
|
logger.info(
|
63
63
|
"MONGOID: Removed index '#{spec["name"]}' on collection " +
|
64
64
|
"'#{klass.collection.name}' in database '#{database}'."
|
data/lib/mongoid/persistable.rb
CHANGED
@@ -203,7 +203,7 @@ module Mongoid
|
|
203
203
|
def persist_atomic_operations(operations)
|
204
204
|
if persisted? && operations && !operations.empty?
|
205
205
|
selector = atomic_selector
|
206
|
-
_root.collection.find(selector).update_one(positionally(selector, operations), session:
|
206
|
+
_root.collection.find(selector).update_one(positionally(selector, operations), session: _session)
|
207
207
|
end
|
208
208
|
end
|
209
209
|
end
|
@@ -63,7 +63,7 @@ module Mongoid
|
|
63
63
|
selector = _parent.atomic_selector
|
64
64
|
_root.collection.find(selector).update_one(
|
65
65
|
positionally(selector, atomic_inserts),
|
66
|
-
session:
|
66
|
+
session: _session)
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
@@ -78,7 +78,7 @@ module Mongoid
|
|
78
78
|
#
|
79
79
|
# @since 4.0.0
|
80
80
|
def insert_as_root
|
81
|
-
collection.insert_one(as_attributes, session:
|
81
|
+
collection.insert_one(as_attributes, session: _session)
|
82
82
|
end
|
83
83
|
|
84
84
|
# Post process an insert, which sets the new record attribute to false
|
@@ -66,7 +66,7 @@ module Mongoid
|
|
66
66
|
selector = _parent.atomic_selector
|
67
67
|
_root.collection.find(selector).update_one(
|
68
68
|
positionally(selector, atomic_deletes),
|
69
|
-
session:
|
69
|
+
session: _session)
|
70
70
|
end
|
71
71
|
true
|
72
72
|
end
|
@@ -82,7 +82,7 @@ module Mongoid
|
|
82
82
|
#
|
83
83
|
# @since 4.0.0
|
84
84
|
def delete_as_root
|
85
|
-
collection.find(atomic_selector).delete_one(session:
|
85
|
+
collection.find(atomic_selector).delete_one(session: _session)
|
86
86
|
true
|
87
87
|
end
|
88
88
|
|
@@ -134,9 +134,9 @@ module Mongoid
|
|
134
134
|
unless updates.empty?
|
135
135
|
coll = collection(_root)
|
136
136
|
selector = atomic_selector
|
137
|
-
coll.find(selector).update_one(positionally(selector, updates), session:
|
137
|
+
coll.find(selector).update_one(positionally(selector, updates), session: _session)
|
138
138
|
conflicts.each_pair do |key, value|
|
139
|
-
coll.find(selector).update_one(positionally(selector, { key => value }), session:
|
139
|
+
coll.find(selector).update_one(positionally(selector, { key => value }), session: _session)
|
140
140
|
end
|
141
141
|
end
|
142
142
|
end
|
data/lib/mongoid/reloadable.rb
CHANGED
@@ -58,7 +58,7 @@ module Mongoid
|
|
58
58
|
#
|
59
59
|
# @since 2.3.2
|
60
60
|
def reload_root_document
|
61
|
-
{}.merge(collection.find({ _id: _id }, session:
|
61
|
+
{}.merge(collection.find({ _id: _id }, session: _session).read(mode: :primary).first || {})
|
62
62
|
end
|
63
63
|
|
64
64
|
# Reload the embedded document.
|
@@ -44,7 +44,7 @@ module Mongoid
|
|
44
44
|
models.each do |model|
|
45
45
|
unless model.embedded?
|
46
46
|
begin
|
47
|
-
model.collection.indexes(session: model.send(:
|
47
|
+
model.collection.indexes(session: model.send(:_session)).each do |index|
|
48
48
|
# ignore default index
|
49
49
|
unless index['name'] == '_id_'
|
50
50
|
key = index['key'].symbolize_keys
|
@@ -77,7 +77,7 @@ module Mongoid
|
|
77
77
|
indexes.each do |index|
|
78
78
|
key = index['key'].symbolize_keys
|
79
79
|
collection = model.collection
|
80
|
-
collection.indexes(session: model.send(:
|
80
|
+
collection.indexes(session: model.send(:_session)).drop_one(key)
|
81
81
|
logger.info(
|
82
82
|
"MONGOID: Removed index '#{index['name']}' on collection " +
|
83
83
|
"'#{collection.name}' in database '#{collection.database.name}'."
|
data/lib/mongoid/version.rb
CHANGED
@@ -2544,6 +2544,25 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
2544
2544
|
person.addresses.create(street: "hermannstr")
|
2545
2545
|
end
|
2546
2546
|
|
2547
|
+
context "when the number is zero" do
|
2548
|
+
|
2549
|
+
let!(:popped) do
|
2550
|
+
person.addresses.pop(0)
|
2551
|
+
end
|
2552
|
+
|
2553
|
+
it "returns an empty array" do
|
2554
|
+
expect(popped).to eq([])
|
2555
|
+
end
|
2556
|
+
|
2557
|
+
it "does not remove the document from the relation" do
|
2558
|
+
expect(person.addresses).to eq([ address_one, address_two ])
|
2559
|
+
end
|
2560
|
+
|
2561
|
+
it "does not persist the pop" do
|
2562
|
+
expect(person.reload.addresses).to eq([ address_one, address_two ])
|
2563
|
+
end
|
2564
|
+
end
|
2565
|
+
|
2547
2566
|
context "when the number is not larger than the relation" do
|
2548
2567
|
|
2549
2568
|
let!(:popped) do
|
@@ -2601,6 +2620,125 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
2601
2620
|
end
|
2602
2621
|
end
|
2603
2622
|
|
2623
|
+
describe "#shift" do
|
2624
|
+
|
2625
|
+
let(:person) do
|
2626
|
+
Person.create
|
2627
|
+
end
|
2628
|
+
|
2629
|
+
context "when no argument is provided" do
|
2630
|
+
|
2631
|
+
let!(:address_one) do
|
2632
|
+
person.addresses.create(street: "sonnenallee")
|
2633
|
+
end
|
2634
|
+
|
2635
|
+
let!(:address_two) do
|
2636
|
+
person.addresses.create(street: "hermannstr")
|
2637
|
+
end
|
2638
|
+
|
2639
|
+
let!(:shifted) do
|
2640
|
+
person.addresses.shift
|
2641
|
+
end
|
2642
|
+
|
2643
|
+
it "returns the shifted document" do
|
2644
|
+
expect(shifted).to eq(address_one)
|
2645
|
+
end
|
2646
|
+
|
2647
|
+
it "removes the document from the relation" do
|
2648
|
+
expect(person.addresses).to eq([ address_two ])
|
2649
|
+
end
|
2650
|
+
|
2651
|
+
it "persists the shift" do
|
2652
|
+
expect(person.reload.addresses).to eq([ address_two ])
|
2653
|
+
end
|
2654
|
+
end
|
2655
|
+
|
2656
|
+
context "when an integer is provided" do
|
2657
|
+
|
2658
|
+
let!(:address_one) do
|
2659
|
+
person.addresses.create(street: "sonnenallee")
|
2660
|
+
end
|
2661
|
+
|
2662
|
+
let!(:address_two) do
|
2663
|
+
person.addresses.create(street: "hermannstr")
|
2664
|
+
end
|
2665
|
+
|
2666
|
+
context "when the number is zero" do
|
2667
|
+
|
2668
|
+
let!(:shifted) do
|
2669
|
+
person.addresses.shift(0)
|
2670
|
+
end
|
2671
|
+
|
2672
|
+
it "returns an empty array" do
|
2673
|
+
expect(shifted).to eq([])
|
2674
|
+
end
|
2675
|
+
|
2676
|
+
it "does not remove the document from the relation" do
|
2677
|
+
expect(person.addresses).to eq([ address_one, address_two ])
|
2678
|
+
end
|
2679
|
+
|
2680
|
+
it "does not persist the shift" do
|
2681
|
+
expect(person.reload.addresses).to eq([ address_one, address_two ])
|
2682
|
+
end
|
2683
|
+
end
|
2684
|
+
|
2685
|
+
context "when the number is not larger than the relation" do
|
2686
|
+
|
2687
|
+
let!(:shifted) do
|
2688
|
+
person.addresses.shift(2)
|
2689
|
+
end
|
2690
|
+
|
2691
|
+
it "returns the shifted documents" do
|
2692
|
+
expect(shifted).to eq([ address_one, address_two ])
|
2693
|
+
end
|
2694
|
+
|
2695
|
+
it "removes the document from the relation" do
|
2696
|
+
expect(person.addresses).to be_empty
|
2697
|
+
end
|
2698
|
+
|
2699
|
+
it "persists the shift" do
|
2700
|
+
expect(person.reload.addresses).to be_empty
|
2701
|
+
end
|
2702
|
+
end
|
2703
|
+
|
2704
|
+
context "when the number is larger than the relation" do
|
2705
|
+
|
2706
|
+
let!(:shifted) do
|
2707
|
+
person.addresses.shift(4)
|
2708
|
+
end
|
2709
|
+
|
2710
|
+
it "returns the shifted documents" do
|
2711
|
+
expect(shifted).to eq([ address_one, address_two ])
|
2712
|
+
end
|
2713
|
+
|
2714
|
+
it "removes the document from the relation" do
|
2715
|
+
expect(person.addresses).to be_empty
|
2716
|
+
end
|
2717
|
+
|
2718
|
+
it "persists the shift" do
|
2719
|
+
expect(person.reload.addresses).to be_empty
|
2720
|
+
end
|
2721
|
+
end
|
2722
|
+
end
|
2723
|
+
|
2724
|
+
context "when the relation is empty" do
|
2725
|
+
|
2726
|
+
context "when providing no number" do
|
2727
|
+
|
2728
|
+
it "returns nil" do
|
2729
|
+
expect(person.addresses.shift).to be_nil
|
2730
|
+
end
|
2731
|
+
end
|
2732
|
+
|
2733
|
+
context "when providing a number" do
|
2734
|
+
|
2735
|
+
it "returns nil" do
|
2736
|
+
expect(person.addresses.shift(2)).to be_nil
|
2737
|
+
end
|
2738
|
+
end
|
2739
|
+
end
|
2740
|
+
end
|
2741
|
+
|
2604
2742
|
describe "#scoped" do
|
2605
2743
|
|
2606
2744
|
let(:person) do
|
@@ -3788,7 +3926,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
3788
3926
|
end
|
3789
3927
|
end
|
3790
3928
|
|
3791
|
-
context "#delete or #clear with before_remove callback" do
|
3929
|
+
context "#delete, or #clear, or #pop, or #shift with before_remove callback" do
|
3792
3930
|
|
3793
3931
|
let(:artist) do
|
3794
3932
|
Artist.new
|
@@ -3834,35 +3972,81 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
3834
3972
|
end
|
3835
3973
|
end
|
3836
3974
|
|
3837
|
-
|
3975
|
+
describe "#pop" do
|
3838
3976
|
|
3839
3977
|
before do
|
3840
|
-
|
3978
|
+
artist.songs.pop
|
3841
3979
|
end
|
3842
3980
|
|
3843
|
-
|
3981
|
+
it "executes the callback" do
|
3982
|
+
artist.songs.pop
|
3983
|
+
expect(artist.before_remove_embedded_called).to be true
|
3984
|
+
end
|
3985
|
+
end
|
3844
3986
|
|
3845
|
-
|
3846
|
-
|
3847
|
-
|
3848
|
-
|
3987
|
+
describe "#shift" do
|
3988
|
+
|
3989
|
+
before do
|
3990
|
+
artist.songs.shift
|
3849
3991
|
end
|
3850
3992
|
|
3851
|
-
|
3993
|
+
it "executes the callback" do
|
3994
|
+
artist.songs.shift
|
3995
|
+
expect(artist.before_remove_embedded_called).to be true
|
3996
|
+
end
|
3997
|
+
end
|
3998
|
+
end
|
3852
3999
|
|
3853
|
-
|
3854
|
-
begin; artist.songs.clear; rescue; end
|
3855
|
-
end
|
4000
|
+
context "when errors are raised" do
|
3856
4001
|
|
3857
|
-
|
3858
|
-
|
3859
|
-
|
4002
|
+
before do
|
4003
|
+
expect(artist).to receive(:before_remove_song).and_raise
|
4004
|
+
end
|
4005
|
+
|
4006
|
+
describe "#delete" do
|
4007
|
+
|
4008
|
+
it "does not remove the document from the relation" do
|
4009
|
+
begin; artist.songs.delete(song); rescue; end
|
4010
|
+
expect(artist.songs).to eq([ song ])
|
4011
|
+
end
|
4012
|
+
end
|
4013
|
+
|
4014
|
+
describe "#clear" do
|
4015
|
+
|
4016
|
+
before do
|
4017
|
+
begin; artist.songs.clear; rescue; end
|
4018
|
+
end
|
4019
|
+
|
4020
|
+
it "removes the documents from the relation" do
|
4021
|
+
expect(artist.songs).to eq([ song ])
|
4022
|
+
end
|
4023
|
+
end
|
4024
|
+
|
4025
|
+
describe "#pop" do
|
4026
|
+
|
4027
|
+
before do
|
4028
|
+
begin; artist.songs.pop; rescue; end
|
4029
|
+
end
|
4030
|
+
|
4031
|
+
it "should remove from collection" do
|
4032
|
+
expect(artist.songs).to eq([ song ])
|
4033
|
+
end
|
4034
|
+
end
|
4035
|
+
|
4036
|
+
describe "#shift" do
|
4037
|
+
|
4038
|
+
before do
|
4039
|
+
begin; artist.songs.shift; rescue; end
|
4040
|
+
end
|
4041
|
+
|
4042
|
+
it "should remove from collection" do
|
4043
|
+
expect(artist.songs).to eq([ song ])
|
3860
4044
|
end
|
3861
4045
|
end
|
3862
4046
|
end
|
3863
4047
|
end
|
3864
4048
|
|
3865
|
-
context "#delete or #clear with after_remove callback" do
|
4049
|
+
context "#delete, or #clear, or #pop, or #shift with after_remove callback" do
|
3866
4050
|
|
3867
4051
|
let(:artist) do
|
3868
4052
|
Artist.new
|
@@ -3899,6 +4083,30 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
3899
4083
|
expect(artist.after_remove_embedded_called).to be true
|
3900
4084
|
end
|
3901
4085
|
end
|
4086
|
+
|
4087
|
+
describe "#pop" do
|
4088
|
+
|
4089
|
+
before do
|
4090
|
+
artist.labels.pop
|
4091
|
+
end
|
4092
|
+
|
4093
|
+
it "executes the callback" do
|
4094
|
+
artist.labels.pop
|
4095
|
+
expect(artist.after_remove_embedded_called).to be true
|
4096
|
+
end
|
4097
|
+
end
|
4098
|
+
|
4099
|
+
describe "#shift" do
|
4100
|
+
|
4101
|
+
before do
|
4102
|
+
artist.labels.shift
|
4103
|
+
end
|
4104
|
+
|
4105
|
+
it "executes the callback" do
|
4106
|
+
artist.labels.shift
|
4107
|
+
expect(artist.after_remove_embedded_called).to be true
|
4108
|
+
end
|
4109
|
+
end
|
3902
4110
|
end
|
3903
4111
|
|
3904
4112
|
context "when errors are raised" do
|
@@ -3928,6 +4136,28 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
3928
4136
|
expect(artist.labels).to be_empty
|
3929
4137
|
end
|
3930
4138
|
end
|
4139
|
+
|
4140
|
+
describe "#pop" do
|
4141
|
+
|
4142
|
+
before do
|
4143
|
+
begin; artist.labels.pop; rescue; end
|
4144
|
+
end
|
4145
|
+
|
4146
|
+
it "should remove from collection" do
|
4147
|
+
expect(artist.labels).to be_empty
|
4148
|
+
end
|
4149
|
+
end
|
4150
|
+
|
4151
|
+
describe "#shift" do
|
4152
|
+
|
4153
|
+
before do
|
4154
|
+
begin; artist.labels.shift; rescue; end
|
4155
|
+
end
|
4156
|
+
|
4157
|
+
it "should remove from collection" do
|
4158
|
+
expect(artist.labels).to be_empty
|
4159
|
+
end
|
4160
|
+
end
|
3931
4161
|
end
|
3932
4162
|
end
|
3933
4163
|
|
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: 7.0.
|
4
|
+
version: 7.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Durran Jordan
|
@@ -30,7 +30,7 @@ cert_chain:
|
|
30
30
|
fxN/GvhskJEgmdQToxEBRLOu5/udtPpVe/hb3gk5hzsxcWuKN/VTi4SbtFQdz9cq
|
31
31
|
fqd6ctFDOqcJmOYdlSRgb9g8zm4BiNgFWPBSk8NsP7c=
|
32
32
|
-----END CERTIFICATE-----
|
33
|
-
date: 2018-
|
33
|
+
date: 2018-05-04 00:00:00.000000000 Z
|
34
34
|
dependencies:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: activemodel
|
metadata.gz.sig
CHANGED
Binary file
|