Sha256: c1ec5fa59215f38eec2e203091d04f7c9313ee96b3638fd96dc2ebe54b2d303d
Contents?: true
Size: 1.17 KB
Versions: 2
Compression:
Stored size: 1.17 KB
Contents
require 'rufus-scheduler' require 'pp' class Cache attr_accessor :expiry_time, :refresh, :store, :max_size def initialize ENV['TZ'] = 'UTC' @scheduler = Rufus::Scheduler.new @time_tracker = Hash.new end def create_store @cache = Hash.new end def put(key, value) # removed oldest entry if max_size is approached if max_size != nil if @cache.size >= max_size key, value = @time_tracker.values.sort {|v| Time.now - v }.reverse.first invalidate(key) @time_tracker.delete(key) end @time_tracker[key] = Time.now end @cache[key] = value @scheduler.in expiry_time, :blocking => true do invalidate key end end def get(key) check_refresh(key) return @cache[key] end def exists?(key) return @cache.key?(key) end def check_refresh(key) if @cache[key] == nil && !has_refresh? val = refresh.call(key) put(key, val) return val end end def has_refresh? return refresh == nil end def invalidate(key) @cache.delete key end def invalidateAll @cache.clear end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
libcache-0.2.1 | lib/libcache/cache.rb |
libcache-0.2.0 | lib/libcache/cache.rb |