Parent

Thin::Response

A response sent to the client.

Constants

CONNECTION
CLOSE
KEEP_ALIVE
SERVER
CONTENT_LENGTH
PERSISTENT_STATUSES

Attributes

status[RW]

Status code

body[RW]

Response body, must respond to each.

headers[R]

Headers key-value hash

Public Class Methods

new() click to toggle source
    # File lib/thin/response.rb, line 21
21:     def initialize
22:       @headers    = Headers.new
23:       @status     = 200
24:       @persistent = false
25:     end

Public Instance Methods

close() click to toggle source

Close any resource used by the response

    # File lib/thin/response.rb, line 76
76:     def close
77:       @body.close if @body.respond_to?(:close)
78:     end
each() click to toggle source

Yields each chunk of the response. To control the size of each chunk define your own each method on body.

    # File lib/thin/response.rb, line 83
83:     def each
84:       yield head
85:       if @body.is_a?(String)
86:         yield @body
87:       else
88:         @body.each { |chunk| yield chunk }
89:       end
90:     end
head() click to toggle source

Top header of the response, containing the status code and response headers.

    # File lib/thin/response.rb, line 39
39:     def head
40:       "HTTP/1.1 #{@status} #{HTTP_STATUS_CODES[@status.to_i]}\r\n#{headers_output}\r\n"
41:     end
headers=(key_value_pairs) click to toggle source

Ruby 1.8 implementation. Respects Rack specs.

See rack.rubyforge.org/doc/files/SPEC.html

    # File lib/thin/response.rb, line 49
49:       def headers=(key_value_pairs)
50:         key_value_pairs.each do |k, vs|
51:           vs.each { |v| @headers[k] = v.chomp } if vs
52:         end if key_value_pairs
53:       end
headers=(key_value_pairs) click to toggle source

Ruby 1.9 doesn’t have a String#each anymore. Rack spec doesn’t take care of that yet, for now we just use each but fallback to each_line on strings. I wish we could remove that condition. To be reviewed when a new Rack spec comes out.

    # File lib/thin/response.rb, line 62
62:       def headers=(key_value_pairs)
63:         key_value_pairs.each do |k, vs|
64:           next unless vs
65:           if vs.is_a?(String)
66:             vs.each_line { |v| @headers[k] = v.chomp }
67:           else
68:             vs.each { |v| @headers[k] = v.chomp }
69:           end
70:         end if key_value_pairs
71:       end
headers_output() click to toggle source

String representation of the headers to be sent in the response.

    # File lib/thin/response.rb, line 29
29:     def headers_output
30:       # Set default headers
31:       @headers[CONNECTION] = persistent? ? KEEP_ALIVE : CLOSE
32:       @headers[SERVER]     = Thin::SERVER
33: 
34:       @headers.to_s
35:     end
persistent!() click to toggle source

Tell the client the connection should stay open

    # File lib/thin/response.rb, line 93
93:     def persistent!
94:       @persistent = true
95:     end
persistent?() click to toggle source

Persistent connection must be requested as keep-alive from the server and have a Content-Length, or the response status must require that the connection remain open.

     # File lib/thin/response.rb, line 100
100:     def persistent?
101:       (@persistent && @headers.has_key?(CONTENT_LENGTH)) || PERSISTENT_STATUSES.include?(@status)
102:     end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.