module ActionController::ConditionalGet

def expires_in(seconds, options = {})


# => Cache-Control: max-age=3600, public, s-maxage=10800, no-transform=true
expires_in 1.hour, public: true, "s-maxage": 3.hours, "no-transform": true

# => Cache-Control: max-age=3600, private, stale-if-error=300
expires_in 1.hour, stale_if_error: 5.minutes

# => Cache-Control: max-age=3600, private, stale-while-revalidate=60
expires_in 1.hour, stale_while_revalidate: 60.seconds

# => Cache-Control: max-age=600, public, must-revalidate
expires_in 10.minutes, public: true, must_revalidate: true

# => Cache-Control: max-age=600, public
expires_in 10.minutes, public: true

# => Cache-Control: max-age=600, private
expires_in 10.minutes

==== Examples

MDN}[https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control].
of supported +Cache-Control+ directives, see the {article on
Any additional key-value pairs are concatenated as directives. For a list

Sets the value of the +stale-if-error+ directive.
[+:stale_if_error+]
Sets the value of the +stale-while-revalidate+ directive.
[+:stale_while_revalidate+]
If true, adds the +must-revalidate+ directive.
[+:must_revalidate+]
directive.
If true, replaces the default +private+ directive with the +public+
[+:public+]

==== Options

must not cache the response.
Defaults to issuing the +private+ directive, so that intermediate caches

method will also ensure an HTTP +Date+ header for client compatibility.
Sets the +Cache-Control+ header, overwriting existing directives. This
def expires_in(seconds, options = {})
  response.cache_control.delete(:no_store)
  response.cache_control.merge!(
    max_age: seconds,
    public: options.delete(:public),
    must_revalidate: options.delete(:must_revalidate),
    stale_while_revalidate: options.delete(:stale_while_revalidate),
    stale_if_error: options.delete(:stale_if_error),
  )
  options.delete(:private)
  response.cache_control[:extras] = options.map { |k, v| "#{k}=#{v}" }
  response.date = Time.now unless response.date?
end