module ActiveSupport::Cache::Strategy::LocalCache
def bypass_local_cache
def bypass_local_cache use_temporary_local_cache(nil) { yield } end
def cleanup(options = nil) # :nodoc:
def cleanup(options = nil) # :nodoc: return super unless cache = local_cache cache.clear(options) super end
def clear(options = nil) # :nodoc:
def clear(options = nil) # :nodoc: return super unless cache = local_cache cache.clear(options) super end
def decrement(name, amount = 1, options = nil) # :nodoc:
def decrement(name, amount = 1, options = nil) # :nodoc: return super unless local_cache value = bypass_local_cache{super} write_cache_value(name, value, options) value end
def delete_entry(key, options) # :nodoc:
def delete_entry(key, options) # :nodoc: local_cache.delete_entry(key, options) if local_cache super end
def increment(name, amount = 1, options = nil) # :nodoc:
def increment(name, amount = 1, options = nil) # :nodoc: return super unless local_cache value = bypass_local_cache{super} write_cache_value(name, value, options) value end
def local_cache
def local_cache LocalCacheRegistry.cache_for(local_cache_key) end
def local_cache_key
def local_cache_key @local_cache_key ||= "#{self.class.name.underscore}_local_cache_#{object_id}".gsub(/[\/-]/, '_').to_sym end
def middleware
Middleware class can be inserted as a Rack handler to be local cache for the
def middleware @middleware ||= Middleware.new( "ActiveSupport::Cache::Strategy::LocalCache", local_cache_key) end
def read_entry(key, options) # :nodoc:
def read_entry(key, options) # :nodoc: if cache = local_cache cache.fetch_entry(key) { super } else super end end
def set_cache_value(value, name, amount, options) # :nodoc:
def set_cache_value(value, name, amount, options) # :nodoc: ActiveSupport::Deprecation.warn(<<-MESSAGE.strip_heredoc) `set_cache_value` is deprecated and will be removed from Rails 5.1. Please use `write_cache_value` instead. MESSAGE write_cache_value name, value, options end
def use_temporary_local_cache(temporary_cache)
def use_temporary_local_cache(temporary_cache) save_cache = LocalCacheRegistry.cache_for(local_cache_key) begin LocalCacheRegistry.set_cache_for(local_cache_key, temporary_cache) yield ensure LocalCacheRegistry.set_cache_for(local_cache_key, save_cache) end end
def with_local_cache
def with_local_cache use_temporary_local_cache(LocalStore.new) { yield } end
def write_cache_value(name, value, options) # :nodoc:
def write_cache_value(name, value, options) # :nodoc: name = normalize_key(name, options) cache = local_cache cache.mute do if value cache.write(name, value, options) else cache.delete(name, options) end end end
def write_entry(key, entry, options) # :nodoc:
def write_entry(key, entry, options) # :nodoc: local_cache.write_entry(key, entry, options) if local_cache super end