class Coin::Vault
Public Class Methods
new()
click to toggle source
Calls superclass method
# File lib/coin/vault.rb, line 61 def initialize super @dict = {} start_sweeper self end
Public Instance Methods
clear()
click to toggle source
# File lib/coin/vault.rb, line 51 def clear synchronize { @dict = {} } end
delete(key)
click to toggle source
# File lib/coin/vault.rb, line 27 def delete(key) synchronize { @dict.delete(key) } end
ok?()
click to toggle source
# File lib/coin/vault.rb, line 55 def ok? true end
read(key)
click to toggle source
# File lib/coin/vault.rb, line 13 def read(key) value = @dict[key] value = nil if value && value_expired?(value) return value[:value] if value nil end
read_and_delete(key)
click to toggle source
# File lib/coin/vault.rb, line 31 def read_and_delete(key) value = nil synchronize do value = read(key) @dict.delete(key) end value end
read_and_write(key, lifetime=300) { |orig_value| ... }
click to toggle source
# File lib/coin/vault.rb, line 40 def read_and_write(key, lifetime=300) orig_value = nil value = nil synchronize do orig_value = read(key) value = yield(orig_value) write key, value, lifetime end [orig_value, value] end
write(key, value, lifetime=300)
click to toggle source
# File lib/coin/vault.rb, line 20 def write(key, value, lifetime=300) synchronize do @dict[key] = { :value => value, :cached_at => Time.now, :lifetime => lifetime } end value end
Protected Instance Methods
start_sweeper()
click to toggle source
# File lib/coin/vault.rb, line 68 def start_sweeper Thread.new do loop do sleep 60 sweep end end end
sweep()
click to toggle source
# File lib/coin/vault.rb, line 77 def sweep now = Time.now @dict.each do |key, value| delete(key) if value_expired?(value) end end
value_expired?(value)
click to toggle source
# File lib/coin/vault.rb, line 84 def value_expired?(value) Time.now - value[:cached_at] > value[:lifetime] end