module Roda::RodaPlugins::Base::ResponseMethods
Instance methods for RodaResponse
Constants
- DEFAULT_HEADERS
Attributes
The body for the current response.
The hash of response headers for the current response.
The status code to use for the response. If none is given, will use 200 code for non-empty responses and a 404 code for empty responses.
Public Class Methods
Source
# File lib/roda/response.rb, line 60 def initialize @headers = _initialize_headers @body = [] @length = 0 end
Set the default headers when creating a response.
Public Instance Methods
Source
# File lib/roda/response.rb, line 69 def [](key) @headers[key] end
Return the response header with the given key. Example:
response['Content-Type'] # => 'text/html'
Source
# File lib/roda/response.rb, line 76 def []=(key, value) @headers[key] = value end
Set the response header with the given key to the given value.
response['Content-Type'] = 'application/json'
Source
# File lib/roda/response.rb, line 81 def default_headers DEFAULT_HEADERS end
The default headers to use for responses.
Source
# File lib/roda/response.rb, line 142 def default_status 200 end
Return the default response status to be used when the body has been written to. This is split out to make overriding easier in plugins.
Source
# File lib/roda/response.rb, line 92 def empty? @body.empty? end
Whether the response body has been written to yet. Note that writing an empty string to the response body marks the response as not empty. Example:
response.empty? # => true response.write('a') response.empty? # => false
Source
# File lib/roda/response.rb, line 108 def finish b = @body set_default_headers h = @headers if b.empty? s = @status || 404 if (s == 304 || s == 204 || (s >= 100 && s <= 199)) h.delete(RodaResponseHeaders::CONTENT_TYPE) elsif s == 205 empty_205_headers(h) else h[RodaResponseHeaders::CONTENT_LENGTH] ||= '0' end else s = @status || default_status h[RodaResponseHeaders::CONTENT_LENGTH] ||= @length.to_s end [s, h, b] end
Return the rack response array of status, headers, and body for the current response. If the status has not been set, uses the return value of default_status
if the body has been written to, otherwise uses a 404 status. Adds the Content-Length header to the size of the response body.
Example:
response.finish # => [200, # {'Content-Type'=>'text/html', 'Content-Length'=>'0'}, # []]
Source
# File lib/roda/response.rb, line 134 def finish_with_body(body) set_default_headers [@status || default_status, @headers, body] end
Return the rack response array using a given body. Assumes a 200 response status unless status has been explicitly set, and doesn’t add the Content-Length header or use the existing body.
Source
# File lib/roda/response.rb, line 147 def inspect "#<#{self.class.inspect} #{@status.inspect} #{@headers.inspect} #{@body.inspect}>" end
Show response class, status code, response headers, and response body
Source
# File lib/roda/response.rb, line 156 def redirect(path, status = 302) @headers[RodaResponseHeaders::LOCATION] = path @status = status nil end
Set the Location header to the given path, and the status to the given status. Example:
response.redirect('foo', 301) response.redirect('bar')
Source
# File lib/roda/response.rb, line 163 def roda_class self.class.roda_class end
Return the Roda
class related to this response.
Source
# File lib/roda/response.rb, line 170 def write(str) s = str.to_s @length += s.bytesize @body << s nil end
Write to the response body. Returns nil.
response.write('foo')
Private Instance Methods
Source
# File lib/roda/response.rb, line 183 def _initialize_headers Rack::Headers.new end
Use Rack::Headers for headers by default on Rack 3
Source
# File lib/roda/response.rb, line 198 def empty_205_headers(headers) headers.delete(RodaResponseHeaders::CONTENT_TYPE) headers.delete(RodaResponseHeaders::CONTENT_LENGTH) end
Don’t use a content length for empty 205 responses on rack 1, as it violates Rack::Lint in that version.
Source
# File lib/roda/response.rb, line 212 def set_default_headers h = @headers default_headers.each do |k,v| h[k] ||= v end end
For each default header, if a header has not already been set for the response, set the header in the response.