deserializer 0.1.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 16497e6608bbeeb126c16fbb2040022ef43c2a2e
4
- data.tar.gz: de87e7fd93f070278c1b0e3672edbc4363be0560
3
+ metadata.gz: 016e23ff6b54642bf58daea3210e2ed45011170b
4
+ data.tar.gz: e897dd40e6b336374169440965eee92f2496e0a9
5
5
  SHA512:
6
- metadata.gz: b0c1582c067f86f892705e7b7fd73f7ae42dc548354a22170c36b64868febc22a27cba2d306f0130f177062ceb84f548028900d7bb2a086c7be19ec953e7b0ae
7
- data.tar.gz: 4883819b21807f2915d8887688786aa3f0aecdaa8c411b750e482e6db14ca8e2a68ea041848424a86a9253b6d885902a4db8e881b4ba43beed332b094226543d
6
+ metadata.gz: 66afd6278382e72c8f925be8c05b4fc330c9886714de2860a82915212a1a76df6c72d200c10e0c9c4fa16fdb4005c065f540b45f70328d9f6b12d777da4d239f
7
+ data.tar.gz: cbe4496605fa6a1b9b1f37caf0affadeade2d833df2e857ff6c30c5158a1e14a616100adc84e79cb25b0807b2d09b803d72d988af7fab1efa4163159fa874f62
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- deserializer (0.1.0)
4
+ deserializer (0.2.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -8,14 +8,14 @@ module Deserializer
8
8
  def attributes(*attrs)
9
9
  self.attrs ||= {}
10
10
  attrs.each do |attr|
11
- self.attrs[attr] = attr
11
+ self.attrs[attr] = {attr: attr, options: {}}
12
12
  end
13
13
  end
14
14
 
15
15
  def attribute(attr, options = {})
16
16
  self.attrs ||= {}
17
17
  key = options.fetch(:key, attr)
18
- self.attrs[key] = attr
18
+ self.attrs[key] = {attr: attr, options: options}
19
19
  end
20
20
 
21
21
  def has_one( target, opts = {})
@@ -25,7 +25,7 @@ module Deserializer
25
25
  raise DeserializerError, class: self, message: "has_one associations need a deserilaizer"
26
26
  end
27
27
 
28
- self.attrs[target] = deserializer
28
+ self.attrs[target] = {attr: nil, deserializer: deserializer}
29
29
  end
30
30
 
31
31
  def has_many(*args)
@@ -56,10 +56,13 @@ module Deserializer
56
56
  next unless params.has_key? param_key
57
57
 
58
58
  # this checks if the object_key is a class that inherits from Deserializer
59
- if object_key.is_a?(Class) && object_key < Deserializer::Base
60
- deseralize_nested(param_key, object_key)
59
+ if object_key[:deserializer]
60
+ deseralize_nested(param_key, object_key[:deserializer])
61
61
  else
62
- object[object_key] = params[param_key]
62
+ attribute = object_key[:attr]
63
+ options = object_key[:options]
64
+
65
+ assign_value attribute, params[param_key], options
63
66
  end
64
67
  end
65
68
  object
@@ -94,5 +97,21 @@ module Deserializer
94
97
 
95
98
  deserializer.new( target, params[association] ).deserialize
96
99
  end
100
+
101
+ def assign_value( attribute, value, options = {} )
102
+ if options[:ignore_empty] && empty?(value)
103
+ return
104
+ # other options go here
105
+ else
106
+ self.object[attribute] = value
107
+ end
108
+ end
109
+
110
+ def empty?(value)
111
+ !value ||
112
+ value == "" ||
113
+ value == {} ||
114
+ value == []
115
+ end
97
116
  end
98
117
  end
@@ -1,3 +1,3 @@
1
1
  module Deserializer
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -15,6 +15,14 @@ class VanillaHasOneDeserializer < Deserializer::Base
15
15
 
16
16
  end
17
17
 
18
+ class EmptiableAttributeDeserializer < Deserializer::Base
19
+ attribute :emptiable, ignore_empty: true
20
+ attribute :nonemptiable, ignore_empty: false
21
+
22
+ attribute :emptiable_with_key, ignore_empty: true, key: :empty
23
+ attribute :nonemptiable_with_key, ignore_empty: false, key: :non_empty
24
+ end
25
+
18
26
  class HasOneWithTargetDeserializer < Deserializer::Base
19
27
  attribute :internal, key: :external
20
28
 
@@ -44,6 +44,30 @@ class DeserializerTest < Minitest::Test
44
44
  assert_equal 6, AttributeDeserializer.from_params( @params )[:user_id]
45
45
  end
46
46
 
47
+ def test_ignore_empty_option
48
+ d = EmptiableAttributeDeserializer
49
+
50
+ assert_equal ({ emptiable: true }), d.from_params( emptiable: true )
51
+ assert_equal ({ nonemptiable: true }), d.from_params( nonemptiable: true )
52
+
53
+ [false, nil, "", [], {}].each do |empty_value|
54
+ assert_equal ({}), d.from_params( emptiable: empty_value )
55
+ assert_equal ({ nonemptiable: empty_value }), d.from_params( nonemptiable: empty_value )
56
+ end
57
+ end
58
+
59
+ def test_ignore_empty_with_key
60
+ d = EmptiableAttributeDeserializer
61
+
62
+ assert_equal ({ emptiable_with_key: true }), d.from_params( empty: true )
63
+ assert_equal ({ nonemptiable_with_key: true }), d.from_params( non_empty: true )
64
+
65
+ [false, nil, "", [], {}].each do |value|
66
+ assert_equal ({}), d.from_params( key: value )
67
+ assert_equal ({ nonemptiable_with_key: value }), d.from_params( non_empty: value )
68
+ end
69
+ end
70
+
47
71
  def test_undefined_params_dont_come_through
48
72
  assert_equal nil, AttributeDeserializer.from_params( @params )[:i_shouldnt_be_here]
49
73
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deserializer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Greg Orlov
@@ -57,7 +57,7 @@ files:
57
57
  - lib/deserializer/base.rb
58
58
  - lib/deserializer/deserializer_error.rb
59
59
  - lib/deserializer/version.rb
60
- - test/lib/deserializers/deserializers.rb
60
+ - test/lib/deserializers.rb
61
61
  - test/minitest_helper.rb
62
62
  - test/unit/deserializer_error_test.rb
63
63
  - test/unit/deserializer_test.rb
@@ -86,7 +86,7 @@ signing_key:
86
86
  specification_version: 4
87
87
  summary: deserialization
88
88
  test_files:
89
- - test/lib/deserializers/deserializers.rb
89
+ - test/lib/deserializers.rb
90
90
  - test/minitest_helper.rb
91
91
  - test/unit/deserializer_error_test.rb
92
92
  - test/unit/deserializer_test.rb