delta_changes 2.0.0 → 2.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: f722d8be9e14ffadad47521a4db8ddab44a35300
4
- data.tar.gz: 7eae375050f5af8f4090ce310a0205b114e292a7
2
+ SHA256:
3
+ metadata.gz: 3b91b06537bf1a3a6ee19ade9f63e6105c81354d835639a6a4d294356aaabbb7
4
+ data.tar.gz: 5b8a6af25b886ea80f741f877b65d88fbf7f274b6e9f980e10e97a444edd477b
5
5
  SHA512:
6
- metadata.gz: 299ca74a9af437f53bb81c32a2d227add2c587e0dc282c5af18bc471d2fea7d9538185805af6d926749bea120cc3961b48bb48111b09ba08e8e5269ca082d859
7
- data.tar.gz: d9cbf8b6ba85d2bb8bd7b6c35d96d3ca0c8182eb8adbb6ee4e2def43392a561b46826bb28263b4725aec0fa273dc677e3ceedca8150a21f3ccb0209512db0e95
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
- base.send(:alias_method, :write_attribute_without_delta_changes, :write_attribute)
10
- base.send(:alias_method, :write_attribute, :write_attribute_with_delta_changes)
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.nil? && !value.nil?
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
- changes_include?(attr)
147
+ self[attr] != old
120
148
  end
121
149
  end
122
150
  end
@@ -1,3 +1,3 @@
1
1
  module DeltaChanges
2
- VERSION = "2.0.0"
2
+ VERSION = "2.2.3"
3
3
  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.0.0
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: 2016-03-10 00:00:00.000000000 Z
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: '5.1'
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: '5.1'
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: '0'
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: '0'
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: wwtd
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: byebug
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/grosser/delta_changes
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
- rubyforge_project:
145
- rubygems_version: 2.4.5.1
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: []