module Marfa::Helpers::HTTP::Vary

Helpers to set the HTTP “`Vary`” header.

Constants

VARY_HEADER
VARY_UNSPECIFIED

Public Instance Methods

vary!(hdr_name) click to toggle source

Sets the HTTP “`Vary`” header in Sinatra's response `headers`.

@param hdr_name [String] The HTTP header name. @return The updated `headers`.

# File lib/marfa/helpers/http/vary.rb, line 19
def vary!(hdr_name)
  hdr_name = hdr_name.to_s if !hdr_name.kind_of?(::String)

  # Shortcut to avoid expensive splitting in the
  # simple "*" case:
  if hdr_name == VARY_UNSPECIFIED
    headers[VARY_HEADER] = VARY_UNSPECIFIED.dup unless (headers[VARY_HEADER] == VARY_UNSPECIFIED)
    # Normal operation:
  else
    vary_hdrs = headers[VARY_HEADER].to_s.split(/\s*(?:,\s*)+/)

    if vary_hdrs.include?(VARY_UNSPECIFIED)
      headers[VARY_HEADER] = VARY_UNSPECIFIED.dup
    else
      headers[VARY_HEADER] =
        vary_hdrs
          .push(hdr_name)
          .uniq(& :downcase)
          .join(',')
    end
  end

  headers[VARY_HEADER]
end