mongoid_relations_dirty_tracking 0.1.0 → 0.2.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
- data/{LICENSE.txt → LICENSE} +22 -22
- data/README.md +80 -51
- data/lib/mongoid/relations_dirty_tracking.rb +124 -108
- data/lib/mongoid/relations_dirty_tracking/version.rb +7 -5
- data/lib/mongoid_relations_dirty_tracking.rb +3 -2
- data/spec/gemfiles/Gemfile.master +3 -0
- data/spec/gemfiles/Gemfile.rails51 +6 -0
- data/spec/gemfiles/Gemfile.rails52 +6 -0
- data/spec/gemfiles/Gemfile.rails60 +6 -0
- data/spec/lib/mongoid/relations_dirty_tracking_spec.rb +398 -382
- data/spec/spec_helper.rb +70 -65
- metadata +63 -39
- data/.gitignore +0 -17
- data/Gemfile +0 -4
- data/Rakefile +0 -6
- data/lib/mongoid/relations_dirty_tracking/versioning.rb +0 -54
- data/mongoid_relations_dirty_tracking.gemspec +0 -26
data/spec/spec_helper.rb
CHANGED
@@ -1,65 +1,70 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require '
|
4
|
-
require '
|
5
|
-
|
6
|
-
require 'rspec'
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
end
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'bundler/setup'
|
5
|
+
require 'rspec'
|
6
|
+
require 'rspec/its'
|
7
|
+
require 'mongoid'
|
8
|
+
require 'mongoid/relations_dirty_tracking'
|
9
|
+
|
10
|
+
Mongo::Logger.logger.level = 2
|
11
|
+
|
12
|
+
Mongoid.configure do |config|
|
13
|
+
config.logger.level = 2
|
14
|
+
config.connect_to('mongoid_relations_dirty_tracking_test')
|
15
|
+
config.belongs_to_required_by_default = false
|
16
|
+
end
|
17
|
+
|
18
|
+
RSpec.configure do |config|
|
19
|
+
config.mock_with :rspec
|
20
|
+
config.after(:all) { Mongoid.purge! }
|
21
|
+
end
|
22
|
+
|
23
|
+
class TestDocument
|
24
|
+
include Mongoid::Document
|
25
|
+
include Mongoid::RelationsDirtyTracking
|
26
|
+
|
27
|
+
embeds_one :one_document, class_name: 'TestEmbeddedDocument'
|
28
|
+
embeds_many :many_documents, class_name: 'TestEmbeddedDocument'
|
29
|
+
|
30
|
+
has_one :one_related, class_name: 'TestRelatedDocument'
|
31
|
+
has_many :many_related, class_name: 'TestRelatedDocument'
|
32
|
+
has_and_belongs_to_many :many_to_many_related, class_name: 'TestRelatedDocument'
|
33
|
+
end
|
34
|
+
|
35
|
+
class TestEmbeddedDocument
|
36
|
+
include Mongoid::Document
|
37
|
+
|
38
|
+
embedded_in :test_document
|
39
|
+
|
40
|
+
field :title, type: String
|
41
|
+
end
|
42
|
+
|
43
|
+
class TestRelatedDocument
|
44
|
+
include Mongoid::Document
|
45
|
+
include Mongoid::RelationsDirtyTracking
|
46
|
+
|
47
|
+
belongs_to :test_document, inverse_of: :one_related
|
48
|
+
|
49
|
+
field :title, type: String
|
50
|
+
end
|
51
|
+
|
52
|
+
class TestDocumentWithOnlyOption
|
53
|
+
include Mongoid::Document
|
54
|
+
include Mongoid::RelationsDirtyTracking
|
55
|
+
|
56
|
+
embeds_many :many_documents, class_name: 'TestEmbeddedDocument'
|
57
|
+
has_one :one_related, class_name: 'TestRelatedDocument'
|
58
|
+
|
59
|
+
relations_dirty_tracking only: :many_documents
|
60
|
+
end
|
61
|
+
|
62
|
+
class TestDocumentWithExceptOption
|
63
|
+
include Mongoid::Document
|
64
|
+
include Mongoid::RelationsDirtyTracking
|
65
|
+
|
66
|
+
embeds_many :many_documents, class_name: 'TestEmbeddedDocument'
|
67
|
+
has_one :one_related, class_name: 'TestRelatedDocument'
|
68
|
+
|
69
|
+
relations_dirty_tracking except: 'many_documents'
|
70
|
+
end
|
metadata
CHANGED
@@ -1,103 +1,125 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid_relations_dirty_tracking
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Sevcik
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-08-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '5.1'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '5.1'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: mongoid
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
34
|
-
- - <
|
35
|
-
- !ruby/object:Gem::Version
|
36
|
-
version: '4.0'
|
33
|
+
version: '7.0'
|
37
34
|
type: :runtime
|
38
35
|
prerelease: false
|
39
36
|
version_requirements: !ruby/object:Gem::Requirement
|
40
37
|
requirements:
|
41
|
-
- -
|
38
|
+
- - ">="
|
42
39
|
- !ruby/object:Gem::Version
|
43
|
-
version:
|
44
|
-
|
40
|
+
version: '7.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: gem-release
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
45
46
|
- !ruby/object:Gem::Version
|
46
|
-
version: '
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
47
55
|
- !ruby/object:Gem::Dependency
|
48
|
-
name:
|
56
|
+
name: pry-byebug
|
49
57
|
requirement: !ruby/object:Gem::Requirement
|
50
58
|
requirements:
|
51
|
-
- -
|
59
|
+
- - ">="
|
52
60
|
- !ruby/object:Gem::Version
|
53
|
-
version: '
|
61
|
+
version: '0'
|
54
62
|
type: :development
|
55
63
|
prerelease: false
|
56
64
|
version_requirements: !ruby/object:Gem::Requirement
|
57
65
|
requirements:
|
58
|
-
- -
|
66
|
+
- - ">="
|
59
67
|
- !ruby/object:Gem::Version
|
60
|
-
version: '
|
68
|
+
version: '0'
|
61
69
|
- !ruby/object:Gem::Dependency
|
62
70
|
name: rake
|
63
71
|
requirement: !ruby/object:Gem::Requirement
|
64
72
|
requirements:
|
65
|
-
- -
|
73
|
+
- - ">="
|
66
74
|
- !ruby/object:Gem::Version
|
67
75
|
version: '0'
|
68
76
|
type: :development
|
69
77
|
prerelease: false
|
70
78
|
version_requirements: !ruby/object:Gem::Requirement
|
71
79
|
requirements:
|
72
|
-
- -
|
80
|
+
- - ">="
|
73
81
|
- !ruby/object:Gem::Version
|
74
82
|
version: '0'
|
75
83
|
- !ruby/object:Gem::Dependency
|
76
84
|
name: rspec
|
77
85
|
requirement: !ruby/object:Gem::Requirement
|
78
86
|
requirements:
|
79
|
-
- - ~>
|
87
|
+
- - "~>"
|
80
88
|
- !ruby/object:Gem::Version
|
81
|
-
version:
|
89
|
+
version: 3.8.0
|
82
90
|
type: :development
|
83
91
|
prerelease: false
|
84
92
|
version_requirements: !ruby/object:Gem::Requirement
|
85
93
|
requirements:
|
86
|
-
- - ~>
|
94
|
+
- - "~>"
|
87
95
|
- !ruby/object:Gem::Version
|
88
|
-
version:
|
96
|
+
version: 3.8.0
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rspec-its
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '1.3'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '1.3'
|
89
111
|
- !ruby/object:Gem::Dependency
|
90
|
-
name:
|
112
|
+
name: rubocop
|
91
113
|
requirement: !ruby/object:Gem::Requirement
|
92
114
|
requirements:
|
93
|
-
- -
|
115
|
+
- - ">="
|
94
116
|
- !ruby/object:Gem::Version
|
95
117
|
version: '0'
|
96
118
|
type: :development
|
97
119
|
prerelease: false
|
98
120
|
version_requirements: !ruby/object:Gem::Requirement
|
99
121
|
requirements:
|
100
|
-
- -
|
122
|
+
- - ">="
|
101
123
|
- !ruby/object:Gem::Version
|
102
124
|
version: '0'
|
103
125
|
description: Mongoid extension for tracking changes on document relations
|
@@ -107,16 +129,15 @@ executables: []
|
|
107
129
|
extensions: []
|
108
130
|
extra_rdoc_files: []
|
109
131
|
files:
|
110
|
-
-
|
111
|
-
- Gemfile
|
112
|
-
- LICENSE.txt
|
132
|
+
- LICENSE
|
113
133
|
- README.md
|
114
|
-
- Rakefile
|
115
134
|
- lib/mongoid/relations_dirty_tracking.rb
|
116
135
|
- lib/mongoid/relations_dirty_tracking/version.rb
|
117
|
-
- lib/mongoid/relations_dirty_tracking/versioning.rb
|
118
136
|
- lib/mongoid_relations_dirty_tracking.rb
|
119
|
-
-
|
137
|
+
- spec/gemfiles/Gemfile.master
|
138
|
+
- spec/gemfiles/Gemfile.rails51
|
139
|
+
- spec/gemfiles/Gemfile.rails52
|
140
|
+
- spec/gemfiles/Gemfile.rails60
|
120
141
|
- spec/lib/mongoid/relations_dirty_tracking_spec.rb
|
121
142
|
- spec/spec_helper.rb
|
122
143
|
homepage: http://github.com/versative/relations_dirty_tracking
|
@@ -129,20 +150,23 @@ require_paths:
|
|
129
150
|
- lib
|
130
151
|
required_ruby_version: !ruby/object:Gem::Requirement
|
131
152
|
requirements:
|
132
|
-
- -
|
153
|
+
- - ">="
|
133
154
|
- !ruby/object:Gem::Version
|
134
155
|
version: '0'
|
135
156
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
157
|
requirements:
|
137
|
-
- -
|
158
|
+
- - ">="
|
138
159
|
- !ruby/object:Gem::Version
|
139
160
|
version: '0'
|
140
161
|
requirements: []
|
141
|
-
|
142
|
-
rubygems_version: 2.1.11
|
162
|
+
rubygems_version: 3.0.3
|
143
163
|
signing_key:
|
144
164
|
specification_version: 4
|
145
165
|
summary: Mongoid extension for tracking changes on document relations
|
146
166
|
test_files:
|
167
|
+
- spec/gemfiles/Gemfile.master
|
168
|
+
- spec/gemfiles/Gemfile.rails51
|
169
|
+
- spec/gemfiles/Gemfile.rails52
|
170
|
+
- spec/gemfiles/Gemfile.rails60
|
147
171
|
- spec/lib/mongoid/relations_dirty_tracking_spec.rb
|
148
172
|
- spec/spec_helper.rb
|
data/.gitignore
DELETED
data/Gemfile
DELETED
data/Rakefile
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
module Mongoid
|
2
|
-
module RelationsDirtyTracking
|
3
|
-
module Versioning
|
4
|
-
extend ActiveSupport::Concern
|
5
|
-
|
6
|
-
included do
|
7
|
-
alias_method_chain :revise, :relations
|
8
|
-
alias_method_chain :versioned_changes, :relations
|
9
|
-
alias_method_chain :revisable?, :relations
|
10
|
-
end
|
11
|
-
|
12
|
-
|
13
|
-
def revise_with_relations
|
14
|
-
previous = previous_revision
|
15
|
-
if previous && (versioned_attributes_changed? || relations_changed?)
|
16
|
-
new_version = versions.build(previous.versioned_attributes, without_protection: true)
|
17
|
-
|
18
|
-
rel_changes = relation_changes
|
19
|
-
|
20
|
-
self.class.tracked_relations.each do |rel_name|
|
21
|
-
# from some reason previous contaion also newly added relations
|
22
|
-
prev_value = rel_changes.include?(rel_name) ? rel_changes[rel_name][0] : previous[rel_name.to_sym]
|
23
|
-
new_version.send "#{rel_name}=", preserve_versioned_relation(reflect_on_association(rel_name), prev_value)
|
24
|
-
end
|
25
|
-
|
26
|
-
|
27
|
-
if version_max.present? && versions.length > version_max
|
28
|
-
deleted = versions.first
|
29
|
-
if deleted.paranoid?
|
30
|
-
versions.delete_one(deleted)
|
31
|
-
collection.find(atomic_selector).
|
32
|
-
update({ "$pull" => { "versions" => { "version" => deleted.version }}})
|
33
|
-
else
|
34
|
-
versions.delete(deleted)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
self.version = (version || 1) + 1
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def revisable_with_relations?
|
42
|
-
(versioned_attributes_changed? || relations_changed?) && !versionless?
|
43
|
-
end
|
44
|
-
|
45
|
-
def versioned_changes_with_relations
|
46
|
-
only_versioned_attributes(changes_without_relations.except("updated_at"))
|
47
|
-
end
|
48
|
-
|
49
|
-
def preserve_versioned_relation(rel_meta, value)
|
50
|
-
value
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
require File.expand_path('../lib/mongoid/relations_dirty_tracking/version', __FILE__)
|
3
|
-
|
4
|
-
Gem::Specification.new do |spec|
|
5
|
-
spec.name = "mongoid_relations_dirty_tracking"
|
6
|
-
spec.version = Mongoid::RelationsDirtyTracking::VERSION
|
7
|
-
spec.authors = ["David Sevcik"]
|
8
|
-
spec.email = ["david.sevcik@gmail.com"]
|
9
|
-
spec.description = "Mongoid extension for tracking changes on document relations"
|
10
|
-
spec.summary = "Mongoid extension for tracking changes on document relations"
|
11
|
-
spec.homepage = "http://github.com/versative/relations_dirty_tracking"
|
12
|
-
spec.license = "MIT"
|
13
|
-
|
14
|
-
spec.add_runtime_dependency 'activesupport', '~> 3.0'
|
15
|
-
spec.add_runtime_dependency 'mongoid', '>= 3.1.0', '< 4.0'
|
16
|
-
|
17
|
-
spec.add_development_dependency "bundler", "~> 1.3"
|
18
|
-
spec.add_development_dependency "rake"
|
19
|
-
spec.add_development_dependency "rspec", "~> 2.8"
|
20
|
-
spec.add_development_dependency "pry"
|
21
|
-
|
22
|
-
spec.files = `git ls-files`.split($/)
|
23
|
-
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
24
|
-
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
25
|
-
spec.require_paths = ["lib"]
|
26
|
-
end
|