Class: Rack::Cache::Response

### Home Classes Methods

### In Files

- lib/rack/cache/response.rb

### Parent

Object

### Methods

- ::new
- #age
- #cache_control
- #cache_control=
- #cacheable?
- #client_ttl=
- #date
- #etag
- #expire!
- #expires
- #fresh?
- #initialize_copy
- #last_modified
- #max_age
- #max_age=
- #must_revalidate?
- #not_modified!
- #private=
- #shared_max_age=
- #to_a
- #ttl
- #ttl=
- #validateable?
- #vary
- #vary?
- #vary_header_names

### Included Modules

- Rack::Response::Helpers

### Files

- CHANGES
- COPYING
- README
- TODO

### Class/Module Index

Quicksearch

- Rack
- Rack::Cache
- Rack::Cache::AppEngine
- Rack::Cache::AppEngine::MC
- Rack::Cache::AppEngine::MemCache
- Rack::Cache::CacheControl
- Rack::Cache::Context
- Rack::Cache::EntityStore
- Rack::Cache::EntityStore::DISK
- Rack::Cache::EntityStore::Dalli
- Rack::Cache::EntityStore::Disk
- Rack::Cache::EntityStore::FILE
- Rack::Cache::EntityStore::GAE
- Rack::Cache::EntityStore::GAECACHE
- Rack::Cache::EntityStore::GAEStore
- Rack::Cache::EntityStore::HEAP
- Rack::Cache::EntityStore::Heap
- Rack::Cache::EntityStore::MEM
- Rack::Cache::EntityStore::MemCacheBase
- Rack::Cache::EntityStore::MemCached
- Rack::Cache::Key
- Rack::Cache::MetaStore
- Rack::Cache::MetaStore::DISK
- Rack::Cache::MetaStore::Dalli
- Rack::Cache::MetaStore::Disk
- Rack::Cache::MetaStore::FILE
- Rack::Cache::MetaStore::GAE
- Rack::Cache::MetaStore::GAECACHE
- Rack::Cache::MetaStore::GAEStore
- Rack::Cache::MetaStore::HEAP
- Rack::Cache::MetaStore::Heap
- Rack::Cache::MetaStore::MEM
- Rack::Cache::MetaStore::MemCacheBase
- Rack::Cache::MetaStore::MemCached
- Rack::Cache::Options
- Rack::Cache::Request
- Rack::Cache::Response
- Rack::Cache::Storage

No matching classes.

# Rack::Cache::Response

Provides access to the response generated by the downstream application. The `response`, `original_response`, and `entry` objects exposed by the Core caching engine are instances of this class.

Response objects respond to a variety of convenience methods, including those defined in Rack::Response::Helpers, Rack::Cache::Headers, and Rack::Cache::ResponseHeaders.

Note that Rack::Cache::Response is not a subclass of Rack::Response and does not perform many of the same initialization and finalization tasks. For example, the body is not slurped during initialization and there are no facilities for generating response output.

### Constants

CACHEABLE_RESPONSE_CODES

  Status codes of responses that MAY be stored by a cache or used in reply to a subsequent request.

  tools.ietf.org/html/rfc2616#section-13.4

NOT_MODIFIED_OMIT_HEADERS

  Headers that MUST NOT be included with 304 Not Modified responses.

  tools.ietf.org/html/rfc2616#section-10.3.5

### Attributes

body[RW]

Rack response tuple accessors.

headers[RW]

Rack response tuple accessors.

now[R]

The time when the Response object was instantiated.

status[RW]

Rack response tuple accessors.

### Public Class Methods

new(status, headers, body) click to toggle source

Create a Response instance given the response status code, header hash, and body.

    # File lib/rack/cache/response.rb, line 32
    def initialize(status, headers, body)
      @status = status.to_i
      @headers = Rack::Utils::HeaderHash.new(headers)
      @body = body
      @now = Time.now
      @headers['Date'] ||= @now.httpdate
    end

### Public Instance Methods

age() click to toggle source

The age of the response.

    # File lib/rack/cache/response.rb, line 148
    def age
      (headers['Age'] ||  [(now - date).to_i, 0].max).to_i
    end

cache_control() click to toggle source

A Hash of name=value pairs that correspond to the Cache-Control header. Valueless parameters (e.g., must-revalidate, no-store) have a Hash value of true. This method always returns a Hash, empty if no Cache-Control header is present.

    # File lib/rack/cache/response.rb, line 68
    def cache_control
      @cache_control ||= CacheControl.new(headers['Cache-Control'])
    end

cache_control=(value) click to toggle source

Set the Cache-Control header to the values specified by the Hash. See the cache_control method for information on expected Hash structure.

    # File lib/rack/cache/response.rb, line 74
    def cache_control=(value)
      if value.respond_to? :to_hash
        cache_control.clear
        cache_control.merge!(value)
        value = cache_control.to_s
      end

      if value.nil? || value.empty?
        headers.delete('Cache-Control')
      else
        headers['Cache-Control'] = value
      end
    end

cacheable?() click to toggle source

Determine if the response is worth caching under any circumstance. Responses marked "private" with an explicit Cache-Control directive are considered uncacheable

Responses with neither a freshness lifetime (Expires, max-age) nor cache validator (Last-Modified, ETag) are considered uncacheable.

    # File lib/rack/cache/response.rb, line 102
    def cacheable?
      return false unless CACHEABLE_RESPONSE_CODES.include?(status)
      return false if cache_control.no_store? || cache_control.private?
      validateable? || fresh?
    end

client_ttl=(seconds) click to toggle source

Set the response's time-to-live for private/client caches. This adjusts the Cache-Control/max-age directive.

    # File lib/rack/cache/response.rb, line 196
    def client_ttl=(seconds)
      self.max_age = age + seconds
    end

date() click to toggle source

The date, as specified by the Date header. When no Date header is present, set the Date header to Time.now and return.

    # File lib/rack/cache/response.rb, line 138
    def date
      if date = headers['Date']
        Time.httpdate(date)
      else
        headers['Date'] = now.httpdate unless headers.frozen?
        now
      end
    end

etag() click to toggle source

The literal value of ETag HTTP header or nil if no ETag is specified.

    # File lib/rack/cache/response.rb, line 207
    def etag
      headers['ETag']
    end

expire!() click to toggle source

Mark the response stale by setting the Age header to be equal to the maximum age of the response.

    # File lib/rack/cache/response.rb, line 132
    def expire!
      headers['Age'] = max_age.to_s if fresh?
    end

expires() click to toggle source

The value of the Expires header as a Time object.

    # File lib/rack/cache/response.rb, line 164
    def expires
      headers['Expires'] && Time.httpdate(headers['Expires'])
    end

fresh?() click to toggle source

Determine if the response is "fresh". Fresh responses may be served from cache without any interaction with the origin. A response is considered fresh when it includes a Cache-Control/max-age indicator or Expiration header and the calculated age is less than the freshness lifetime.

    # File lib/rack/cache/response.rb, line 92
    def fresh?
      ttl && ttl > 0
    end

initialize_copy(other) click to toggle source

    # File lib/rack/cache/response.rb, line 40
    def initialize_copy(other)
      super
      @headers = other.headers.dup
    end

last_modified() click to toggle source

The String value of the Last-Modified header exactly as it appears in the response (i.e., no date parsing / conversion is performed).

    # File lib/rack/cache/response.rb, line 202
    def last_modified
      headers['Last-Modified']
    end

max_age() click to toggle source

The number of seconds after the time specified in the response's Date header when the the response should no longer be considered fresh. First check for a s-maxage directive, then a max-age directive, and then fall back on an expires header; return nil when no maximum age can be established.

    # File lib/rack/cache/response.rb, line 157
    def max_age
      cache_control.shared_max_age ||
        cache_control.max_age ||
        (expires && (expires - date))
    end

max_age=(value) click to toggle source

The number of seconds after which the response should no longer be considered fresh. Sets the Cache-Control max-age directive.

    # File lib/rack/cache/response.rb, line 170
    def max_age=(value)
      self.cache_control = cache_control.merge('max-age' => value.to_s)
    end

must_revalidate?() click to toggle source

Indicates that the cache must not serve a stale response in any circumstance without first revalidating with the origin. When present, the TTL of the response should not be overriden to be greater than the value provided by the origin.

    # File lib/rack/cache/response.rb, line 126
    def must_revalidate?
      cache_control.must_revalidate || cache_control.proxy_revalidate
    end

not_modified!() click to toggle source

Modify the response so that it conforms to the rules defined for '304 Not Modified'. This sets the status, removes the body, and discards any headers that MUST NOT be included in 304 responses.

tools.ietf.org/html/rfc2616#section-10.3.5

    # File lib/rack/cache/response.rb, line 229
    def not_modified!
      body.close if body.respond_to?(:close)
      self.status = 304
      self.body = []
      NOT_MODIFIED_OMIT_HEADERS.each { |name| headers.delete(name) }
      nil
    end

private=(value) click to toggle source

Mark the response "private", making it ineligible for serving other clients.

    # File lib/rack/cache/response.rb, line 116
    def private=(value)
      value = value ? true : nil
      self.cache_control = cache_control.
        merge('public' => !value, 'private' => value)
    end

shared_max_age=(value) click to toggle source

Like max_age= but sets the s-maxage directive, which applies only to shared caches.

    # File lib/rack/cache/response.rb, line 176
    def shared_max_age=(value)
      self.cache_control = cache_control.merge('s-maxage' => value.to_s)
    end

to_a() click to toggle source

Return the status, headers, and body in a three-tuple.

    # File lib/rack/cache/response.rb, line 46
    def to_a
      [status, headers.to_hash, body]
    end

ttl() click to toggle source

The response's time-to-live in seconds, or nil when no freshness information is present in the response. When the responses ttl is <= 0, the response may not be served from cache without first revalidating with the origin.

    # File lib/rack/cache/response.rb, line 184
    def ttl
      max_age - age if max_age
    end

ttl=(seconds) click to toggle source

Set the response's time-to-live for shared caches to the specified number of seconds. This adjusts the Cache-Control/s-maxage directive.

    # File lib/rack/cache/response.rb, line 190
    def ttl=(seconds)
      self.shared_max_age = age + seconds
    end

validateable?() click to toggle source

Determine if the response includes headers that can be used to validate the response with the origin using a conditional GET request.

    # File lib/rack/cache/response.rb, line 110
    def validateable?
      headers.key?('Last-Modified') || headers.key?('ETag')
    end

vary() click to toggle source

The literal value of the Vary header, or nil when no header is present.

    # File lib/rack/cache/response.rb, line 238
    def vary
      headers['Vary']
    end

vary?() click to toggle source

Does the response include a Vary header?

    # File lib/rack/cache/response.rb, line 243
    def vary?
      ! vary.nil?
    end

vary_header_names() click to toggle source

An array of header names given in the Vary header or an empty array when no Vary header is present.

    # File lib/rack/cache/response.rb, line 249
    def vary_header_names
      return [] unless vary = headers['Vary']
      vary.split(/[\s,]+/)
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.