active_snapshot 1.1.0 → 1.2.1

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: ee649f66f2e086bbef5720bccb6987ede52b70cb8eac983e1fc1cd29338d13fe
4
+ data.tar.gz: f9e5be06846f445c533dbe85a569a2be47d83f35c1ad38402b9778d0f4b52562
5
5
  SHA512:
6
- metadata.gz: 6c648c31574aca219686d0ba73ceb44c074fc6787dfe0f3df3197bdf047604cee57938eecc3599168f35676d3f4230582114857a7d0d5c6db7e962afbf57b499
7
- data.tar.gz: e4904b1ed1f105cda6a60cb2cc243f35c03509e04b399b4412f05228c122f04aa94e32500c7af8eb68d76263bf0f41b1e49273af6d497b4ccc26f1c093cb8f05
6
+ metadata.gz: 43e4edaf15e318014f9c97b2425bf4d92f23e3f9c162ce0dc1b91712d0d98d448ae6002ed833186287603fb0e1c7bf675b9242f66b0a9d8ce760cd62f3296494
7
+ data.tar.gz: edff53f7b93136a6dbbd70625b17cd0a1b14b40fff67a15bf57af065c92d8e54d626ffa4de5268e166f9bad8dc350a48ed453d97dca9d1b89361f98e0f7f3cd7
data/CHANGELOG.md CHANGED
@@ -2,9 +2,19 @@ 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.1...master)
6
6
  * Nothing yet
7
7
 
8
+ - **v1.2.1** - July 24, 2026
9
+ * [View Diff](https://github.com/westonganger/active_snapshot/compare/v1.2.0...v1.2.1)
10
+ * [#82](https://github.com/westonganger/active_snapshot/pull/82) - Properly serialize PostgreSQL array columns
11
+
12
+ - **v1.2.0** - Jun 25, 2026
13
+ * [View Diff](https://github.com/westonganger/active_snapshot/compare/v1.1.0...v1.2.0)
14
+ * [#80](https://github.com/westonganger/active_snapshot/pull/80)
15
+ * Encrypted fields are now also encrypted in snapshots.
16
+ * Drop support for rails < 7.0
17
+
8
18
  - **v1.1.0** - Dec 28 2025
9
19
  * [View Diff](https://github.com/westonganger/active_snapshot/compare/v1.0.0...v1.1.0)
10
20
  * [#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,13 +165,11 @@ 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)
168
+ attrs = instance.attributes_for_database.transform_values do |value|
169
+ if defined?(PG) && value.try(:encoder).is_a?(PG::TextEncoder::Array)
170
+ value.values
171
+ else
172
+ value
172
173
  end
173
174
  end
174
175
 
@@ -228,11 +229,12 @@ module ActiveSnapshot
228
229
  reified_parent = nil
229
230
 
230
231
  snapshot_items.each do |si|
231
- reified_item = si.item_type.constantize.new
232
+ item_class = si.item_type.constantize
233
+ reified_item = item_class.new
232
234
 
233
235
  si.object.each do |k,v|
234
236
  if reified_item.respond_to?("#{k}=")
235
- reified_item[k] = v
237
+ reified_item[k] = ActiveSnapshot.get_deserialized_value(item_class, key: k, value: v)
236
238
  else
237
239
  # database column was likely dropped since the snapshot was created
238
240
  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.1".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.1
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-07-24 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