Sha256: 2f26d58bc5c1323d250ece85606401540339bed0ba12a586c98dca963920b361

Contents?: true

Size: 858 Bytes

Versions: 10

Compression:

Stored size: 858 Bytes

Contents

module Scrivito

class Cache
  attr_reader :cache_prefix, :fallback_backend

  def initialize(options = {})
    @fallback_backend, @cache_prefix = options[:fallback_backend], options[:cache_prefix]
    @cache = {}
  end

  def read(key)
    value = @cache[key]
    if !value && @fallback_backend
      value = @fallback_backend.read(cache_key_for_fallback_backend(key))
      @cache[key] = value
    end
    value
  end

  def write(key, value, options={})
    @fallback_backend.write(cache_key_for_fallback_backend(key), value, options) if @fallback_backend
    @cache[key] = value
  end

  def fetch(key, &block)
    read(key) || block.call.tap { |value| write(key, value) }
  end

  def clear
    @cache = {}
  end

  private

  def cache_key_for_fallback_backend(key)
    @cache_prefix ? "#{@cache_prefix}/#{key}" : key
  end
end

end # module Scrivito

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
scrivito_sdk-0.30.0 lib/scrivito/cache.rb
scrivito_sdk-0.30.0.rc1 lib/scrivito/cache.rb
scrivito_sdk-0.18.1 lib/scrivito/cache.rb
scrivito_sdk-0.18.0 lib/scrivito/cache.rb
scrivito_sdk-0.17.0 lib/scrivito/cache.rb
scrivito_sdk-0.16.0 lib/scrivito/cache.rb
scrivito_sdk-0.15.0 lib/scrivito/cache.rb
scrivito_sdk-0.14.0 lib/scrivito/cache.rb
scrivito_sdk-0.13.0 lib/scrivito/cache.rb
scrivito_sdk-0.12.0 lib/scrivito/cache.rb