class Condenser::Cache::MemoryStore

Public: Basic in memory LRU cache.

Assign the instance to the Environment#cache.

environment.cache = Sprockets::Cache::MemoryStore.new(1000)

See Also

ActiveSupport::Cache::MemoryStore

Constants

DEFAULT_MAX_SIZE

Internal: Default key limit for store.

PER_ENTRY_OVERHEAD

Public Class Methods

new(options = {}) click to toggle source
# File lib/condenser/cache/memory_store.rb, line 18
def initialize(options = {})
  @max_size = options[:size] || DEFAULT_MAX_SIZE
  @cache = {}
  @key_access = {}
  @cache_size = 0
end

Public Instance Methods

cached_size(key, value) click to toggle source
# File lib/condenser/cache/memory_store.rb, line 37
def cached_size(key, value)
  key.to_s.bytesize + value.bytesize + PER_ENTRY_OVERHEAD
end
clear() click to toggle source
# File lib/condenser/cache/memory_store.rb, line 25
def clear
  @cache.clear
  @key_access.clear
  @cache_size = 0
end
get(key) click to toggle source
# File lib/condenser/cache/memory_store.rb, line 31
def get(key)
  value = @cache[key]
  @key_access[key] = Time.now.to_f if value
  value
end
inspect() click to toggle source

Public: Pretty inspect

Returns String.

# File lib/condenser/cache/memory_store.rb, line 64
def inspect
  "#<#{self.class} size=#{@cache_size}/#{@max_size}>"
end
prune() click to toggle source
# File lib/condenser/cache/memory_store.rb, line 53
def prune
  keys = @key_access.keys.sort { |a, b| @key_access[a].to_f <=> @key_access[b].to_f }
  keys.each do |key|
    delete(key)
    return if @cache_size <= @max_size
  end
end
set(key, value) click to toggle source
# File lib/condenser/cache/memory_store.rb, line 41
def set(key, value)
  if old_value = @cache[key]
    @cache_size -= (old_value.bytesize - value.bytesize)
  else
    @cache_size += cached_size(key, value)
  end
  @cache[key] = value
  @key_access[key] = Time.now.to_f
  prune if @cache_size > @max_size
  value
end