class Geocoder::Cache

def [](url)


Read from the Cache.
#
def [](url)
  interpret store[key_for(url)]
end

def []=(url, value)


Write to the Cache.
#
def []=(url, value)
  store[key_for(url)] = value
end

def expire(url)


or pass :all to expire everything.
Expire cache entry for given URL,
#
def expire(url)
  if url == :all
    urls.each{ |u| expire(u) }
  else
    self[url] = nil
  end
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 interpret(store[k]) }
end

def urls


Array of cached URLs.
#
def urls
  keys.map{ |k| k[/^#{prefix}(.*)/, 1] }
end