fmcache 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/Gemfile.lock +1 -1
- data/lib/fmcache/decoder.rb +4 -1
- data/lib/fmcache/decoder/fields_checker.rb +1 -1
- data/lib/fmcache/decoder/value_decoder.rb +6 -3
- data/lib/fmcache/encoder.rb +3 -7
- data/lib/fmcache/engine.rb +9 -1
- data/lib/fmcache/field.rb +3 -0
- data/lib/fmcache/helper.rb +1 -0
- data/lib/fmcache/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3420398f6bb70d1972fe648bc4a880ac64bbc08d43cad850109b60a11cee4c38
|
4
|
+
data.tar.gz: 170a4ef45eaa1ebdb23b12abfa7d142792a33cbad1383c0470c2cabcfc202e2c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e633c361b62356812fcce2fcdab642b3678d444c063fe06497644146e3ad02fddfa5927664418c0bbdaf7b89c3835a8d8118bcca1b8e3cb92e9eeaeac823c739
|
7
|
+
data.tar.gz: 4ae7c3394bb79a1535f5eac8625b18ccbfd4f318a54e855e94dbe25584e46cb7e8d979beed88a06736d5131da73d4cebb481315e378217b5c74049d272d78ed0
|
data/Gemfile.lock
CHANGED
data/lib/fmcache/decoder.rb
CHANGED
@@ -32,12 +32,14 @@ module FMCache
|
|
32
32
|
|
33
33
|
# @param [<Hash>] list
|
34
34
|
# @param [FieldMaskParser::Node] field_mask
|
35
|
+
# @param [<String>] fields
|
36
|
+
# @return [DecodeResult]
|
35
37
|
def decode_list(list, field_mask: nil, fields: nil)
|
36
38
|
if field_mask.nil? && fields.nil?
|
37
39
|
raise "invalid args!"
|
38
40
|
end
|
39
41
|
if fields
|
40
|
-
field_mask = field_mask_parser.call(fields
|
42
|
+
field_mask = field_mask_parser.call(fields)
|
41
43
|
end
|
42
44
|
|
43
45
|
values = []
|
@@ -61,6 +63,7 @@ module FMCache
|
|
61
63
|
)
|
62
64
|
end
|
63
65
|
|
66
|
+
# @param [FieldsChecker::CheckResult] decode_result
|
64
67
|
# @param [DecodeResult] decode_result
|
65
68
|
# @param [DecodeResult] invalid_decode_result
|
66
69
|
# @return [<Hash>, <Hash>, IncompleteInfo]
|
@@ -60,7 +60,7 @@ module FMCache
|
|
60
60
|
missing_fields += m_f
|
61
61
|
end
|
62
62
|
else
|
63
|
-
# NOTE: When the
|
63
|
+
# NOTE: When the cache of id does not exist, treat current and lower
|
64
64
|
# layer as missing fields
|
65
65
|
# TODO(south37) Improve performance
|
66
66
|
missing_fields += fields
|
@@ -13,7 +13,7 @@ module FMCache
|
|
13
13
|
|
14
14
|
h = fetch(field_mask, [])
|
15
15
|
|
16
|
-
d = h.values.first # NOTE: Top of h is a
|
16
|
+
d = h.values.first # NOTE: Top of h is a hash
|
17
17
|
|
18
18
|
[d.to_h, @invalid_fields]
|
19
19
|
end
|
@@ -53,6 +53,8 @@ module FMCache
|
|
53
53
|
r
|
54
54
|
end
|
55
55
|
|
56
|
+
# @param [FieldMaskParser::Node] field_mask
|
57
|
+
# @param [<Symbol>] prefix
|
56
58
|
def fetch_items(field_mask, prefix)
|
57
59
|
r = {}
|
58
60
|
field_mask.attrs.each do |attr|
|
@@ -66,14 +68,15 @@ module FMCache
|
|
66
68
|
r
|
67
69
|
end
|
68
70
|
|
69
|
-
# @param [
|
71
|
+
# @param [<Hash>] h
|
72
|
+
# @return [<Item>]
|
70
73
|
def itemize(h)
|
71
74
|
h.map do |hh|
|
72
75
|
Item.new(id: hh.fetch(:id), p_id: hh.fetch(:p_id), value: hh.fetch(:value))
|
73
76
|
end
|
74
77
|
end
|
75
78
|
|
76
|
-
# @param [{ Integer => Data }]
|
79
|
+
# @param [{ Integer => Data }] parents
|
77
80
|
# @param [FieldMaskParser::Node] field_mask
|
78
81
|
# @param [<Symbol>] prefix
|
79
82
|
def assign_has_one!(parents, field_mask, prefix)
|
data/lib/fmcache/encoder.rb
CHANGED
@@ -6,19 +6,15 @@ module FMCache
|
|
6
6
|
# @param [FieldMaskParser::Node] field_mask
|
7
7
|
# @return [{ String => { String => <Hash> } }]
|
8
8
|
def encode(values, field_mask)
|
9
|
+
fields = Helper.to_fields(field_mask)
|
10
|
+
|
9
11
|
r = {}
|
10
12
|
values.each do |value|
|
11
13
|
h = {}
|
12
|
-
|
13
|
-
# NOTE: initialize each field by array
|
14
|
-
fields = Helper.to_fields(field_mask).map(&:to_s)
|
15
14
|
fields.each do |f|
|
16
15
|
h[f] = []
|
17
16
|
end
|
18
|
-
|
19
|
-
encode_one(value, field_mask).each do |f, v|
|
20
|
-
h[f] = v
|
21
|
-
end
|
17
|
+
h.merge! encode_one(value, field_mask)
|
22
18
|
|
23
19
|
id = value.fetch(:id)
|
24
20
|
r[Helper.to_key(id)] = h
|
data/lib/fmcache/engine.rb
CHANGED
@@ -3,6 +3,10 @@ module FMCache
|
|
3
3
|
DEFAULT_TTL = 7 * 24 * 3600 # 7 days
|
4
4
|
|
5
5
|
# @param [Redis | MockRRedis] client
|
6
|
+
# @param [Proc] fm_parser
|
7
|
+
# @param [Integer] ttl
|
8
|
+
# @param [Proc] notifier
|
9
|
+
# @param [#dump#load] json_serializer
|
6
10
|
def initialize(client:, fm_parser:, ttl: DEFAULT_TTL, notifier: nil, json_serializer: nil)
|
7
11
|
@client = Client.new(client, notifier)
|
8
12
|
@fm_parser = wrap(fm_parser)
|
@@ -31,7 +35,7 @@ module FMCache
|
|
31
35
|
normalize!(field_mask)
|
32
36
|
|
33
37
|
keys = Helper.to_keys(ids)
|
34
|
-
fields = Helper.to_fields(field_mask)
|
38
|
+
fields = Helper.to_fields(field_mask)
|
35
39
|
h = client.get(keys: keys, fields: fields)
|
36
40
|
decode(merge(@jsonizer.dejsonize(h), ids), field_mask)
|
37
41
|
end
|
@@ -66,6 +70,7 @@ module FMCache
|
|
66
70
|
Helper.sort(values + v + i_v, ids)
|
67
71
|
end
|
68
72
|
|
73
|
+
# @param [<Integer | String>] ids
|
69
74
|
def delete(ids:)
|
70
75
|
ids = ids.map(&:to_i)
|
71
76
|
client.del(keys: Helper.to_keys(ids))
|
@@ -99,6 +104,8 @@ module FMCache
|
|
99
104
|
hash
|
100
105
|
end
|
101
106
|
|
107
|
+
# @param [Proc] fm_parser
|
108
|
+
# @return [Proc]
|
102
109
|
def wrap(fm_parser)
|
103
110
|
-> (fields) {
|
104
111
|
n = fm_parser.call(fields)
|
@@ -107,6 +114,7 @@ module FMCache
|
|
107
114
|
}
|
108
115
|
end
|
109
116
|
|
117
|
+
# @param [FieldMaskParser::Node] field_mask
|
110
118
|
def normalize!(field_mask)
|
111
119
|
if !field_mask.attrs.include?(:id)
|
112
120
|
field_mask.attrs << :id
|
data/lib/fmcache/field.rb
CHANGED
data/lib/fmcache/helper.rb
CHANGED
data/lib/fmcache/version.rb
CHANGED