module Garner::Cache
Public Class Methods
compound_key(bindings, key_hash)
click to toggle source
# File lib/garner/cache.rb, line 23 def self.compound_key(bindings, key_hash) binding_keys = bindings.map { |binding| key_for(binding) }.compact if binding_keys.size == bindings.size # All bindings have non-nil cache keys, proceed. { binding_keys: binding_keys, context_keys: key_hash } else # A nil cache key was generated. Skip caching. # TODO: Replace this ill-documented "nil to skip" behavior # with exceptions on inability to generate a cache key. nil end end
fetch(bindings, key_hash, options_hash) { || ... }
click to toggle source
Fetch a result from cache.
@param bindings [Array] Objects to which the the cache result should be
bound. These objects' keys are injected into the compound cache key.
@param key_hash [Hash] Hash to comprise the compound cache key. @param options_hash [Hash] Options to be passed to Garner.config
.cache.
# File lib/garner/cache.rb, line 11 def self.fetch(bindings, key_hash, options_hash, &_block) if (compound_key = compound_key(bindings, key_hash)) result = Garner.config.cache.fetch(compound_key, options_hash) do yield end Garner.config.cache.delete(compound_key, options_hash) unless result else result = yield end result end
key_for(binding)
click to toggle source
# File lib/garner/cache.rb, line 39 def self.key_for(binding) if binding.nil? return nil unless Garner.config.whiny_nils? fail NilBinding else binding.garner_cache_key end end