Instance methods for RodaResponse
Methods
Public Class
Public Instance
Constants
DEFAULT_HEADERS | = | {RodaResponseHeaders::CONTENT_TYPE => "text/html".freeze}.freeze |
Attributes
Public Class methods
Set the default headers when creating a response.
# File lib/roda/response.rb 62 def initialize 63 @headers = _initialize_headers 64 @body = [] 65 @length = 0 66 end
Public Instance methods
Return the response header with the given key. Example:
response['Content-Type'] # => 'text/html'
# File lib/roda/response.rb 71 def [](key) 72 @headers[key] 73 end
Set the response header with the given key to the given value.
response['Content-Type'] = 'application/json'
# File lib/roda/response.rb 78 def []=(key, value) 79 @headers[key] = value 80 end
The default headers to use for responses.
# File lib/roda/response.rb 83 def default_headers 84 DEFAULT_HEADERS 85 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.
# File lib/roda/response.rb 144 def default_status 145 200 146 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
# File lib/roda/response.rb 94 def empty? 95 @body.empty? 96 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'}, # []]
# File lib/roda/response.rb 110 def finish 111 b = @body 112 set_default_headers 113 h = @headers 114 115 if b.empty? 116 s = @status || 404 117 if (s == 304 || s == 204 || (s >= 100 && s <= 199)) 118 h.delete(RodaResponseHeaders::CONTENT_TYPE) 119 elsif s == 205 120 empty_205_headers(h) 121 else 122 h[RodaResponseHeaders::CONTENT_LENGTH] ||= '0' 123 end 124 else 125 s = @status || default_status 126 h[RodaResponseHeaders::CONTENT_LENGTH] ||= @length.to_s 127 end 128 129 [s, h, b] 130 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.
# File lib/roda/response.rb 136 def finish_with_body(body) 137 set_default_headers 138 [@status || default_status, @headers, body] 139 end
Show response class, status code, response headers, and response body
# File lib/roda/response.rb 149 def inspect 150 "#<#{self.class.inspect} #{@status.inspect} #{@headers.inspect} #{@body.inspect}>" 151 end
Set the Location header to the given path, and the status to the given status. Example:
response.redirect('foo', 301) response.redirect('bar')
# File lib/roda/response.rb 158 def redirect(path, status = 302) 159 @headers[RodaResponseHeaders::LOCATION] = path 160 @status = status 161 nil 162 end
Return the Roda
class related to this response.
# File lib/roda/response.rb 165 def roda_class 166 self.class.roda_class 167 end
Write to the response body. Returns nil.
response.write('foo')
# File lib/roda/response.rb 172 def write(str) 173 s = str.to_s 174 @length += s.bytesize 175 @body << s 176 nil 177 end