class YAMLCache

Public Class Methods

new(path) click to toggle source
# File lib/yaml_cache.rb, line 4
def initialize(path)
  @path = path
  @store = load_store
end

Public Instance Methods

cache(key, expiration, &block) click to toggle source
# File lib/yaml_cache.rb, line 18
def cache(key, expiration, &block)
  value = nil
  if @store.has_key?(key)
    if @store[key][:expiration] == nil ||
        (@store[key][:expiration] - Time.now.to_i) <= 0
      value = block.call
      store(key, value, expiration)
    else
      value = @store[key][:value]
    end
  else
    value = block.call
    store(key, value, expiration)
  end

  File.write(@path, @store.to_yaml)

  return value
end
read(key) click to toggle source
# File lib/yaml_cache.rb, line 14
def read(key)
  @store[key][:value]
end
write(key, value=nil, &block) click to toggle source
# File lib/yaml_cache.rb, line 9
def write(key, value=nil, &block)
  store(key, block ? block.call : value)
  File.write(@path, @store.to_yaml)
end

Private Instance Methods

load_store() click to toggle source
# File lib/yaml_cache.rb, line 39
def load_store
  if File.exist?(@path)
    YAML.load(File.read(@path))
  else
    {}
  end
end
store(key, value, expiration=nil) click to toggle source
# File lib/yaml_cache.rb, line 47
def store(key, value, expiration=nil)
  @store[key] = {
    value: value,
    expiration: expiration ? (Time.now.to_i + expiration) : nil
  }
end