class Rack::AcornCache::CacheController

Attributes

app[R]
request[R]

Public Class Methods

new(request, app) click to toggle source
# File lib/acorn_cache/cache_controller.rb, line 3
def initialize(request, app)
  @request = request
  @app = app
end

Public Instance Methods

response() click to toggle source
# File lib/acorn_cache/cache_controller.rb, line 8
def response
  if request.no_cache?
    server_response = get_response_from_server
  else
    cached_response = check_for_cached_response

    if cached_response.must_be_revalidated?
      request.update_conditional_headers!(cached_response)
      server_response = get_response_from_server
    elsif !cached_response.fresh_for_request?(request)
      server_response = get_response_from_server
    end
  end

  CacheMaintenance
    .new(request.cache_key, server_response, cached_response)
    .update_cache
    .response
end

Private Instance Methods

check_for_cached_response() click to toggle source
# File lib/acorn_cache/cache_controller.rb, line 48
def check_for_cached_response
  CacheReader.read(request.cache_key) || NullCachedResponse.new
end
get_response_from_server() click to toggle source
# File lib/acorn_cache/cache_controller.rb, line 32
def get_response_from_server
  begin
    status, headers, body = @app.call(request.env)
  rescue => e
    raise AppException.new(e)
  end

  server_response = ServerResponse.new(status, headers, body)

  if request.page_rule?
    server_response.update_with_page_rules!(request.page_rule)
  else
    server_response
  end
end