mongoid_relations_dirty_tracking 0.2.1 → 0.2.2
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 44359853dbe1f4805290ec30672bcf1c77fa3a8b375a68d498e357da29ba4ecb
|
4
|
+
data.tar.gz: 28b569c12cee5b59c80ae45357ee7163f2f31cc2cb38c2ab1ca381537b721ce1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c82ea278398bbce4402d08e8c87c2dc9f8afe5e253427a09afaa6604fc3888ac9ae2ab309f329d61c58bdb1931f91430abe2bc3b72ca62cd204901dcd7732fc3
|
7
|
+
data.tar.gz: 79dbc5a60ddcf8223b8623b1953483695cfef6920d6cb5c03042590e92a93aceb8fc792955f472904537650c38748d59467ca01ec72cb1131e7ced408fc1bbec
|
data/README.md
CHANGED
@@ -47,11 +47,34 @@ doc.changed_with_relations? # => false
|
|
47
47
|
doc.changes_with_relations # => {}
|
48
48
|
```
|
49
49
|
|
50
|
-
|
50
|
+
## Disablement
|
51
51
|
|
52
|
-
Relations dirty tracking can be resource intensive
|
53
|
-
|
54
|
-
|
52
|
+
Relations dirty tracking can be resource intensive,
|
53
|
+
hence you may wish to disable it dynamically.
|
54
|
+
|
55
|
+
#### When using .only?
|
56
|
+
|
57
|
+
If you query objects with the `.only?(*fields)` modifier, Mongoid
|
58
|
+
itself marks the objects as `readonly` and attempts to save them will fail.
|
59
|
+
In this case, relations dirty tracking is automatically disabled.
|
60
|
+
|
61
|
+
```ruby
|
62
|
+
Mongoid::RelationsDirtyTracking.disable do
|
63
|
+
doc = SampleDocument.all.only(:title).first
|
64
|
+
doc.foo = Foo.new(title: 'foo')
|
65
|
+
doc.bars << Bar.new(title: 'bar')
|
66
|
+
|
67
|
+
doc.relations_changed? # => false
|
68
|
+
doc.relation_changes # => {}
|
69
|
+
|
70
|
+
doc.save! #=> raises Mongoid::Errors::ReadonlyDocument
|
71
|
+
end
|
72
|
+
```
|
73
|
+
|
74
|
+
#### Within a block scope
|
75
|
+
|
76
|
+
You may disable relations dirty tracking for a given block.
|
77
|
+
This is thread-safe and will use the [RequestStore gem](https://github.com/steveklabnik/request_store)
|
55
78
|
if it is included in your project.
|
56
79
|
|
57
80
|
```ruby
|
@@ -60,8 +83,8 @@ Mongoid::RelationsDirtyTracking.disable do
|
|
60
83
|
doc.foo = Foo.new(title: 'foo')
|
61
84
|
doc.bars << Bar.new(title: 'bar')
|
62
85
|
|
63
|
-
doc.relations_changed?
|
64
|
-
doc.relation_changes
|
86
|
+
doc.relations_changed? # => false
|
87
|
+
doc.relation_changes # => {}
|
65
88
|
end
|
66
89
|
```
|
67
90
|
|
@@ -49,6 +49,7 @@ module Mongoid
|
|
49
49
|
Mongoid::Association::Referenced::HasMany::Proxy,
|
50
50
|
Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy,
|
51
51
|
Mongoid::Association::Referenced::BelongsTo::Proxy]
|
52
|
+
|
52
53
|
to_track && trackables.include?(relations[rel_name].try(:relation))
|
53
54
|
end
|
54
55
|
|
@@ -66,14 +67,14 @@ module Mongoid
|
|
66
67
|
|
67
68
|
def store_relations_shadow
|
68
69
|
@relations_shadow = {}
|
69
|
-
return
|
70
|
+
return if readonly? || !Mongoid::RelationsDirtyTracking.enabled?
|
70
71
|
self.class.tracked_relations.each do |rel_name|
|
71
72
|
@relations_shadow[rel_name] = tracked_relation_attributes(rel_name)
|
72
73
|
end
|
73
74
|
end
|
74
75
|
|
75
76
|
def relation_changes
|
76
|
-
return {}
|
77
|
+
return {} if readonly? || !Mongoid::RelationsDirtyTracking.enabled?
|
77
78
|
changes = {}
|
78
79
|
@relations_shadow.each_pair do |rel_name, shadow_values|
|
79
80
|
current_values = tracked_relation_attributes(rel_name)
|
@@ -3,7 +3,7 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
5
|
describe Mongoid::RelationsDirtyTracking do
|
6
|
-
subject { TestDocument.create }
|
6
|
+
subject(:doc) { TestDocument.create }
|
7
7
|
|
8
8
|
its(:changed?) { is_expected.to eq false }
|
9
9
|
its(:children_changed?) { is_expected.to eq false }
|
@@ -372,26 +372,49 @@ describe Mongoid::RelationsDirtyTracking do
|
|
372
372
|
end
|
373
373
|
end
|
374
374
|
|
375
|
+
describe 'disable if readonly?' do
|
376
|
+
subject do
|
377
|
+
doc
|
378
|
+
TestDocument.all.only(:one_related_id).first
|
379
|
+
end
|
380
|
+
|
381
|
+
before :each do
|
382
|
+
@embedded_doc = TestEmbeddedDocument.new
|
383
|
+
|
384
|
+
subject.many_documents << @embedded_doc
|
385
|
+
end
|
386
|
+
|
387
|
+
its(:changed?) { is_expected.to eq false }
|
388
|
+
its(:children_changed?) { is_expected.to eq false }
|
389
|
+
its(:relations_changed?) { is_expected.to eq false }
|
390
|
+
its(:changed_with_relations?) { is_expected.to eq false }
|
391
|
+
its(:changes_with_relations) { is_expected.to_not include(subject.relation_changes) }
|
392
|
+
|
393
|
+
describe '#relation_changes' do
|
394
|
+
it 'returns array with differences' do
|
395
|
+
expect(subject.relation_changes['many_documents']).to eq(nil)
|
396
|
+
end
|
397
|
+
end
|
398
|
+
end
|
399
|
+
|
375
400
|
describe 'global disablement' do
|
376
|
-
|
377
|
-
|
378
|
-
@embedded_doc = TestEmbeddedDocument.new
|
401
|
+
before :each do
|
402
|
+
@embedded_doc = TestEmbeddedDocument.new
|
379
403
|
|
380
|
-
|
381
|
-
|
382
|
-
end
|
404
|
+
described_class.disable do
|
405
|
+
subject.many_documents << @embedded_doc
|
383
406
|
end
|
407
|
+
end
|
384
408
|
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
409
|
+
its(:changed?) { is_expected.to eq false }
|
410
|
+
its(:children_changed?) { is_expected.to eq false }
|
411
|
+
its(:relations_changed?) { is_expected.to eq false }
|
412
|
+
its(:changed_with_relations?) { is_expected.to eq false }
|
413
|
+
its(:changes_with_relations) { is_expected.to_not include(subject.relation_changes) }
|
390
414
|
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
end
|
415
|
+
describe '#relation_changes' do
|
416
|
+
it 'returns array with differences' do
|
417
|
+
expect(subject.relation_changes['many_documents']).to eq(nil)
|
395
418
|
end
|
396
419
|
end
|
397
420
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid_relations_dirty_tracking
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Sevcik
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-08-
|
11
|
+
date: 2020-08-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|