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