deserializer 0.1.0 → 0.2.0

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
  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