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