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