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 +4 -4
- data/CHANGELOG.md +11 -1
- data/lib/active_snapshot/models/snapshot.rb +13 -11
- data/lib/active_snapshot/models/snapshot_item.rb +1 -1
- data/lib/active_snapshot/version.rb +1 -1
- data/lib/active_snapshot.rb +11 -0
- metadata +4 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ee649f66f2e086bbef5720bccb6987ede52b70cb8eac983e1fc1cd29338d13fe
|
|
4
|
+
data.tar.gz: f9e5be06846f445c533dbe85a569a2be47d83f35c1ad38402b9778d0f4b52562
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
|
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.
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
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
|
-
|
|
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
|
data/lib/active_snapshot.rb
CHANGED
|
@@ -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
|
|
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:
|
|
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: '
|
|
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: '
|
|
26
|
+
version: '7'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: railties
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|