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

Version Path
active-fedora-9.0.8 lib/active_fedora/caching_connection.rb
active-fedora-9.5.0 lib/active_fedora/caching_connection.rb
active-fedora-9.4.3 lib/active_fedora/caching_connection.rb
active-fedora-9.4.2 lib/active_fedora/caching_connection.rb
active-fedora-9.4.1 lib/active_fedora/caching_connection.rb
active-fedora-9.4.0 lib/active_fedora/caching_connection.rb
active-fedora-9.3.0 lib/active_fedora/caching_connection.rb
active-fedora-9.2.1 lib/active_fedora/caching_connection.rb
active-fedora-9.2.0 lib/active_fedora/caching_connection.rb
active-fedora-9.2.0.rc2 lib/active_fedora/caching_connection.rb
active-fedora-9.2.0.rc1 lib/active_fedora/caching_connection.rb
active-fedora-9.1.2 lib/active_fedora/caching_connection.rb
active-fedora-9.1.1 lib/active_fedora/caching_connection.rb
active-fedora-9.1.0 lib/active_fedora/caching_connection.rb
active-fedora-9.1.0.rc1 lib/active_fedora/caching_connection.rb
active-fedora-9.0.6 lib/active_fedora/caching_connection.rb
active-fedora-9.0.5 lib/active_fedora/caching_connection.rb
active-fedora-9.0.4 lib/active_fedora/caching_connection.rb
active-fedora-9.0.3 lib/active_fedora/caching_connection.rb
active-fedora-9.0.2 lib/active_fedora/caching_connection.rb