active_snapshot 1.1.0 → 1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 166c7d2f5b7e2595314eab22bd3fc4e8de2b28c7f5c6deb8b7a909e45e3061bb
4
- data.tar.gz: daad374af6af17a0c14f0726418a72eb22af6d8366429572f70a3658c7a2168a
3
+ metadata.gz: e23a65eb08dfc3ed99f0866620573db756d00a429ae392f2ff5b3795d0bce977
4
+ data.tar.gz: 0b5e8b3052f30faa2944029f487b27825aa6f183dc47a4b342626e1c8a419738
5
5
  SHA512:
6
- metadata.gz: 6c648c31574aca219686d0ba73ceb44c074fc6787dfe0f3df3197bdf047604cee57938eecc3599168f35676d3f4230582114857a7d0d5c6db7e962afbf57b499
7
- data.tar.gz: e4904b1ed1f105cda6a60cb2cc243f35c03509e04b399b4412f05228c122f04aa94e32500c7af8eb68d76263bf0f41b1e49273af6d497b4ccc26f1c093cb8f05
6
+ metadata.gz: 82346ff73dc868ed37fb94b28dea73e6b228e8047c2a52f36a6d14e4b911995801fccec23effe56de353042fc991b26db3c48dd1c7f563e5c829eb0b00f31820
7
+ data.tar.gz: 883e5df0beb0e4ff2288ef9fe0bcff1970b49ff5cae6858be53f5d65acae7324d96c8f43dea7d51f4a832bc5ddcd8780cbf354a8c6cbfa3d36690ff4f0a35513
data/CHANGELOG.md CHANGED
@@ -2,9 +2,15 @@ CHANGELOG
2
2
  ---------
3
3
 
4
4
  - **Unreleased**
5
- * [View Diff](https://github.com/westonganger/active_snapshot/compare/v1.1.0...master)
5
+ * [View Diff](https://github.com/westonganger/active_snapshot/compare/v1.2.0...master)
6
6
  * Nothing yet
7
7
 
8
+ - **v1.2.0** - Jun 25, 2026
9
+ * [View Diff](https://github.com/westonganger/active_snapshot/compare/v1.1.0...v1.2.0)
10
+ * [#80](https://github.com/westonganger/active_snapshot/pull/80)
11
+ * Encrypted fields are now also encrypted in snapshots.
12
+ * Drop support for rails < 7.0
13
+
8
14
  - **v1.1.0** - Dec 28 2025
9
15
  * [View Diff](https://github.com/westonganger/active_snapshot/compare/v1.0.0...v1.1.0)
10
16
  * [#77](https://github.com/westonganger/active_snapshot/pull/77) - Remove uniqueness constraint from `snapshot_items` table migration
@@ -110,13 +110,16 @@ module ActiveSnapshot
110
110
  from_object = from ? from.object : {}
111
111
  to_object = to ? to.object : {}
112
112
 
113
+ item_type = (from || to).item_type
114
+ item_class = item_type.constantize
115
+
113
116
  keys = (from_object.keys + to_object.keys).uniq
114
117
 
115
118
  changes = {}
116
119
 
117
120
  keys.each do |key|
118
- from_value = from_object[key]
119
- to_value = to_object[key]
121
+ from_value = ActiveSnapshot.get_deserialized_value(item_class, key: key, value: from_object[key])
122
+ to_value = ActiveSnapshot.get_deserialized_value(item_class, key: key, value: to_object[key])
120
123
 
121
124
  next if to_value == from_value
122
125
 
@@ -162,15 +165,7 @@ module ActiveSnapshot
162
165
  end
163
166
 
164
167
  def build_snapshot_item(instance, child_group_name: nil)
165
- attrs = instance.attributes
166
-
167
- if instance.class.respond_to?(:defined_enums) && instance.class.defined_enums.any?
168
- instance.class.defined_enums.slice(*attrs.keys).each do |enum_col_name, enum_mapping|
169
- val = attrs.fetch(enum_col_name)
170
- next if val.nil?
171
- attrs[enum_col_name] = enum_mapping.fetch(val)
172
- end
173
- end
168
+ attrs = instance.attributes_for_database
174
169
 
175
170
  self.snapshot_items.new({
176
171
  object: attrs,
@@ -228,11 +223,12 @@ module ActiveSnapshot
228
223
  reified_parent = nil
229
224
 
230
225
  snapshot_items.each do |si|
231
- reified_item = si.item_type.constantize.new
226
+ item_class = si.item_type.constantize
227
+ reified_item = item_class.new
232
228
 
233
229
  si.object.each do |k,v|
234
230
  if reified_item.respond_to?("#{k}=")
235
- reified_item[k] = v
231
+ reified_item[k] = ActiveSnapshot.get_deserialized_value(item_class, key: k, value: v)
236
232
  else
237
233
  # database column was likely dropped since the snapshot was created
238
234
  end
@@ -55,7 +55,7 @@ module ActiveSnapshot
55
55
 
56
56
  object.each do |k,v|
57
57
  if item.respond_to?("#{k}=")
58
- item[k] = v
58
+ item[k] = ActiveSnapshot.get_deserialized_value(item.class, key: k, value: v)
59
59
  else
60
60
  # database column was likely dropped since the snapshot was created
61
61
  end
@@ -1,3 +1,3 @@
1
1
  module ActiveSnapshot
2
- VERSION = "1.1.0".freeze
2
+ VERSION = "1.2.0".freeze
3
3
  end
@@ -13,6 +13,17 @@ module ActiveSnapshot
13
13
  return @@config
14
14
  end
15
15
  end
16
+
17
+ def self.get_deserialized_value(klass, key:, value:)
18
+ return value if value.nil?
19
+
20
+ begin
21
+ klass.attribute_types[key].deserialize(value)
22
+ rescue ActiveRecord::Encryption::Errors::Base
23
+ # handle columns which are changed from non-encrypted to encrypted
24
+ value
25
+ end
26
+ end
16
27
  end
17
28
 
18
29
  ActiveSupport.on_load(:active_record) do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_snapshot
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Weston Ganger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-12-28 00:00:00.000000000 Z
11
+ date: 2026-06-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '6.1'
19
+ version: '7'
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: '6.1'
26
+ version: '7'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: railties
29
29
  requirement: !ruby/object:Gem::Requirement