delta_changes 2.0.0 → 2.2.3
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/lib/delta_changes.rb +55 -27
- data/lib/delta_changes/version.rb +1 -1
- metadata +16 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 3b91b06537bf1a3a6ee19ade9f63e6105c81354d835639a6a4d294356aaabbb7
|
4
|
+
data.tar.gz: 5b8a6af25b886ea80f741f877b65d88fbf7f274b6e9f980e10e97a444edd477b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9b711cd683ac5889d92c659802c4f5fa3a31b94025d1392d40a4e64fa3a7cb0ac7b97686f8375a09d6999ccfdac7314ac67c36db65571493958d04cfef46896b
|
7
|
+
data.tar.gz: d7301799a39a9f1e14c7b5ace35810a1bb5f0fb77c1f7276ac39b47be257d1cc94f3cb4f28544ce2d6fb06bcf2555b45b237c7c63929e3f7e52347424777f636
|
data/lib/delta_changes.rb
CHANGED
@@ -6,8 +6,11 @@ module DeltaChanges
|
|
6
6
|
base.extend(ClassMethods)
|
7
7
|
base.cattr_accessor :delta_changes_options
|
8
8
|
base.attribute_method_suffix '_delta_changed?', '_delta_change', '_delta_was', '_delta_will_change!'
|
9
|
-
|
10
|
-
|
9
|
+
if ::ActiveRecord.version < Gem::Version.new('5.2')
|
10
|
+
base.send(:prepend, InstanceMethodsLegacy)
|
11
|
+
else
|
12
|
+
base.send(:prepend, InstanceMethods)
|
13
|
+
end
|
11
14
|
end
|
12
15
|
|
13
16
|
module ClassMethods
|
@@ -34,14 +37,58 @@ module DeltaChanges
|
|
34
37
|
attribute_delta_was(tracked_attribute)
|
35
38
|
end
|
36
39
|
|
37
|
-
define_method("#{tracked_attribute}_delta_will_change!") do
|
38
|
-
attribute_delta_will_change!(tracked_attribute)
|
40
|
+
define_method("#{tracked_attribute}_delta_will_change!") do |*args|
|
41
|
+
attribute_delta_will_change!(tracked_attribute, *args)
|
39
42
|
end
|
40
43
|
end
|
41
44
|
end
|
42
45
|
end
|
43
46
|
end
|
44
47
|
|
48
|
+
# Rails < 5.2
|
49
|
+
module InstanceMethodsLegacy
|
50
|
+
# Wrap write_attribute to remember original attribute value.
|
51
|
+
def write_attribute(attr, value)
|
52
|
+
attr = attr.to_s
|
53
|
+
|
54
|
+
unless self.class.delta_changes_options[:columns].include?(attr)
|
55
|
+
return super(attr, value)
|
56
|
+
end
|
57
|
+
|
58
|
+
# The attribute already has an unsaved change.
|
59
|
+
if delta_changed_attributes.include?(attr)
|
60
|
+
old = delta_changed_attributes[attr]
|
61
|
+
super(attr, value)
|
62
|
+
delta_changed_attributes.delete(attr) unless delta_changes_field_changed?(attr, old, value)
|
63
|
+
else
|
64
|
+
old = respond_to?(:clone_attribute_value) ? clone_attribute_value(:read_attribute, attr) : read_attribute(attr).dup
|
65
|
+
super(attr, value)
|
66
|
+
delta_changed_attributes[attr] = old if delta_changes_field_changed?(attr, old, value)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
module InstanceMethods
|
72
|
+
def _write_attribute(attr, value)
|
73
|
+
attr = attr.to_s
|
74
|
+
|
75
|
+
unless self.class.delta_changes_options[:columns].include?(attr)
|
76
|
+
return super(attr, value)
|
77
|
+
end
|
78
|
+
|
79
|
+
# The attribute already has an unsaved change.
|
80
|
+
if delta_changed_attributes.include?(attr)
|
81
|
+
old = delta_changed_attributes[attr]
|
82
|
+
super(attr, value)
|
83
|
+
delta_changed_attributes.delete(attr) unless delta_changes_field_changed?(attr, old, value)
|
84
|
+
else
|
85
|
+
old = read_attribute(attr).dup
|
86
|
+
super(attr, value)
|
87
|
+
delta_changed_attributes[attr] = old if delta_changes_field_changed?(attr, old, value)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
45
92
|
def delta_changes
|
46
93
|
delta_changed_attributes.keys.inject({}) { |h, attr| h[attr] = attribute_delta_change(attr); h }
|
47
94
|
end
|
@@ -84,39 +131,20 @@ module DeltaChanges
|
|
84
131
|
value = send(attr)
|
85
132
|
value.duplicable? ? value.clone : value
|
86
133
|
else
|
87
|
-
options[:from] || clone_attribute_value(:read_attribute, attr)
|
134
|
+
options[:from] || (respond_to?(:clone_attribute_value) ? clone_attribute_value(:read_attribute, attr) : read_attribute(attr).dup)
|
88
135
|
end
|
89
136
|
delta_changed_attributes[attr] = attribute_value
|
90
137
|
end
|
91
138
|
|
92
|
-
# Wrap write_attribute to remember original attribute value.
|
93
|
-
def write_attribute_with_delta_changes(attr, value)
|
94
|
-
attr = attr.to_s
|
95
|
-
|
96
|
-
unless self.class.delta_changes_options[:columns].include?(attr)
|
97
|
-
return write_attribute_without_delta_changes(attr, value)
|
98
|
-
end
|
99
|
-
|
100
|
-
# The attribute already has an unsaved change.
|
101
|
-
if delta_changed_attributes.include?(attr)
|
102
|
-
old = delta_changed_attributes[attr]
|
103
|
-
write_attribute_without_delta_changes(attr, value)
|
104
|
-
delta_changed_attributes.delete(attr) unless delta_changes_field_changed?(attr, old, value)
|
105
|
-
else
|
106
|
-
old = clone_attribute_value(:read_attribute, attr)
|
107
|
-
write_attribute_without_delta_changes(attr, value)
|
108
|
-
delta_changed_attributes[attr] = old if delta_changes_field_changed?(attr, old, value)
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
139
|
def delta_changes_field_changed?(attr, old, value)
|
113
|
-
return true if old.
|
140
|
+
return true if !old.present? && value.present?
|
141
|
+
|
114
142
|
if ActiveRecord::VERSION::STRING < '4.2.0'
|
115
143
|
_field_changed?(attr, old, value)
|
116
144
|
elsif ActiveRecord::VERSION::MAJOR < 5
|
117
145
|
_field_changed?(attr, old)
|
118
146
|
else
|
119
|
-
|
147
|
+
self[attr] != old
|
120
148
|
end
|
121
149
|
end
|
122
150
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: delta_changes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Grosser
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-03-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
version: 3.2.22
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '
|
22
|
+
version: '6.3'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,7 +29,7 @@ dependencies:
|
|
29
29
|
version: 3.2.22
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
32
|
+
version: '6.3'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: rake
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -62,16 +62,16 @@ dependencies:
|
|
62
62
|
name: sqlite3
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
64
64
|
requirements:
|
65
|
-
- - "
|
65
|
+
- - "~>"
|
66
66
|
- !ruby/object:Gem::Version
|
67
|
-
version:
|
67
|
+
version: 1.3.6
|
68
68
|
type: :development
|
69
69
|
prerelease: false
|
70
70
|
version_requirements: !ruby/object:Gem::Requirement
|
71
71
|
requirements:
|
72
|
-
- - "
|
72
|
+
- - "~>"
|
73
73
|
- !ruby/object:Gem::Version
|
74
|
-
version:
|
74
|
+
version: 1.3.6
|
75
75
|
- !ruby/object:Gem::Dependency
|
76
76
|
name: bump
|
77
77
|
requirement: !ruby/object:Gem::Requirement
|
@@ -87,7 +87,7 @@ dependencies:
|
|
87
87
|
- !ruby/object:Gem::Version
|
88
88
|
version: '0'
|
89
89
|
- !ruby/object:Gem::Dependency
|
90
|
-
name:
|
90
|
+
name: byebug
|
91
91
|
requirement: !ruby/object:Gem::Requirement
|
92
92
|
requirements:
|
93
93
|
- - ">="
|
@@ -101,7 +101,7 @@ dependencies:
|
|
101
101
|
- !ruby/object:Gem::Version
|
102
102
|
version: '0'
|
103
103
|
- !ruby/object:Gem::Dependency
|
104
|
-
name:
|
104
|
+
name: matching_bundle
|
105
105
|
requirement: !ruby/object:Gem::Requirement
|
106
106
|
requirements:
|
107
107
|
- - ">="
|
@@ -114,7 +114,7 @@ dependencies:
|
|
114
114
|
- - ">="
|
115
115
|
- !ruby/object:Gem::Version
|
116
116
|
version: '0'
|
117
|
-
description:
|
117
|
+
description:
|
118
118
|
email: michael@grosser.it
|
119
119
|
executables: []
|
120
120
|
extensions: []
|
@@ -122,11 +122,11 @@ extra_rdoc_files: []
|
|
122
122
|
files:
|
123
123
|
- lib/delta_changes.rb
|
124
124
|
- lib/delta_changes/version.rb
|
125
|
-
homepage: http://github.com/
|
125
|
+
homepage: http://github.com/zendesk/delta_changes
|
126
126
|
licenses:
|
127
127
|
- MIT
|
128
128
|
metadata: {}
|
129
|
-
post_install_message:
|
129
|
+
post_install_message:
|
130
130
|
rdoc_options: []
|
131
131
|
require_paths:
|
132
132
|
- lib
|
@@ -141,9 +141,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
141
141
|
- !ruby/object:Gem::Version
|
142
142
|
version: '0'
|
143
143
|
requirements: []
|
144
|
-
|
145
|
-
|
146
|
-
signing_key:
|
144
|
+
rubygems_version: 3.0.3
|
145
|
+
signing_key:
|
147
146
|
specification_version: 4
|
148
147
|
summary: Additional real/virtual attribute change tracking independent of ActiveRecords
|
149
148
|
test_files: []
|