store_model 1.6.2 → 2.0.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 +4 -4
- data/lib/store_model/model.rb +11 -0
- data/lib/store_model/types/one.rb +33 -2
- data/lib/store_model/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c15370c45ee576c10a8dacbf1ac740e0fb11e51fad7cb65dd7040e103bff70f0
|
4
|
+
data.tar.gz: 26aef12aa50c51dca2f9341986910a7bf88827491f41f393b73e1063c1fe0c4d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 509d1ea5ae2f710e4e04a89c1b7a52676e389edd6953fddc2dccab3a015c6f18d03e6e0c64639e2499fde389a0dc3e311a20c65afebbf4e2d6f01ae9d860b3a1
|
7
|
+
data.tar.gz: e8aa0b70959e32431d4352124cfa9834fc614c67417c53d90d935daec4ce6eb1f91606610260a46f1338cdbe9244cf5ee08348102d4e552210463f326f002fef
|
data/lib/store_model/model.rb
CHANGED
@@ -167,6 +167,17 @@ module StoreModel
|
|
167
167
|
@unknown_attributes ||= {}
|
168
168
|
end
|
169
169
|
|
170
|
+
# Serialized values for storing in db
|
171
|
+
#
|
172
|
+
# @return [Hash]
|
173
|
+
def values_for_database
|
174
|
+
result = @attributes.keys.each_with_object({}) do |key, values|
|
175
|
+
values[key] = @attributes.fetch(key).value_for_database
|
176
|
+
end
|
177
|
+
result.merge!(unknown_attributes)
|
178
|
+
result
|
179
|
+
end
|
180
|
+
|
170
181
|
private
|
171
182
|
|
172
183
|
def attribute?(attribute)
|
@@ -46,13 +46,36 @@ module StoreModel
|
|
46
46
|
# @return [String] serialized value
|
47
47
|
def serialize(value)
|
48
48
|
case value
|
49
|
-
when
|
50
|
-
ActiveSupport::JSON.encode(value
|
49
|
+
when @model_klass
|
50
|
+
ActiveSupport::JSON.encode(value.values_for_database)
|
51
|
+
when Hash
|
52
|
+
ActiveSupport::JSON.encode(value)
|
51
53
|
else
|
52
54
|
super
|
53
55
|
end
|
54
56
|
end
|
55
57
|
|
58
|
+
# Converts a value from database input to the appropriate ruby type.
|
59
|
+
#
|
60
|
+
# @param value [String] value to deserialize
|
61
|
+
#
|
62
|
+
# @return [Object] deserialized value
|
63
|
+
|
64
|
+
# rubocop:disable Style/RescueModifier
|
65
|
+
def deserialize(value)
|
66
|
+
case value
|
67
|
+
when String
|
68
|
+
payload = ActiveSupport::JSON.decode(value) rescue nil
|
69
|
+
model_instance(deserialize_by_types(payload))
|
70
|
+
when Hash
|
71
|
+
model_instance(deserialize_by_types(value))
|
72
|
+
when nil
|
73
|
+
nil
|
74
|
+
else raise_cast_error(value)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
# rubocop:enable Style/RescueModifier
|
78
|
+
|
56
79
|
private
|
57
80
|
|
58
81
|
def raise_cast_error(value)
|
@@ -63,6 +86,14 @@ module StoreModel
|
|
63
86
|
|
64
87
|
def model_instance(value)
|
65
88
|
@model_klass.new(value)
|
89
|
+
rescue ActiveModel::UnknownAttributeError => e
|
90
|
+
handle_unknown_attribute(value, e)
|
91
|
+
end
|
92
|
+
|
93
|
+
def deserialize_by_types(hash)
|
94
|
+
@model_klass.attribute_types.each.with_object(hash.dup) do |(key, type), value|
|
95
|
+
value[key] = type.deserialize(hash[key])
|
96
|
+
end
|
66
97
|
end
|
67
98
|
end
|
68
99
|
end
|
data/lib/store_model/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: store_model
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- DmitryTsepelev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-05-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|