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 +4 -4
- data/Gemfile.lock +1 -1
- data/lib/deserializer/base.rb +25 -6
- data/lib/deserializer/version.rb +1 -1
- data/test/lib/{deserializers/deserializers.rb → deserializers.rb} +8 -0
- data/test/unit/deserializer_test.rb +24 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 016e23ff6b54642bf58daea3210e2ed45011170b
|
4
|
+
data.tar.gz: e897dd40e6b336374169440965eee92f2496e0a9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 66afd6278382e72c8f925be8c05b4fc330c9886714de2860a82915212a1a76df6c72d200c10e0c9c4fa16fdb4005c065f540b45f70328d9f6b12d777da4d239f
|
7
|
+
data.tar.gz: cbe4496605fa6a1b9b1f37caf0affadeade2d833df2e857ff6c30c5158a1e14a616100adc84e79cb25b0807b2d09b803d72d988af7fab1efa4163159fa874f62
|
data/Gemfile.lock
CHANGED
data/lib/deserializer/base.rb
CHANGED
@@ -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
|
60
|
-
deseralize_nested(param_key, object_key)
|
59
|
+
if object_key[:deserializer]
|
60
|
+
deseralize_nested(param_key, object_key[:deserializer])
|
61
61
|
else
|
62
|
-
|
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
|
data/lib/deserializer/version.rb
CHANGED
@@ -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.
|
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
|
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
|
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
|