Class: HasHelpers::Cards::Cache
- Inherits:
-
Object
- Object
- HasHelpers::Cards::Cache
- Defined in:
- lib/has_helpers/cards/cache.rb
Constant Summary collapse
- DEFAULT_NAMESPACE =
"hh:cards:v1"
Instance Method Summary collapse
- #fetch(key, ttl:, stale_grace:, force: false) ⇒ Object
-
#initialize(redis:, namespace: DEFAULT_NAMESPACE) ⇒ Cache
constructor
A new instance of Cache.
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.}") JSON.parse(stale) end |