ializer 0.4.0 → 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '086b2c8ab6cf0a932aa88a21336a776acc21df97cf2bfebba2d0c88bb7c9c0ac'
4
- data.tar.gz: 740fd2f601120118916917fed867b3427ec9707835450221b81758d47bade5cc
3
+ metadata.gz: a27b447fa68c06116dd6c47fee6b4b88d4a133b13918c3fef39128eb2b29bcd6
4
+ data.tar.gz: 5287b42771194bc862c4822fcff6ebd2f4468832bfeffd49bac56508f2a16b87
5
5
  SHA512:
6
- metadata.gz: 86005ca1dbe5ad262ecd4a0347406a39e2ce305806991efc122390021683541504120c37b740515459f89cc17b9dde63aceb4149f355ce998da4546b87140fb5
7
- data.tar.gz: c41e6d19fc25aa1f1704a51219d4a036d0df8579c6893024e1c6714b43c61c7da23580f2e487e720ac3cfd8aaca6511629bc4ecccb563bb720f0c50f00635b0e
6
+ metadata.gz: daa4636e280f256663d9cfb84be204b0b42a5e588022a1c0fd5a5905c3502597a6b0fd49f8aa8196426f4e2a03dbfd62e0ec2234633f7c196a795c275bee3153
7
+ data.tar.gz: a4c0da31e4d8bac18f97382f514cd2cba48dfdded2d820e0926825d022fdda546019c6e3eda7d02f308a9a4bfdc28ee2af9d1c1a97a2a1babc48835ee2e1101f
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
- "created-at": "2019-12-01T00:00:00.000-06:00",
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
- "in-stock": true
212
+ "in_stock": true
192
213
  },
193
214
  {
194
215
  "name": "Football",
195
216
  "decimal": "14.99",
196
- "in-stock": false
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-argument initializer (ie: Object.new)
250
+ **Note:** Objects that are parsed must have a zero argument initializer (ie: Object.new)
230
251
 
231
252
  #### Parsing a hash
232
253
 
@@ -53,6 +53,8 @@ module De
53
53
  private
54
54
 
55
55
  def parse_field(object, field, value)
56
+ return if value.nil?
57
+
56
58
  parsed_value = field.parse(value)
57
59
 
58
60
  return if parsed_value.nil?
@@ -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
@@ -10,7 +10,7 @@ module Ializer
10
10
  # :key_transform=: key_transform
11
11
  #
12
12
  # symbol of string transform to call on field keys
13
- # default is +:dasherize+.
13
+ # default is nil
14
14
  def key_transform=(key_transform)
15
15
  self.key_transformer = key_transform&.to_proc
16
16
  end
@@ -10,8 +10,8 @@ module Ializer
10
10
 
11
11
  def self.parse(value)
12
12
  Date.parse(value)
13
- rescue ArgumentError
14
- nil
13
+ rescue ArgumentError, TypeError
14
+ value
15
15
  end
16
16
  end
17
17
  end
@@ -9,6 +9,8 @@ module Ializer
9
9
  def self.parse(value)
10
10
  return value if value.is_a? Numeric
11
11
 
12
+ return nil if value.nil?
13
+
12
14
  value.to_i
13
15
  end
14
16
  end
@@ -23,6 +23,8 @@ module Ializer
23
23
 
24
24
  return Float::INFINITY if value == INFINITY_STRING
25
25
 
26
+ return nil if value.nil?
27
+
26
28
  value.to_f
27
29
  end
28
30
  end
@@ -9,7 +9,11 @@ module Ializer
9
9
  end
10
10
 
11
11
  def self.parse(value)
12
+ return nil if value.nil?
13
+
12
14
  Time.at(value / 1000.0)
15
+ rescue NoMethodError
16
+ value
13
17
  end
14
18
  end
15
19
  end
@@ -7,7 +7,11 @@ module Ializer
7
7
  end
8
8
 
9
9
  def self.parse(value)
10
+ return nil if value.nil?
11
+
10
12
  value.to_sym
13
+ rescue NoMethodError
14
+ value
11
15
  end
12
16
  end
13
17
  end
@@ -10,6 +10,8 @@ module Ializer
10
10
 
11
11
  def self.parse(value)
12
12
  DateTime.iso8601 value
13
+ rescue ArgumentError
14
+ value
13
15
  end
14
16
  end
15
17
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Ializer
4
- VERSION = '0.4.0'
4
+ VERSION = '0.8.1'
5
5
  end
@@ -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)
@@ -52,7 +67,7 @@ module Ser
52
67
 
53
68
  define_singleton_method(method_name) do |name, options = {}, &block|
54
69
  options[:deser] = deser
55
- add_attribute Field.new(name, options, &block)
70
+ add_attribute Field.new(name, options, config, &block)
56
71
  end
57
72
 
58
73
  matchers.each do |matcher|
@@ -62,12 +77,12 @@ module Ser
62
77
 
63
78
  def register_default(deser)
64
79
  define_singleton_method('default') do |name, options = {}, &block|
65
- raise ArgumentError, warning_message(name) if ::Ializer.config.raise_on_default?
80
+ raise ArgumentError, warning_message(name) if config.raise_on_default?
66
81
 
67
- puts warning_message(name) if ::Ializer.config.warn_on_default?
82
+ puts warning_message(name) if config.warn_on_default?
68
83
 
69
84
  options[:deser] = deser
70
- add_attribute Field.new(name, options, &block)
85
+ add_attribute Field.new(name, options, config, &block)
71
86
  end
72
87
  end
73
88
 
@@ -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 ::Ializer.config.key_transformer
7
+ def transform(key, key_transformer)
8
+ return key unless key_transformer
9
9
 
10
- ::Ializer.config.key_transformer.call(key)
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.0
4
+ version: 0.8.1
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-02-05 00:00:00.000000000 Z
11
+ date: 2020-06-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport