fmcache 0.1.3 → 0.2.1
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 +3 -3
- data/fmcache.gemspec +1 -1
- data/lib/fmcache/engine.rb +46 -20
- data/lib/fmcache/helper.rb +19 -1
- data/lib/fmcache/incomplete_info.rb +2 -1
- data/lib/fmcache/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 681a0559134840d7fb2a89c83adb8ccf2ab337d52ba3874da6a98b414ab8c90a
|
4
|
+
data.tar.gz: f4d2e887054ff80d5d72e75e29d8f4c945b6620f6fe35d4453a6a446705203ec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ad936f1afa79d39ae0b94c5eb64db9921e04888d5b84bd3a97e7e18a52a009960ce6601d8917a868eb6549fb867e0f5fee00b502a07870a6e2a965643b59a213
|
7
|
+
data.tar.gz: 8560db62119da8501bc671b900a06dc26fa600cb0cd8f5fc8cb304e0430ba894c14003002dff592b34da0da4d92ced535dc9476cae8b3615e19673896ba9c37a
|
data/Gemfile.lock
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
fmcache (0.1
|
5
|
-
field_mask_parser (~> 0.4.
|
4
|
+
fmcache (0.2.1)
|
5
|
+
field_mask_parser (~> 0.4.3)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
@@ -22,7 +22,7 @@ GEM
|
|
22
22
|
coderay (1.1.2)
|
23
23
|
concurrent-ruby (1.1.3)
|
24
24
|
diff-lcs (1.3)
|
25
|
-
field_mask_parser (0.4.
|
25
|
+
field_mask_parser (0.4.3)
|
26
26
|
i18n (1.2.0)
|
27
27
|
concurrent-ruby (~> 1.0)
|
28
28
|
method_source (0.9.2)
|
data/fmcache.gemspec
CHANGED
@@ -30,5 +30,5 @@ Gem::Specification.new do |spec|
|
|
30
30
|
spec.add_development_dependency "mock_redis", "~> 0.19"
|
31
31
|
spec.add_development_dependency "redis", "~> 4.0"
|
32
32
|
spec.add_development_dependency "activerecord", "~> 5.2"
|
33
|
-
spec.add_dependency "field_mask_parser", "~> 0.4.
|
33
|
+
spec.add_dependency "field_mask_parser", "~> 0.4.3"
|
34
34
|
end
|
data/lib/fmcache/engine.rb
CHANGED
@@ -37,7 +37,12 @@ module FMCache
|
|
37
37
|
keys = Helper.to_keys(ids)
|
38
38
|
fields = Helper.to_fields(field_mask)
|
39
39
|
h = client.get(keys: keys, fields: fields)
|
40
|
-
|
40
|
+
|
41
|
+
with_id, with_no_id = split(h)
|
42
|
+
v, i_v, i_i = decode(@jsonizer.dejsonize(with_id), field_mask)
|
43
|
+
with_no_id_list = Helper.to_ids(with_no_id.keys)
|
44
|
+
|
45
|
+
return v, i_v, merge(i_i, with_no_id_list, field_mask)
|
41
46
|
end
|
42
47
|
|
43
48
|
# @param [<Integer | String>] ids
|
@@ -50,7 +55,7 @@ module FMCache
|
|
50
55
|
normalize!(field_mask)
|
51
56
|
|
52
57
|
values, incomplete_values, incomplete_info = read(ids: ids, field_mask: field_mask)
|
53
|
-
return values if
|
58
|
+
return values if incomplete_info.ids.size == 0
|
54
59
|
|
55
60
|
# NOTE: get new data
|
56
61
|
d = block.call(incomplete_info.ids, incomplete_info.field_mask)
|
@@ -61,13 +66,16 @@ module FMCache
|
|
61
66
|
|
62
67
|
v, i_v, i_i = decode(older.deep_merge(newer), field_mask)
|
63
68
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
+
if i_i.ids.size == 0
|
70
|
+
r = values + v + i_v
|
71
|
+
else
|
72
|
+
# NOTE: Fallback to block.call with full field_mask
|
73
|
+
d2 = block.call(i_i.ids, field_mask)
|
74
|
+
write(values: d2, field_mask: field_mask)
|
75
|
+
r = values + d2
|
76
|
+
end
|
69
77
|
|
70
|
-
Helper.sort(
|
78
|
+
Helper.sort(r, ids)
|
71
79
|
end
|
72
80
|
|
73
81
|
# @param [<Integer | String>] ids
|
@@ -92,18 +100,6 @@ module FMCache
|
|
92
100
|
encoder.encode(values, field_mask)
|
93
101
|
end
|
94
102
|
|
95
|
-
# @param [{ String => { String => <Hash> } }] hash
|
96
|
-
# @param [<Integer>] ids
|
97
|
-
# @return [{ String => { String => <Hash> } }]
|
98
|
-
def merge(hash, ids)
|
99
|
-
# NOTE: Set `id` to list. json format must be consistent with Encoder and Decoder
|
100
|
-
ids.each do |id|
|
101
|
-
h = hash.fetch(Helper.to_key(id))
|
102
|
-
h.merge!({ "id" => [{ id: id, p_id: nil, value: id }] })
|
103
|
-
end
|
104
|
-
hash
|
105
|
-
end
|
106
|
-
|
107
103
|
# @param [Proc] fm_parser
|
108
104
|
# @return [Proc]
|
109
105
|
def wrap(fm_parser)
|
@@ -123,5 +119,35 @@ module FMCache
|
|
123
119
|
normalize!(a)
|
124
120
|
end
|
125
121
|
end
|
122
|
+
|
123
|
+
def split(h)
|
124
|
+
with_id = {}
|
125
|
+
with_no_id = {}
|
126
|
+
|
127
|
+
h.each do |k, v|
|
128
|
+
if v.fetch("id").nil?
|
129
|
+
with_no_id[k] = v
|
130
|
+
else
|
131
|
+
with_id[k] = v
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
return with_id, with_no_id
|
136
|
+
end
|
137
|
+
|
138
|
+
# @param [IncompleteInfo] incomplete_info
|
139
|
+
# @param [<Integer>] with_no_id_list
|
140
|
+
# @param [FieldMaskParser::Node] field_mask
|
141
|
+
# @return [IncompleteInfo]
|
142
|
+
def merge(incomplete_info, with_no_id_list, field_mask)
|
143
|
+
if with_no_id_list.size == 0
|
144
|
+
return incomplete_info
|
145
|
+
end
|
146
|
+
|
147
|
+
ids = incomplete_info.ids + with_no_id_list
|
148
|
+
fields = Set.new(Helper.to_fields(incomplete_info.field_mask)) | Set.new(Helper.to_fields(field_mask))
|
149
|
+
|
150
|
+
IncompleteInfo.new(ids: ids, field_mask: fm_parser.call(fields))
|
151
|
+
end
|
126
152
|
end
|
127
153
|
end
|
data/lib/fmcache/helper.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
module FMCache
|
2
2
|
class Helper
|
3
|
+
KEY_PREFIX = "fmcache:"
|
4
|
+
|
3
5
|
class << self
|
4
6
|
# @param [FieldMaskParser::Node] field_mask
|
5
7
|
# @param [<Symbol>] prefix
|
@@ -17,7 +19,23 @@ module FMCache
|
|
17
19
|
# @param [Integer] id
|
18
20
|
# @return [String]
|
19
21
|
def to_key(id)
|
20
|
-
"
|
22
|
+
"#{KEY_PREFIX}#{id}"
|
23
|
+
end
|
24
|
+
|
25
|
+
# @param [<String>] keys
|
26
|
+
# @return [<Integer>]
|
27
|
+
def to_ids(keys)
|
28
|
+
keys.map { |key| to_id(key) }
|
29
|
+
end
|
30
|
+
|
31
|
+
# @param [String] id
|
32
|
+
# @return [Integer]
|
33
|
+
def to_id(key)
|
34
|
+
if key[0..7] == KEY_PREFIX
|
35
|
+
key[8..-1].to_i
|
36
|
+
else
|
37
|
+
raise "invalid key: #{key}"
|
38
|
+
end
|
21
39
|
end
|
22
40
|
|
23
41
|
# @param [<Hash>] values
|
data/lib/fmcache/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fmcache
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nao Minami
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-12-
|
11
|
+
date: 2018-12-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -114,14 +114,14 @@ dependencies:
|
|
114
114
|
requirements:
|
115
115
|
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: 0.4.
|
117
|
+
version: 0.4.3
|
118
118
|
type: :runtime
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: 0.4.
|
124
|
+
version: 0.4.3
|
125
125
|
description: Library for caching json masked by FieldMask
|
126
126
|
email:
|
127
127
|
- south37777@gmail.com
|