ializer 0.3.0 → 0.8.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/README.md +25 -4
- data/lib/de/ser/ializer.rb +2 -0
- data/lib/ializer/big_decimal_de_ser.rb +6 -0
- data/lib/ializer/config.rb +1 -1
- data/lib/ializer/date_de_ser.rb +2 -2
- data/lib/ializer/fix_num_de_ser.rb +2 -0
- data/lib/ializer/float_de_ser.rb +2 -0
- data/lib/ializer/millis_de_ser.rb +2 -0
- data/lib/ializer/symbol_de_ser.rb +4 -0
- data/lib/ializer/time_de_ser.rb +2 -0
- data/lib/ializer/version.rb +1 -1
- data/lib/ser/ializer.rb +25 -6
- data/lib/ser/ializer/field.rb +5 -5
- 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: 99faa3c4e7cca943f993c112f46b36f7d36029e1bb4910699e21503b7bf3b74a
|
4
|
+
data.tar.gz: 85b7a7155bb42711a6c618a27fd350b6430705a53844f333bb9dfbae631f83d4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e166c8c90c4cbc1b9535c45c2f0cb76ee1e7f048db28b65a71bcabab8a63832a31fbdba59c1ec1d239b939557fe1e9fd6382373b9435d420022c85a01289b3d9
|
7
|
+
data.tar.gz: dd84708200796c3b9dbfd5ad78496c41ee9cd72c7b77844c3933eab55fa531a20411adc36444152ed11242c0a6d4a7c8951aa626f62bb7dc578ea60ab23a802b
|
data/README.md
CHANGED
@@ -13,6 +13,7 @@ A fast serializer/deserializer for Ruby Objects.
|
|
13
13
|
* [Model Definitions](#model-definitions)
|
14
14
|
* [Serializer Definitions](#serializer-definitions)
|
15
15
|
* [DeSerializer Definitions](#deserializer-definitions)
|
16
|
+
* [De/Serializer Configuration](#deserializer-configuration)
|
16
17
|
* [Object Serialization](#object-serialization)
|
17
18
|
* [Object Deserialization](#object-deserialization)
|
18
19
|
* [Attributes](#attributes)
|
@@ -153,6 +154,26 @@ class CustomerDeSer < De::Ser::Ializer
|
|
153
154
|
end
|
154
155
|
```
|
155
156
|
|
157
|
+
### De/Ser::Ializer Configuration
|
158
|
+
|
159
|
+
You can override the global config for a specific `Ser::Ializer` or `De::Ser::Ializer` by calling the setup command.
|
160
|
+
|
161
|
+
**Note:** `setup` must be called at the beginning of the definition otherwise the default config will be used.
|
162
|
+
|
163
|
+
```ruby
|
164
|
+
class OrderDeSer < De::Ser::Ializer
|
165
|
+
setup do |config|
|
166
|
+
config.key_transform = :dasherize
|
167
|
+
end
|
168
|
+
|
169
|
+
integer :id
|
170
|
+
timestamp :created_at
|
171
|
+
|
172
|
+
nested :items, deser: OrderItemDeSer, model_class: OrderItem
|
173
|
+
nested :customer, deser: CustomerDeSer, model_class: Customer
|
174
|
+
end
|
175
|
+
```
|
176
|
+
|
156
177
|
### Sample Object
|
157
178
|
|
158
179
|
```ruby
|
@@ -183,17 +204,17 @@ json_string = OrderDeser.serialize_json(order)
|
|
183
204
|
```json
|
184
205
|
{
|
185
206
|
"id": 4,
|
186
|
-
"
|
207
|
+
"created_at": "2019-12-01T00:00:00.000-06:00",
|
187
208
|
"items": [
|
188
209
|
{
|
189
210
|
"name": "Baseball",
|
190
211
|
"decimal": "4.99",
|
191
|
-
"
|
212
|
+
"in_stock": true
|
192
213
|
},
|
193
214
|
{
|
194
215
|
"name": "Football",
|
195
216
|
"decimal": "14.99",
|
196
|
-
"
|
217
|
+
"in_stock": false
|
197
218
|
}
|
198
219
|
],
|
199
220
|
"customer": {
|
@@ -226,7 +247,7 @@ data = OrderDeSer.serialize([order, order2])
|
|
226
247
|
|
227
248
|
### Object Deserialization
|
228
249
|
|
229
|
-
**Note:** Objects that are parsed must have a zero
|
250
|
+
**Note:** Objects that are parsed must have a zero argument initializer (ie: Object.new)
|
230
251
|
|
231
252
|
#### Parsing a hash
|
232
253
|
|
data/lib/de/ser/ializer.rb
CHANGED
@@ -5,11 +5,17 @@ require 'bigdecimal'
|
|
5
5
|
module Ializer
|
6
6
|
class BigDecimalDeSer
|
7
7
|
def self.serialize(value, _context = nil)
|
8
|
+
value = value.to_d unless value.is_a? BigDecimal
|
9
|
+
|
8
10
|
value.to_s('F')
|
9
11
|
end
|
10
12
|
|
11
13
|
def self.parse(value)
|
14
|
+
return nil if value.nil?
|
15
|
+
|
12
16
|
BigDecimal(value)
|
17
|
+
rescue ArgumentError
|
18
|
+
value
|
13
19
|
end
|
14
20
|
end
|
15
21
|
end
|
data/lib/ializer/config.rb
CHANGED
data/lib/ializer/date_de_ser.rb
CHANGED
data/lib/ializer/float_de_ser.rb
CHANGED
data/lib/ializer/time_de_ser.rb
CHANGED
data/lib/ializer/version.rb
CHANGED
data/lib/ser/ializer.rb
CHANGED
@@ -5,9 +5,24 @@ module Ser
|
|
5
5
|
@@method_registry = {} # rubocop:disable Style/ClassVars
|
6
6
|
|
7
7
|
class << self
|
8
|
+
def config
|
9
|
+
@config ||=
|
10
|
+
if equal? Ser::Ializer
|
11
|
+
::Ializer.config
|
12
|
+
else
|
13
|
+
superclass.config
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def setup
|
18
|
+
@config = config.dup
|
19
|
+
|
20
|
+
yield @config
|
21
|
+
end
|
22
|
+
|
8
23
|
# Public DSL
|
9
24
|
def property(name, options = {}, &block)
|
10
|
-
return add_attribute(Field.new(name, options, &block)) if options[:deser]
|
25
|
+
return add_attribute(Field.new(name, options, config, &block)) if options[:deser]
|
11
26
|
|
12
27
|
return default(name, options, &block) unless options[:type]
|
13
28
|
|
@@ -25,7 +40,7 @@ module Ser
|
|
25
40
|
options[:deser] = deser
|
26
41
|
end
|
27
42
|
|
28
|
-
add_attribute(Field.new(name, options))
|
43
|
+
add_attribute(Field.new(name, options, config))
|
29
44
|
end
|
30
45
|
|
31
46
|
def with(deser)
|
@@ -38,6 +53,8 @@ module Ser
|
|
38
53
|
def serialize(object, context = nil)
|
39
54
|
return serialize_one(object, context) unless valid_enumerable?(object)
|
40
55
|
|
56
|
+
return [] if object.empty?
|
57
|
+
|
41
58
|
object.map { |o| serialize_one(o, context) }
|
42
59
|
end
|
43
60
|
|
@@ -50,7 +67,7 @@ module Ser
|
|
50
67
|
|
51
68
|
define_singleton_method(method_name) do |name, options = {}, &block|
|
52
69
|
options[:deser] = deser
|
53
|
-
add_attribute Field.new(name, options, &block)
|
70
|
+
add_attribute Field.new(name, options, config, &block)
|
54
71
|
end
|
55
72
|
|
56
73
|
matchers.each do |matcher|
|
@@ -60,12 +77,12 @@ module Ser
|
|
60
77
|
|
61
78
|
def register_default(deser)
|
62
79
|
define_singleton_method('default') do |name, options = {}, &block|
|
63
|
-
raise ArgumentError, warning_message(name) if
|
80
|
+
raise ArgumentError, warning_message(name) if config.raise_on_default?
|
64
81
|
|
65
|
-
puts warning_message(name) if
|
82
|
+
puts warning_message(name) if config.warn_on_default?
|
66
83
|
|
67
84
|
options[:deser] = deser
|
68
|
-
add_attribute Field.new(name, options, &block)
|
85
|
+
add_attribute Field.new(name, options, config, &block)
|
69
86
|
end
|
70
87
|
end
|
71
88
|
|
@@ -129,6 +146,8 @@ module Ser
|
|
129
146
|
|
130
147
|
return field.serialize(value, context) unless valid_enumerable?(value)
|
131
148
|
|
149
|
+
return nil if value.empty?
|
150
|
+
|
132
151
|
value.map { |v| field.serialize(v, context) }
|
133
152
|
end
|
134
153
|
|
data/lib/ser/ializer/field.rb
CHANGED
@@ -4,19 +4,19 @@ module Ser
|
|
4
4
|
class Ializer
|
5
5
|
class Field
|
6
6
|
class << self
|
7
|
-
def transform(key)
|
8
|
-
return key unless
|
7
|
+
def transform(key, key_transformer)
|
8
|
+
return key unless key_transformer
|
9
9
|
|
10
|
-
|
10
|
+
key_transformer.call(key)
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
14
|
attr_reader :name, :setter, :key, :deser, :model_class, :if_condition, :block
|
15
15
|
|
16
|
-
def initialize(name, options, &block)
|
16
|
+
def initialize(name, options, config, &block)
|
17
17
|
@name = name
|
18
18
|
@setter = options[:setter] || "#{name}="
|
19
|
-
@key = options[:key] || Field.transform(name.to_s)
|
19
|
+
@key = options[:key] || Field.transform(name.to_s, config.key_transformer)
|
20
20
|
@deser = options[:deser]
|
21
21
|
@if_condition = options[:if]
|
22
22
|
@model_class = options[:model_class]
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ializer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeremy Steinberg
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-06-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|