active_type 1.1.0 → 1.1.1

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
2
  SHA256:
3
- metadata.gz: dedf631cb94b6d78cba8e784416802df866a1f8acbdcf3fd7d25f4d15bada221
4
- data.tar.gz: f5a41ad162f78acca060c78341b71709f6bfcedd3dbfffcee510a39b48e1b077
3
+ metadata.gz: 5dd2986e6945783f4c52776074f66d614ecbbcef28f5eb1471ebf450dd68c8d2
4
+ data.tar.gz: 763be8835f5184df763527d0b10b8af06edf12168a8d76ebc67951680e097cb7
5
5
  SHA512:
6
- metadata.gz: 2b573202922cbdcb5b37f22b4006184c6b5133ee1637778ed2381dc4c47a4974e31715eba54048eae1de0b224a20ec80b36f861368ac4d9312eed2b03371c8be
7
- data.tar.gz: d995b70abef2d78358677a4b6c7e26bb701b5914ef24f088e806f0cf895efad3b90ce2a9487c195da2934927e7f68bb573ea5244471baab2ee1212baaa72e034
6
+ metadata.gz: 301557809bffecdb33705cb01d68a1da237d6d0d30e726239e8c2af57c59eeb81c8c3287796f49c76abe0c4a65ab4196d4d23374224c0796ae207355f58e6019
7
+ data.tar.gz: bebb85d3edc8733b3816ee82925659a804836eaddc20d100c171a1eeb034134e3159de414d62fadc406d243c13b4ed4116b74127e777bf9da1d9872af7c3ea2b
data/.travis.yml CHANGED
@@ -9,10 +9,10 @@ gemfile:
9
9
  - Gemfile.4.2.mysql2
10
10
  - Gemfile.4.2.pg
11
11
  - Gemfile.4.2.sqlite3
12
- - Gemfile.5.1.pg
13
12
  - Gemfile.5.2.mysql2
14
13
  - Gemfile.5.2.sqlite3
15
14
  - Gemfile.5.2.pg
15
+ - Gemfile.6.0.pg
16
16
  before_script:
17
17
  - psql -c 'create database active_type_test;' -U postgres
18
18
  - mysql -e 'create database IF NOT EXISTS active_type_test;'
@@ -38,5 +38,11 @@ matrix:
38
38
  gemfile: Gemfile.4.2.pg
39
39
  - rvm: "2.5.3"
40
40
  gemfile: Gemfile.4.2.sqlite3
41
+ - rvm: "2.3.8"
42
+ gemfile: Gemfile.6.0.pg
43
+ - rvm: "2.4.5"
44
+ gemfile: Gemfile.6.0.pg
41
45
  install:
42
46
  - bundle install --no-deployment --jobs=3 --retry=3 --path=${BUNDLE_PATH:-vendor/bundle}
47
+ addons:
48
+ postgresql: 9.3
data/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## 1.1.1 (2019-05-07)
6
+
7
+ * Improved dirty tracking (`#changes?` etc) for virtual attributes to bring it more in line with
8
+ the behaviour of non-virtual attributes. Behaviour with ActiveRecord < 4 remains unchanged.
9
+ Thanks to @lowski.
10
+
5
11
  ## 1.1.0 (2019-03-04)
6
12
 
7
13
  * For some use cases, users need to access ActiveRecord's original `.attribute` method, which ActiveType overrides. We now alias `.attribute` as `.ar_attribute`.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_type (1.1.0)
4
+ active_type (1.1.1)
5
5
  activerecord (>= 3.2)
6
6
 
7
7
  GEM
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_type (1.1.0)
4
+ active_type (1.1.1)
5
5
  activerecord (>= 3.2)
6
6
 
7
7
  GEM
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_type (1.1.0)
4
+ active_type (1.1.1)
5
5
  activerecord (>= 3.2)
6
6
 
7
7
  GEM
data/Gemfile.4.2.pg.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_type (1.1.0)
4
+ active_type (1.1.1)
5
5
  activerecord (>= 3.2)
6
6
 
7
7
  GEM
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_type (1.1.0)
4
+ active_type (1.1.1)
5
5
  activerecord (>= 3.2)
6
6
 
7
7
  GEM
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_type (1.1.0)
4
+ active_type (1.1.1)
5
5
  activerecord (>= 3.2)
6
6
 
7
7
  GEM
data/Gemfile.5.2.pg.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_type (1.1.0)
4
+ active_type (1.1.1)
5
5
  activerecord (>= 3.2)
6
6
 
7
7
  GEM
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_type (1.1.0)
4
+ active_type (1.1.1)
5
5
  activerecord (>= 3.2)
6
6
 
7
7
  GEM
@@ -1,6 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'activerecord', '~>5.1.0'
3
+ gem 'activerecord', '~>6.0.0beta'
4
4
  gem 'rspec', '~>3.4'
5
5
  gem 'pg'
6
6
  gem 'rake'
@@ -0,0 +1,59 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ active_type (1.1.1)
5
+ activerecord (>= 3.2)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ activemodel (6.0.0.beta3)
11
+ activesupport (= 6.0.0.beta3)
12
+ activerecord (6.0.0.beta3)
13
+ activemodel (= 6.0.0.beta3)
14
+ activesupport (= 6.0.0.beta3)
15
+ activesupport (6.0.0.beta3)
16
+ concurrent-ruby (~> 1.0, >= 1.0.2)
17
+ i18n (>= 0.7, < 2)
18
+ minitest (~> 5.1)
19
+ tzinfo (~> 1.1)
20
+ zeitwerk (~> 1.3, >= 1.3.1)
21
+ concurrent-ruby (1.1.5)
22
+ diff-lcs (1.3)
23
+ gemika (0.3.4)
24
+ i18n (1.6.0)
25
+ concurrent-ruby (~> 1.0)
26
+ minitest (5.11.3)
27
+ pg (1.1.4)
28
+ rake (12.3.2)
29
+ rspec (3.8.0)
30
+ rspec-core (~> 3.8.0)
31
+ rspec-expectations (~> 3.8.0)
32
+ rspec-mocks (~> 3.8.0)
33
+ rspec-core (3.8.0)
34
+ rspec-support (~> 3.8.0)
35
+ rspec-expectations (3.8.2)
36
+ diff-lcs (>= 1.2.0, < 2.0)
37
+ rspec-support (~> 3.8.0)
38
+ rspec-mocks (3.8.0)
39
+ diff-lcs (>= 1.2.0, < 2.0)
40
+ rspec-support (~> 3.8.0)
41
+ rspec-support (3.8.0)
42
+ thread_safe (0.3.6)
43
+ tzinfo (1.2.5)
44
+ thread_safe (~> 0.1)
45
+ zeitwerk (1.4.3)
46
+
47
+ PLATFORMS
48
+ ruby
49
+
50
+ DEPENDENCIES
51
+ active_type!
52
+ activerecord (~> 6.0.0beta)
53
+ gemika
54
+ pg
55
+ rake
56
+ rspec (~> 3.4)
57
+
58
+ BUNDLED WITH
59
+ 1.16.6
@@ -1,3 +1,3 @@
1
1
  module ActiveType
2
- VERSION = '1.1.0'
2
+ VERSION = '1.1.1'
3
3
  end
@@ -75,13 +75,13 @@ module ActiveType
75
75
  def build_dirty_tracking_methods(name)
76
76
  @module.module_eval <<-BODY, __FILE__, __LINE__ + 1
77
77
  def #{name}_was
78
- nil
78
+ virtual_attributes_were["#{name}"]
79
79
  end
80
80
  BODY
81
81
 
82
82
  @module.module_eval <<-BODY, __FILE__, __LINE__ + 1
83
83
  def #{name}_changed?
84
- not #{name}.nil?
84
+ #{name} != virtual_attributes_were["#{name}"]
85
85
  end
86
86
  BODY
87
87
 
@@ -125,6 +125,7 @@ module ActiveType
125
125
  def initialize_dup(other)
126
126
  @virtual_attributes_cache = {}
127
127
  @virtual_attributes = VirtualAttributes.deep_dup(virtual_attributes)
128
+ @virtual_attributes_were = VirtualAttributes.deep_dup(virtual_attributes_were)
128
129
 
129
130
  super
130
131
  end
@@ -133,6 +134,10 @@ module ActiveType
133
134
  @virtual_attributes ||= {}
134
135
  end
135
136
 
137
+ def virtual_attributes_were
138
+ @virtual_attributes_were ||= {}
139
+ end
140
+
136
141
  def virtual_attributes_cache
137
142
  @virtual_attributes_cache ||= {}
138
143
  end
@@ -168,6 +173,31 @@ module ActiveType
168
173
  end
169
174
  end
170
175
 
176
+ def changed?
177
+ self.class._virtual_column_names.any? { |attr| virtual_attributes_were[attr] != send(attr) } || super
178
+ end
179
+
180
+ def changes
181
+ changes = self.class._virtual_column_names.each_with_object({}) do |attr, changes|
182
+ current_value = send(attr)
183
+ previous_value = virtual_attributes_were[attr]
184
+ changes[attr] = [previous_value, current_value] if previous_value != current_value
185
+ end
186
+
187
+ super.merge(changes)
188
+ end
189
+
190
+ if ActiveRecord::VERSION::MAJOR >= 4
191
+ def changes_applied
192
+ super
193
+
194
+ virtual_attributes.each do |attr, _|
195
+ value = read_virtual_attribute(attr)
196
+ virtual_attributes_were[attr] = value.duplicable? ? value.clone : value
197
+ end
198
+ end
199
+ end
200
+
171
201
  def read_virtual_attribute(name)
172
202
  name = name.to_s
173
203
  if virtual_attributes_cache.has_key?(name)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_type
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tobias Kraze
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-03-04 00:00:00.000000000 Z
12
+ date: 2019-05-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -75,14 +75,14 @@ files:
75
75
  - Gemfile.4.2.pg.lock
76
76
  - Gemfile.4.2.sqlite3
77
77
  - Gemfile.4.2.sqlite3.lock
78
- - Gemfile.5.1.pg
79
- - Gemfile.5.1.pg.lock
80
78
  - Gemfile.5.2.mysql2
81
79
  - Gemfile.5.2.mysql2.lock
82
80
  - Gemfile.5.2.pg
83
81
  - Gemfile.5.2.pg.lock
84
82
  - Gemfile.5.2.sqlite3
85
83
  - Gemfile.5.2.sqlite3.lock
84
+ - Gemfile.6.0.pg
85
+ - Gemfile.6.0.pg.lock
86
86
  - Gemfile.lock
87
87
  - LICENSE
88
88
  - README.md
@@ -123,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
123
123
  version: '0'
124
124
  requirements: []
125
125
  rubyforge_project:
126
- rubygems_version: 2.7.8
126
+ rubygems_version: 2.7.7
127
127
  signing_key:
128
128
  specification_version: 4
129
129
  summary: Make any Ruby object quack like ActiveRecord
data/Gemfile.5.1.pg.lock DELETED
@@ -1,59 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- active_type (1.1.0)
5
- activerecord (>= 3.2)
6
-
7
- GEM
8
- remote: https://rubygems.org/
9
- specs:
10
- activemodel (5.1.6.1)
11
- activesupport (= 5.1.6.1)
12
- activerecord (5.1.6.1)
13
- activemodel (= 5.1.6.1)
14
- activesupport (= 5.1.6.1)
15
- arel (~> 8.0)
16
- activesupport (5.1.6.1)
17
- concurrent-ruby (~> 1.0, >= 1.0.2)
18
- i18n (>= 0.7, < 2)
19
- minitest (~> 5.1)
20
- tzinfo (~> 1.1)
21
- arel (8.0.0)
22
- concurrent-ruby (1.1.4)
23
- diff-lcs (1.3)
24
- gemika (0.3.4)
25
- i18n (1.5.3)
26
- concurrent-ruby (~> 1.0)
27
- minitest (5.11.3)
28
- pg (0.21.0)
29
- rake (12.0.0)
30
- rspec (3.6.0)
31
- rspec-core (~> 3.6.0)
32
- rspec-expectations (~> 3.6.0)
33
- rspec-mocks (~> 3.6.0)
34
- rspec-core (3.6.0)
35
- rspec-support (~> 3.6.0)
36
- rspec-expectations (3.6.0)
37
- diff-lcs (>= 1.2.0, < 2.0)
38
- rspec-support (~> 3.6.0)
39
- rspec-mocks (3.6.0)
40
- diff-lcs (>= 1.2.0, < 2.0)
41
- rspec-support (~> 3.6.0)
42
- rspec-support (3.6.0)
43
- thread_safe (0.3.6)
44
- tzinfo (1.2.5)
45
- thread_safe (~> 0.1)
46
-
47
- PLATFORMS
48
- ruby
49
-
50
- DEPENDENCIES
51
- active_type!
52
- activerecord (~> 5.1.0)
53
- gemika
54
- pg
55
- rake
56
- rspec (~> 3.4)
57
-
58
- BUNDLED WITH
59
- 1.16.6