class Heroku::Conn::Cache

Constants

CachePair

Public Class Methods

new() click to toggle source
# File lib/heroku/conn/cache.rb, line 6
def initialize()
  @response_cache = {}
  @etag_pointers  = {}
end

Public Instance Methods

fetch(r_type, etag) click to toggle source
# File lib/heroku/conn/cache.rb, line 26
def fetch(r_type, etag)
  Heroku::Properties.logger.info("[#{r_type} Cache] Fetching #{etag}")
  pair(r_type).etag[etag]
end
put(r_type, new_etag, json) click to toggle source
# File lib/heroku/conn/cache.rb, line 11
def put(r_type, new_etag, json)
  pair        = pair(r_type)
  key         = key(json)
  old_etag, _ = pair.response[key]
  record      = [new_etag, json]

  Heroku::Properties.logger.debug("[#{r_type} Cache] Caching #{key}    #{new_etag}")
  Heroku::Properties.logger.debug("[#{r_type} Cache] Dissociating tag: #{old_etag}")

  pair.etag.delete(old_etag)
  pair.response[key]  = record
  pair.etag[new_etag] = record
  record
end

Private Instance Methods

key(json_response) click to toggle source
# File lib/heroku/conn/cache.rb, line 40
def key(json_response)
  case json_response
  when Array then "list"
  when Hash  then json_response['id']
  else            nil
  end
end
pair(r_type) click to toggle source
# File lib/heroku/conn/cache.rb, line 33
def pair(r_type)
  CachePair[
    @response_cache[r_type] ||= {},
    @etag_pointers[r_type]  ||= {}
  ]
end