hash_serializers 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 +4 -4
- data/README.md +18 -3
- data/lib/hash_serializer/attribute.rb +9 -0
- data/lib/hash_serializer/json.rb +27 -4
- data/lib/hash_serializer/version.rb +1 -1
- 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: e3674968a12ba32324a49a95ca09b2b6b476831470b3b41174a0675fec628682
|
4
|
+
data.tar.gz: c5c199369841565c7e08ac5777ce7b91308af4357aff99e098beacc74b064a39
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b738228d0328f4b34cc59c8a1face6008dda3b8c6acda740883c79db9fa34780d1fdb6ec88651967e2bcf6aba0bcc721ccbd80277327fa99a33514d043411818
|
7
|
+
data.tar.gz: bcd294b825f6815218dfe546d1098376998d9ee83fd335a2b105c01b5077d05a8b49dda14d676a38ec06d5b1d8db51228b2c1c1cb3fb9d4ee4fb410b4e2da49b
|
data/README.md
CHANGED
@@ -20,19 +20,34 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
```ruby
|
22
22
|
class UserSerializer < HashSerializer::JSON
|
23
|
+
format :boolean do |val|
|
24
|
+
!!val
|
25
|
+
end
|
26
|
+
format :date do |val|
|
27
|
+
val.iso8601
|
28
|
+
end
|
29
|
+
|
23
30
|
reveal :first_name, :email
|
24
31
|
reveal :last_name, as: :surname
|
32
|
+
|
33
|
+
reveal :is_admin, format: :boolean
|
34
|
+
|
35
|
+
with_format :date do
|
36
|
+
reveal :registered_at
|
37
|
+
end
|
25
38
|
end
|
26
39
|
|
27
40
|
serializable_user = UserSerializer.new(
|
28
41
|
first_name: 'Bob',
|
29
42
|
last_name: 'Marley',
|
30
|
-
email: 'email@exmple.com'
|
43
|
+
email: 'email@exmple.com',
|
44
|
+
is_admin: nil,
|
45
|
+
registered_at: Time.now
|
31
46
|
)
|
32
47
|
|
33
|
-
serializable_user.as_json # {:first_name=>"Bob", :email=>"email@exmple.com", :surname=>"Marley"}
|
48
|
+
serializable_user.as_json # {:first_name=>"Bob", :email=>"email@exmple.com", :surname=>"Marley", :is_admin=>false, :registered_at => "2019-03-05T23:18:33+02:00"}
|
34
49
|
|
35
|
-
serializable_user.to_json # '{"first_name":"Bob","email":"email@exmple.com","surname":"Marley"}'
|
50
|
+
serializable_user.to_json # '{"first_name":"Bob","email":"email@exmple.com","surname":"Marley","is_admin":false,"registered_at":"2019-03-05T23:18:33+02:00"}'
|
36
51
|
```
|
37
52
|
|
38
53
|
## Development
|
@@ -10,5 +10,14 @@ module HashSerializer
|
|
10
10
|
def key_name
|
11
11
|
options[:as] || name
|
12
12
|
end
|
13
|
+
|
14
|
+
def as_json(object)
|
15
|
+
value = object.public_send(name)
|
16
|
+
case options[:format]
|
17
|
+
when Symbol
|
18
|
+
value = object.formats[options[:format]].call(value)
|
19
|
+
end
|
20
|
+
{ key_name => value }
|
21
|
+
end
|
13
22
|
end
|
14
23
|
end
|
data/lib/hash_serializer/json.rb
CHANGED
@@ -10,21 +10,40 @@ module HashSerializer
|
|
10
10
|
end
|
11
11
|
|
12
12
|
class << self
|
13
|
-
def reveal(*attrs, as: nil)
|
13
|
+
def reveal(*attrs, as: nil, format: nil)
|
14
14
|
@attributes ||= []
|
15
|
-
|
15
|
+
attribute_options = {as: as, format: format}.merge(default_attribute_options)
|
16
|
+
@attributes.push(*attrs.map {|name| HashSerializer::Attribute.new(name, attribute_options)})
|
16
17
|
end
|
17
18
|
|
18
19
|
def attributes
|
19
20
|
@attributes
|
20
21
|
end
|
22
|
+
|
23
|
+
def default_attribute_options
|
24
|
+
@default_attribute_options || {}
|
25
|
+
end
|
26
|
+
|
27
|
+
def formats
|
28
|
+
@formats
|
29
|
+
end
|
30
|
+
|
31
|
+
def with_format(format_name)
|
32
|
+
@default_attribute_options = { format: format_name }
|
33
|
+
yield
|
34
|
+
@default_attribute_options = nil
|
35
|
+
end
|
36
|
+
|
37
|
+
def format(format_name, &formatter)
|
38
|
+
@formats ||= {}
|
39
|
+
@formats[format_name] = formatter
|
40
|
+
end
|
21
41
|
end
|
22
42
|
|
23
43
|
def as_json
|
24
44
|
hash_to_object!
|
25
45
|
attributes.inject({}) do |memo, attribute|
|
26
|
-
memo
|
27
|
-
memo
|
46
|
+
memo.merge(attribute.as_json(self))
|
28
47
|
end
|
29
48
|
end
|
30
49
|
|
@@ -32,6 +51,10 @@ module HashSerializer
|
|
32
51
|
::JSON.generate(as_json)
|
33
52
|
end
|
34
53
|
|
54
|
+
def formats
|
55
|
+
self.class.formats
|
56
|
+
end
|
57
|
+
|
35
58
|
private
|
36
59
|
|
37
60
|
def attributes
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hash_serializers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ivan Bondarenko
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-03-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|