class Geocoder::Cache
def [](url)
Read from the Cache.
#
def [](url) interpret case when store.respond_to?(:[]) store[key_for(url)] when store.respond_to?(:get) store.get key_for(url) when store.respond_to?(:read) store.read key_for(url) end end
def []=(url, value)
Write to the Cache.
#
def []=(url, value) case when store.respond_to?(:[]=) store[key_for(url)] = value when store.respond_to?(:set) store.set key_for(url), value when store.respond_to?(:write) store.write key_for(url), value end end
def expire(url)
or pass :all to clear all URLs.
Delete cache entry for given URL,
#
def expire(url) if url == :all if store.respond_to?(:keys) urls.each{ |u| expire(u) } else raise(NoMethodError, "The Geocoder cache store must implement `#keys` for `expire(:all)` to work") end else expire_single_url(url) end end
def expire_single_url(url)
def expire_single_url(url) key = key_for(url) store.respond_to?(:del) ? store.del(key) : store.delete(key) end
def initialize(store, prefix)
def initialize(store, prefix) @store = store @prefix = prefix end
def interpret(value)
(Some key/value stores return empty string instead of nil.)
Clean up value before returning. Namely, convert empty string to nil.
#
def interpret(value) value == "" ? nil : value end
def key_for(url)
Cache key for a given URL.
#
def key_for(url) [prefix, url].join end
def keys
that have non-nil values.
Array of keys with the currently configured prefix
#
def keys store.keys.select{ |k| k.match(/^#{prefix}/) and self[k] } end
def prefix; @prefix; end
def prefix; @prefix; end
def store; @store; end
def store; @store; end
def urls
Array of cached URLs.
#
def urls keys.map{ |k| k[/^#{prefix}(.*)/, 1] } end