Sha256: efa8305833aa06063556edd57149fd6c9e2735f85b020e38f914ba22c7279028

Contents?: true

Size: 1.67 KB

Versions: 26

Compression:

Stored size: 1.67 KB

Contents

module ActiveFedora
  class CachingConnection < Ldp::Client
    def initialize(host, options = {})
      super
      @cache = {}
      @cache_enabled = false
    end

    def get(url, options = {})
      if @cache_enabled
        cache_resource(url) { super }
      else
        log(url) { 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

26 entries across 26 versions & 1 rubygems

Version Path
active-fedora-15.0.1 lib/active_fedora/caching_connection.rb
active-fedora-15.0.0 lib/active_fedora/caching_connection.rb
active-fedora-14.0.1 lib/active_fedora/caching_connection.rb
active-fedora-14.0.0 lib/active_fedora/caching_connection.rb
active-fedora-13.3.0 lib/active_fedora/caching_connection.rb
active-fedora-12.2.4 lib/active_fedora/caching_connection.rb
active-fedora-13.2.7 lib/active_fedora/caching_connection.rb
active-fedora-13.2.5 lib/active_fedora/caching_connection.rb
active-fedora-13.2.4 lib/active_fedora/caching_connection.rb
active-fedora-12.2.3 lib/active_fedora/caching_connection.rb
active-fedora-13.2.3 lib/active_fedora/caching_connection.rb
active-fedora-13.2.2 lib/active_fedora/caching_connection.rb
active-fedora-13.2.0 lib/active_fedora/caching_connection.rb
active-fedora-13.1.3 lib/active_fedora/caching_connection.rb
active-fedora-12.2.2 lib/active_fedora/caching_connection.rb
active-fedora-12.2.1 lib/active_fedora/caching_connection.rb
active-fedora-12.0.3 lib/active_fedora/caching_connection.rb
active-fedora-13.1.2 lib/active_fedora/caching_connection.rb
active-fedora-13.1.1 lib/active_fedora/caching_connection.rb
active-fedora-13.1.0 lib/active_fedora/caching_connection.rb