class Rack::AcornCache::ServerResponse

Constants

CACHEABLE_STATUS_CODES

Attributes

body[R]
cache_control_header[R]
headers[R]
status[R]

Public Class Methods

new(status, headers, body) click to toggle source
# File lib/acorn_cache/server_response.rb, line 9
def initialize(status, headers, body)
  @status = status
  @headers = headers
  @body = body
  @cache_control_header = CacheControlHeader.new(headers["Cache-Control"])
end

Public Instance Methods

body_string() click to toggle source
# File lib/acorn_cache/server_response.rb, line 37
def body_string
  result = ""
  body.each { |part| result << part }
  result
end
cache!(cache_key) click to toggle source
# File lib/acorn_cache/server_response.rb, line 47
def cache!(cache_key)
  update_date!
  headers.delete("Set-Cookie")
  CacheWriter.write(cache_key, serialize)
  self
end
cacheable?() click to toggle source
# File lib/acorn_cache/server_response.rb, line 20
def cacheable?
  [:private?, :no_store?].none? { |directive| send(directive) } &&
    CACHEABLE_STATUS_CODES.include?(status)
end
etag_header() click to toggle source
# File lib/acorn_cache/server_response.rb, line 29
def etag_header
  headers["ETag"]
end
method_missing(method, *args) click to toggle source
# File lib/acorn_cache/server_response.rb, line 84
def method_missing(method, *args)
  cache_control_header.send(method, *args)
end
serialize() click to toggle source
# File lib/acorn_cache/server_response.rb, line 33
def serialize
  { status: status, headers: headers, body: body_string }.to_json
end
status_304?() click to toggle source
# File lib/acorn_cache/server_response.rb, line 25
def status_304?
  status == 304
end
to_a() click to toggle source
# File lib/acorn_cache/server_response.rb, line 43
def to_a
  [status, headers, body]
end
update_date!() click to toggle source
# File lib/acorn_cache/server_response.rb, line 16
def update_date!
  @headers["Date"] = Time.now.httpdate unless @headers["Date"]
end
update_with_page_rules!(page_rule) click to toggle source
# File lib/acorn_cache/server_response.rb, line 54
def update_with_page_rules!(page_rule)
  if page_rule[:must_revalidate]
    self.no_cache = true
    self.must_revalidate = true
    self.private = nil
    self.max_age = nil
    self.s_maxage = nil
    self.no_store = nil
  end

  if page_rule[:acorn_cache_ttl] || page_rule[:browser_cache_ttl]
    self.no_cache = nil
    self.no_store = nil
    self.must_revalidate = nil
  end

  if page_rule[:acorn_cache_ttl]
    self.max_age = nil
    self.s_maxage = page_rule[:acorn_cache_ttl]
    self.private = nil
  end

  if page_rule[:browser_cache_ttl]
    self.max_age = page_rule[:browser_cache_ttl]
  end

  headers["Cache-Control"] = cache_control_header.to_s
  self
end