Class: HasHelpers::Cards::Cache

Inherits:
Object
  • Object
show all
Defined in:
lib/has_helpers/cards/cache.rb

Constant Summary collapse

DEFAULT_NAMESPACE =
"hh:cards:v1"

Instance Method Summary collapse

Constructor Details

#initialize(redis:, namespace: DEFAULT_NAMESPACE) ⇒ Cache

Returns a new instance of Cache.



10
11
12
13
# File 'lib/has_helpers/cards/cache.rb', line 10

def initialize(redis:, namespace: DEFAULT_NAMESPACE)
  @redis = redis
  @namespace = namespace
end

Instance Method Details

#fetch(key, ttl:, stale_grace:, force: false) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/has_helpers/cards/cache.rb', line 15

def fetch(key, ttl:, stale_grace:, force: false)
  fresh = redis.get(cache_key(key)) unless force
  return JSON.parse(fresh) if fresh.present?

  value = yield
  encoded = JSON.dump(value)
  redis.set(cache_key(key), encoded, ex: ttl.to_i)
  redis.set(stale_key(key), encoded, ex: ttl.to_i + stale_grace.to_i)
  value
rescue StandardError => e
  stale = redis.get(stale_key(key))
  raise if stale.blank?

  logger&.warn("HasHelpers::Cards::Cache returning stale value for #{key}: #{e.class}: #{e.message}")
  JSON.parse(stale)
end