easy_serializer 0.1.2 → 0.1.3
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/lib/easy_serializer.rb +1 -0
- data/lib/easy_serializer/attribute.rb +60 -0
- data/lib/easy_serializer/base.rb +48 -38
- data/lib/easy_serializer/cacher.rb +30 -10
- data/lib/easy_serializer/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 358888cc7f61e9b3510147bbe505d1418225b41e
|
4
|
+
data.tar.gz: 2de0f0cda813e67bd51a10166da9b05a5d854f8b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 09d793a662fb451a75f0a503361e62f1d38677f46e3297b432d31348f11d810c1c87dd88efbc00ff35177cde624189303273f3a730ec86c3c2d840f3f519b66c
|
7
|
+
data.tar.gz: 5855120cdba4d4eb42e77c7da6f0e25ab80225f62c9ada0cb19298cd09078c16c3126b66c7cf2766cce7bcd54cc905f2d4d05e6b1e6007d978fc9d83beaad568
|
data/lib/easy_serializer.rb
CHANGED
@@ -0,0 +1,60 @@
|
|
1
|
+
module EasySerializer
|
2
|
+
Attribute = Struct.new(:serializer, :setup) do
|
3
|
+
include Helpers
|
4
|
+
def self.call(serializer, setup)
|
5
|
+
new(serializer, setup).value
|
6
|
+
end
|
7
|
+
|
8
|
+
def object
|
9
|
+
serializer.object
|
10
|
+
end
|
11
|
+
def value
|
12
|
+
value_or_default
|
13
|
+
end
|
14
|
+
|
15
|
+
def value_or_default
|
16
|
+
value = attr_serializer
|
17
|
+
if value.nil? && setup[:default]
|
18
|
+
return option_to_value(setup[:default], object, serializer)
|
19
|
+
end
|
20
|
+
value
|
21
|
+
end
|
22
|
+
|
23
|
+
def attr_serializer
|
24
|
+
value = cache_or_attribute
|
25
|
+
return value.output if value.is_a?(CacheOutput)
|
26
|
+
return value unless serializer_class = setup[:serializer]
|
27
|
+
if setup[:collection]
|
28
|
+
Array.wrap(value).map { |o| serialize!(serializer_class, o) }
|
29
|
+
else
|
30
|
+
serialize!(serializer_class, value)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
def send_name(obj)
|
34
|
+
obj.send(setup[:name])
|
35
|
+
end
|
36
|
+
|
37
|
+
def cache_or_attribute
|
38
|
+
execute = setup[:block] || method(:send_name)
|
39
|
+
if EasySerializer.perform_caching && setup[:cache]
|
40
|
+
Cacher.call(serializer, setup, nil, &execute)
|
41
|
+
else
|
42
|
+
serializer.instance_exec object, &execute
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def send_to_serializer(serializer_class, value)
|
47
|
+
return unless value
|
48
|
+
option_to_value(serializer_class, value, serializer).call(value)
|
49
|
+
end
|
50
|
+
|
51
|
+
def serialize!(serializer_class, value)
|
52
|
+
return unless value
|
53
|
+
if EasySerializer.perform_caching && setup[:cache]
|
54
|
+
Cacher.call(serializer, setup, value)
|
55
|
+
else
|
56
|
+
send_to_serializer(serializer_class, value)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
data/lib/easy_serializer/base.rb
CHANGED
@@ -47,10 +47,15 @@ module EasySerializer
|
|
47
47
|
alias_method :to_hash, :serialize
|
48
48
|
alias_method :to_s, :to_json
|
49
49
|
|
50
|
+
def send_to_serializer(serializer, value)
|
51
|
+
return unless value
|
52
|
+
option_to_value(serializer, value).call(value)
|
53
|
+
end
|
54
|
+
|
50
55
|
private
|
51
56
|
|
52
57
|
def _serialize
|
53
|
-
__serializable_attributes.each_with_object(
|
58
|
+
__serializable_attributes.each_with_object({}) do |setup, hash|
|
54
59
|
if setup[:key] === false
|
55
60
|
hash.merge!(value_or_default(setup))
|
56
61
|
else
|
@@ -64,7 +69,7 @@ module EasySerializer
|
|
64
69
|
return false unless EasySerializer.perform_caching
|
65
70
|
cache = __cache
|
66
71
|
return false unless cache
|
67
|
-
Cacher.root_call(self, cache, object) { _serialize }
|
72
|
+
Cacher.root_call(self, cache, object) { _serialize }.output
|
68
73
|
end
|
69
74
|
|
70
75
|
def __cache
|
@@ -76,45 +81,50 @@ module EasySerializer
|
|
76
81
|
end
|
77
82
|
|
78
83
|
def value_or_default(setup)
|
79
|
-
|
80
|
-
if value.nil? && setup[:default]
|
81
|
-
return option_to_value(setup[:default], object)
|
82
|
-
end
|
83
|
-
value
|
84
|
+
Attribute.call(self, setup)
|
84
85
|
end
|
85
86
|
|
86
|
-
def
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
87
|
+
# def value_or_default(setup)
|
88
|
+
# value = attr_serializer(setup)
|
89
|
+
# if value.nil? && setup[:default]
|
90
|
+
# return option_to_value(setup[:default], object)
|
91
|
+
# end
|
92
|
+
# value
|
93
|
+
# end
|
94
|
+
#
|
95
|
+
# def attr_serializer(setup)
|
96
|
+
# value = cache_or_attribute(setup)
|
97
|
+
# return value if value.respond_to?(:fetch) || value.respond_to?(:each)
|
98
|
+
# return value unless serializer = setup[:serializer]
|
99
|
+
# if setup[:collection]
|
100
|
+
# Array.wrap(value).map { |o| cache_or_serialize(serializer, o, setup) }
|
101
|
+
# else
|
102
|
+
# cache_or_serialize(serializer, value, setup)
|
103
|
+
# end
|
104
|
+
# end
|
105
|
+
#
|
106
|
+
# def cache_or_attribute(setup)
|
107
|
+
# execute = setup[:block] || proc { |o| o.send(setup[:name]) }
|
108
|
+
# if EasySerializer.perform_caching && setup[:cache]
|
109
|
+
# Cacher.call(self, setup, nil, &execute)
|
110
|
+
# else
|
111
|
+
# if object.respond_to?(:each)
|
112
|
+
# object.map { |o| instance_exec o, &execute }
|
113
|
+
# else
|
114
|
+
# instance_exec object, &execute
|
115
|
+
# end
|
116
|
+
# end
|
117
|
+
# end
|
118
|
+
#
|
119
|
+
# def cache_or_serialize(serializer, value, opts)
|
120
|
+
# return unless value
|
121
|
+
# if EasySerializer.perform_caching && opts[:cache]
|
122
|
+
# Cacher.call(self, opts, value)
|
123
|
+
# else
|
124
|
+
# send_to_serializer(serializer, value)
|
125
|
+
# end
|
126
|
+
# end
|
95
127
|
|
96
|
-
def cache_or_attribute(setup)
|
97
|
-
execute = setup[:block] || proc { |o| o.send(setup[:name]) }
|
98
|
-
if EasySerializer.perform_caching && setup[:cache]
|
99
|
-
Cacher.call(self, setup, nil, &execute)
|
100
|
-
else
|
101
|
-
instance_exec object, &execute
|
102
|
-
end
|
103
|
-
end
|
104
128
|
|
105
|
-
def cache_or_serialize(serializer, value, opts)
|
106
|
-
return unless value
|
107
|
-
if EasySerializer.perform_caching && opts[:cache]
|
108
|
-
Cacher.call(self, opts, value)
|
109
|
-
else
|
110
|
-
send_to_serializer(serializer, value)
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
|
115
|
-
def send_to_serializer(serializer, value)
|
116
|
-
return unless value
|
117
|
-
option_to_value(serializer, value).call(value)
|
118
|
-
end
|
119
129
|
end
|
120
130
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
module EasySerializer
|
2
|
+
CacheOutput = Struct.new(:output)
|
2
3
|
Cacher = Struct.new(:serializer) do
|
3
4
|
include Helpers
|
4
5
|
|
@@ -29,14 +30,14 @@ module EasySerializer
|
|
29
30
|
@value ||= serializer.instance_exec object, &block
|
30
31
|
end
|
31
32
|
|
32
|
-
|
33
|
-
|
33
|
+
def key(_value = nil)
|
34
|
+
_value ||= value
|
34
35
|
@key ||= if options[:cache_key]
|
35
|
-
option_to_value(options[:cache_key],
|
36
|
+
option_to_value(options[:cache_key], _value, serializer)
|
36
37
|
elsif options[:serializer] || options[:root_call]
|
37
|
-
[
|
38
|
+
[_value, 'EasySerialized'].flatten
|
38
39
|
else
|
39
|
-
[
|
40
|
+
[_value, options[:name], 'EasySerialized'].flatten
|
40
41
|
end
|
41
42
|
end
|
42
43
|
|
@@ -48,13 +49,32 @@ module EasySerializer
|
|
48
49
|
end || {}
|
49
50
|
end
|
50
51
|
|
51
|
-
def
|
52
|
-
|
53
|
-
|
54
|
-
|
52
|
+
def _block_to_execute(_value = nil)
|
53
|
+
_value ||= value
|
54
|
+
if options[:serializer]
|
55
|
+
proc { serializer.send_to_serializer(options[:serializer], _value) }
|
56
|
+
else
|
55
57
|
proc { serializer.instance_exec object, &block }
|
56
58
|
end
|
57
|
-
|
59
|
+
end
|
60
|
+
|
61
|
+
def fetch(_key = nil, _value = nil)
|
62
|
+
_key ||= key
|
63
|
+
_value ||= value
|
64
|
+
EasySerializer.cache.fetch(_key, options_for_cache, &_block_to_execute(_value))
|
65
|
+
end
|
66
|
+
|
67
|
+
def wrap(elem)
|
68
|
+
CacheOutput.new(elem)
|
69
|
+
end
|
70
|
+
|
71
|
+
def execute
|
72
|
+
elem = if options[:collection]
|
73
|
+
Array.wrap(value).map{ |o| fetch(key(o), o) }
|
74
|
+
else
|
75
|
+
fetch
|
76
|
+
end
|
77
|
+
wrap(elem)
|
58
78
|
end
|
59
79
|
end
|
60
80
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: easy_serializer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Artur Pañach
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-03-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -88,6 +88,7 @@ files:
|
|
88
88
|
- bin/setup
|
89
89
|
- easy_serializer.gemspec
|
90
90
|
- lib/easy_serializer.rb
|
91
|
+
- lib/easy_serializer/attribute.rb
|
91
92
|
- lib/easy_serializer/base.rb
|
92
93
|
- lib/easy_serializer/cacher.rb
|
93
94
|
- lib/easy_serializer/helpers.rb
|