module Rack::Response::Helpers

Public Instance Methods

# File lib/rack/response.rb, line 191
def accepted?;            status == 202;                        end

Add a header that may have multiple values.

Example:

response.add_header 'vary', 'accept-encoding'
response.add_header 'vary', 'cookie'

assert_equal 'accept-encoding,cookie', response.get_header('vary')

www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2

# File lib/rack/response.rb, line 219
def add_header(key, value)
  raise ArgumentError unless key.is_a?(String)

  if value.nil?
    return get_header(key)
  end

  value = value.to_s

  if header = get_header(key)
    if header.is_a?(Array)
      header << value
    else
      set_header(key, [header, value])
    end
  else
    set_header(key, value)
  end
end
# File lib/rack/response.rb, line 194
def bad_request?;         status == 400;                        end

Specify that the content should be cached. @param duration [Integer] The number of seconds until the cache expires. @option directive [String] The cache control directive, one of “public”, “private”, “no-cache” or “no-store”.

# File lib/rack/response.rb, line 307
def cache!(duration = 3600, directive: "public")
  unless headers[CACHE_CONTROL] =~ /no-cache/
    set_header CACHE_CONTROL, "#{directive}, max-age=#{duration}"
    set_header EXPIRES, (Time.now + duration).httpdate
  end
end
# File lib/rack/response.rb, line 290
def cache_control
  get_header CACHE_CONTROL
end
# File lib/rack/response.rb, line 294
def cache_control=(value)
  set_header CACHE_CONTROL, value
end
# File lib/rack/response.rb, line 186
def client_error?;        status >= 400 && status < 500;        end
# File lib/rack/response.rb, line 257
def content_length
  cl = get_header CONTENT_LENGTH
  cl ? cl.to_i : cl
end

Get the content type of the response.

# File lib/rack/response.rb, line 240
def content_type
  get_header CONTENT_TYPE
end

Set the content type of the response.

# File lib/rack/response.rb, line 245
def content_type=(content_type)
  set_header CONTENT_TYPE, content_type
end
# File lib/rack/response.rb, line 190
def created?;             status == 201;                        end

Specifies that the content shouldn’t be cached. Overrides ‘cache!` if already called.

# File lib/rack/response.rb, line 299
def do_not_cache!
  set_header CACHE_CONTROL, "no-cache, must-revalidate"
  set_header EXPIRES, Time.now.httpdate
end
# File lib/rack/response.rb, line 314
def etag
  get_header ETAG
end
# File lib/rack/response.rb, line 318
def etag=(value)
  set_header ETAG, value
end
# File lib/rack/response.rb, line 196
def forbidden?;           status == 403;                        end
# File lib/rack/response.rb, line 206
def include?(header)
  has_header?(header)
end
# File lib/rack/response.rb, line 183
def informational?;       status >= 100 && status < 200;        end
# File lib/rack/response.rb, line 181
def invalid?;             status < 100 || status >= 600;        end
# File lib/rack/response.rb, line 262
def location
  get_header "location"
end
# File lib/rack/response.rb, line 266
def location=(location)
  set_header "location", location
end
# File lib/rack/response.rb, line 249
def media_type
  MediaType.type(content_type)
end
# File lib/rack/response.rb, line 253
def media_type_params
  MediaType.params(content_type)
end
# File lib/rack/response.rb, line 198
def method_not_allowed?;  status == 405;                        end
# File lib/rack/response.rb, line 193
def moved_permanently?;   status == 301;                        end
# File lib/rack/response.rb, line 192
def no_content?;          status == 204;                        end
# File lib/rack/response.rb, line 199
def not_acceptable?;      status == 406;                        end
# File lib/rack/response.rb, line 197
def not_found?;           status == 404;                        end
# File lib/rack/response.rb, line 189
def ok?;                  status == 200;                        end
# File lib/rack/response.rb, line 201
def precondition_failed?; status == 412;                        end
# File lib/rack/response.rb, line 204
def redirect?;            [301, 302, 303, 307, 308].include? status; end
# File lib/rack/response.rb, line 185
def redirection?;         status >= 300 && status < 400;        end
# File lib/rack/response.rb, line 200
def request_timeout?;     status == 408;                        end
# File lib/rack/response.rb, line 187
def server_error?;        status >= 500 && status < 600;        end
# File lib/rack/response.rb, line 184
def successful?;          status >= 200 && status < 300;        end
# File lib/rack/response.rb, line 195
def unauthorized?;        status == 401;                        end
# File lib/rack/response.rb, line 202
def unprocessable?;       status == 422;                        end

Protected Instance Methods

# File lib/rack/response.rb, line 359
def append(chunk)
  chunk = chunk.dup unless chunk.frozen?
  @body << chunk

  if @length
    @length += chunk.bytesize
  elsif @buffered
    @length = chunk.bytesize
  end

  return chunk
end

Convert the body of this response into an internally buffered Array if possible.

‘@buffered` is a ternary value which indicates whether the body is buffered. It can be:

  • ‘nil` - The body has not been buffered yet.

  • ‘true` - The body is buffered as an Array instance.

  • ‘false` - The body is not buffered and cannot be buffered.

@return [Boolean] whether the body is buffered as an Array instance.

# File lib/rack/response.rb, line 332
def buffered_body!
  if @buffered.nil?
    if @body.is_a?(Array)
      # The user supplied body was an array:
      @body = @body.compact
      @length = @body.sum{|part| part.bytesize}
      @buffered = true
    elsif @body.respond_to?(:each)
      # Turn the user supplied body into a buffered array:
      body = @body
      @body = Array.new
      @buffered = true

      body.each do |part|
        @writer.call(part.to_s)
      end

      body.close if body.respond_to?(:close)
    else
      # We don't know how to buffer the user-supplied body:
      @buffered = false
    end
  end

  return @buffered
end