Class: Fino::Pipe::Cache

Inherits:
Object
  • Object
show all
Includes:
Fino::Pipe
Defined in:
lib/fino/pipe/cache.rb

Instance Method Summary collapse

Constructor Details

#initialize(pipe, cache) ⇒ Cache

Returns a new instance of Cache.



6
7
8
9
# File 'lib/fino/pipe/cache.rb', line 6

def initialize(pipe, cache)
  super(pipe)
  @cache = cache
end

Instance Method Details

#read(setting_definition) ⇒ Object



11
12
13
14
15
16
17
# File 'lib/fino/pipe/cache.rb', line 11

def read(setting_definition)
  return cache.read(setting_definition.key) if cache.exist?(setting_definition.key)

  pipe.read(setting_definition).tap do |result|
    cache.write(setting_definition.key, result)
  end
end

#read_multi(setting_definitions) ⇒ Object



19
20
21
22
23
24
25
# File 'lib/fino/pipe/cache.rb', line 19

def read_multi(setting_definitions)
  cache.fetch_multi(*setting_definitions.map(&:key)) do |missing_keys|
    uncached_setting_definitions = setting_definitions.filter { |sd| missing_keys.include?(sd.key) }

    missing_keys.zip(pipe.read_multi(uncached_setting_definitions))
  end
end

#write(setting_definition, value, overrides, variants) ⇒ Object



27
28
29
30
31
# File 'lib/fino/pipe/cache.rb', line 27

def write(setting_definition, value, overrides, variants)
  pipe.write(setting_definition, value, overrides, variants)

  cache.delete(setting_definition.key)
end