Class: FMCache::Engine
- Inherits:
-
Object
- Object
- FMCache::Engine
- Defined in:
- lib/fmcache/engine.rb
Constant Summary collapse
- DEFAULT_TTL =
7 days
7 * 24 * 3600
Instance Attribute Summary collapse
-
#client ⇒ Object
readonly
Returns the value of attribute client.
-
#decoder ⇒ Object
readonly
Returns the value of attribute decoder.
-
#encoder ⇒ Object
readonly
Returns the value of attribute encoder.
-
#fm_parser ⇒ Object
readonly
Returns the value of attribute fm_parser.
Instance Method Summary collapse
- #delete(ids:) ⇒ Object
- #fetch(ids:, field_mask:) {|ids,| ... } ⇒ <Hash>
-
#initialize(client:, fm_parser:, ttl: DEFAULT_TTL, notifier: nil, json_serializer: nil) ⇒ Engine
constructor
A new instance of Engine.
- #read(ids:, field_mask:) ⇒ <Hash>, IncompleteInfo
- #write(values:, field_mask:) ⇒ Boolean
Constructor Details
#initialize(client:, fm_parser:, ttl: DEFAULT_TTL, notifier: nil, json_serializer: nil) ⇒ Engine
6 7 8 9 10 11 12 13 |
# File 'lib/fmcache/engine.rb', line 6 def initialize(client:, fm_parser:, ttl: DEFAULT_TTL, notifier: nil, json_serializer: nil) @client = Client.new(client, notifier) @fm_parser = wrap(fm_parser) @ttl = ttl @encoder = Encoder.new @decoder = Decoder.new(@fm_parser) @jsonizer = Jsonizer.new(json_serializer) end |
Instance Attribute Details
#client ⇒ Object (readonly)
Returns the value of attribute client.
15 16 17 |
# File 'lib/fmcache/engine.rb', line 15 def client @client end |
#decoder ⇒ Object (readonly)
Returns the value of attribute decoder.
15 16 17 |
# File 'lib/fmcache/engine.rb', line 15 def decoder @decoder end |
#encoder ⇒ Object (readonly)
Returns the value of attribute encoder.
15 16 17 |
# File 'lib/fmcache/engine.rb', line 15 def encoder @encoder end |
#fm_parser ⇒ Object (readonly)
Returns the value of attribute fm_parser.
15 16 17 |
# File 'lib/fmcache/engine.rb', line 15 def fm_parser @fm_parser end |
Instance Method Details
#delete(ids:) ⇒ Object
69 70 71 72 |
# File 'lib/fmcache/engine.rb', line 69 def delete(ids:) ids = ids.map(&:to_i) client.del(keys: Helper.to_keys(ids)) end |
#fetch(ids:, field_mask:) {|ids,| ... } ⇒ <Hash>
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/fmcache/engine.rb', line 44 def fetch(ids:, field_mask:, &block) ids = ids.map(&:to_i) normalize!(field_mask) values, incomplete_values, incomplete_info = read(ids: ids, field_mask: field_mask) return values if incomplete_values.size == 0 # NOTE: get new data d = block.call(incomplete_info.ids, incomplete_info.field_mask) write(values: d, field_mask: incomplete_info.field_mask) older = encode(incomplete_values, field_mask) newer = encode(d, incomplete_info.field_mask) v, i_v, i_i = decode(older.deep_merge(newer), field_mask) # NOTE: Delete invalid data as read repair client.hdel( keys: Helper.to_keys(i_i.ids), fields: Helper.to_fields(i_i.field_mask), ) Helper.sort(values + v + i_v, ids) end |
#read(ids:, field_mask:) ⇒ <Hash>, IncompleteInfo
29 30 31 32 33 34 35 36 37 |
# File 'lib/fmcache/engine.rb', line 29 def read(ids:, field_mask:) ids = ids.map(&:to_i) normalize!(field_mask) keys = Helper.to_keys(ids) fields = Helper.to_fields(field_mask).map(&:to_s) h = client.get(keys: keys, fields: fields) decode(merge(@jsonizer.dejsonize(h), ids), field_mask) end |
#write(values:, field_mask:) ⇒ Boolean
20 21 22 23 24 |
# File 'lib/fmcache/engine.rb', line 20 def write(values:, field_mask:) normalize!(field_mask) h = encode(values, field_mask) client.set(values: @jsonizer.jsonize(h), ttl: @ttl) end |