Instance methods for RodaResponse
Methods
Public Class
Public Instance
Constants
DEFAULT_HEADERS | = | {"Content-Type" => "text/html".freeze}.freeze |
Attributes
Public Class methods
Set the default headers when creating a response.
# File lib/roda/response.rb 47 def initialize 48 @headers = Rack::Headers.new 49 @body = [] 50 @length = 0 51 end
Public Instance methods
Return the response header with the given key. Example:
response['Content-Type'] # => 'text/html'
# File lib/roda/response.rb 64 def [](key) 65 @headers[key] 66 end
Set the response header with the given key to the given value.
response['Content-Type'] = 'application/json'
# File lib/roda/response.rb 71 def []=(key, value) 72 @headers[key] = value 73 end
The default headers to use for responses.
# File lib/roda/response.rb 76 def default_headers 77 DEFAULT_HEADERS 78 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 137 def default_status 138 200 139 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 87 def empty? 88 @body.empty? 89 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 103 def finish 104 b = @body 105 set_default_headers 106 h = @headers 107 108 if b.empty? 109 s = @status || 404 110 if (s == 304 || s == 204 || (s >= 100 && s <= 199)) 111 h.delete("Content-Type") 112 elsif s == 205 113 empty_205_headers(h) 114 else 115 h["Content-Length"] ||= '0' 116 end 117 else 118 s = @status || default_status 119 h["Content-Length"] ||= @length.to_s 120 end 121 122 [s, h, b] 123 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 129 def finish_with_body(body) 130 set_default_headers 131 [@status || default_status, @headers, body] 132 end
Show response class, status code, response headers, and response body
# File lib/roda/response.rb 142 def inspect 143 "#<#{self.class.inspect} #{@status.inspect} #{@headers.inspect} #{@body.inspect}>" 144 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 151 def redirect(path, status = 302) 152 @headers["Location"] = path 153 @status = status 154 nil 155 end
Return the Roda
class related to this response.
# File lib/roda/response.rb 158 def roda_class 159 self.class.roda_class 160 end
Write to the response body. Returns nil.
response.write('foo')
# File lib/roda/response.rb 165 def write(str) 166 s = str.to_s 167 @length += s.bytesize 168 @body << s 169 nil 170 end