Sha256: 7bcb50a36162c886adc1933158e9ccf68e19fe06cfb292f429a77e4bb7fcc933
Contents?: true
Size: 1.6 KB
Versions: 22
Compression:
Stored size: 1.6 KB
Contents
module ActiveFedora class CachingConnection < Ldp::Client def initialize(host) super @cache = {} @cache_enabled = false end def get(url, options = {}) if @cache_enabled cache_resource(url) { super } else super end end def post(*) clear_cache if @cache_enabled super end def put(*) clear_cache if @cache_enabled super end def patch(*) clear_cache if @cache_enabled super end # Enable the cache within the block. def cache old, @cache_enabled = @cache_enabled, true yield ensure @cache_enabled = old clear_cache unless @cache_enabled end def enable_cache! @cache_enabled = true end def disable_cache! @cache_enabled = false end # Disable the query cache within the block. def uncached old, @cache_enabled = @cache_enabled, false yield ensure @cache_enabled = old end def clear_cache @cache.clear end private def log(url) ActiveSupport::Notifications.instrument("ldp.active_fedora", id: url, name: "Load LDP", ldp_service: object_id) { yield } end def cache_resource(url, &block) result = if @cache.key?(url) ActiveSupport::Notifications.instrument("ldp.active_fedora", id: url, name: "CACHE", ldp_service: object_id) @cache[url] else @cache[url] = log(url) { yield } end result.dup end end end
Version data entries
22 entries across 22 versions & 1 rubygems