Class ServerSide::HTTP::Response
In: lib/serverside/http/response.rb
Parent: Object

Methods

Included Modules

Caching Static

Constants

ROOT_PATH = '/'.freeze
EMPTY = ''.freeze

Attributes

body  [RW] 
headers  [R] 
request  [RW] 
status  [RW] 
stream_period  [R] 
stream_proc  [R] 

Public Class methods

[Source]

    # File lib/serverside/http/response.rb, line 88
88:     def self.blank
89:       new(:body => nil)
90:     end

[Source]

     # File lib/serverside/http/response.rb, line 100
100:     def self.error(e)
101:       new(:status => e.http_status, :close => true,
102:         :body => "#{e.message}\r\n#{e.backtrace.join("\r\n")}")
103:     end

[Source]

    # File lib/serverside/http/response.rb, line 9
 9:     def initialize(opts = nil)
10:       @status = STATUS_OK
11:       @headers = []
12:       @body = ''
13:       if opts
14:         opts.each do |k, v|
15:           case k
16:           when :status: @status = v
17:           when :body: @body = v
18:           when :close: @close = v
19:           when :request: @request = v
20:           when :static: serve_static(v)
21:           else add_header(k, v)
22:           end
23:         end
24:       end
25:     end

[Source]

    # File lib/serverside/http/response.rb, line 92
92:     def self.redirect(location, status = STATUS_FOUND)
93:       new(:status => status, :location => location)
94:     end

[Source]

    # File lib/serverside/http/response.rb, line 96
96:     def self.static(path, options = {})
97:       new(options.merge(:static => path))
98:     end

[Source]

     # File lib/serverside/http/response.rb, line 105
105:     def self.streaming(opts = nil, &block)
106:       new(opts).stream(1, &block)
107:     end

Public Instance methods

Adds a header to the response.

[Source]

    # File lib/serverside/http/response.rb, line 40
40:     def add_header(k, v)
41:       k = k.to_header_name if (k.class == Symbol)
42:       @headers << "#{k}: #{v}\r\n"
43:     end

[Source]

     # File lib/serverside/http/response.rb, line 119
119:     def content_type=(v)
120:       add_header(CONTENT_TYPE, v)
121:     end

Adds an expired cookie to the response headers.

[Source]

    # File lib/serverside/http/response.rb, line 61
61:     def delete_cookie(name, opts = {})
62:       set_cookie(name, nil, opts.merge(:expires => COOKIE_EXPIRED_TIME))
63:     end

[Source]

    # File lib/serverside/http/response.rb, line 27
27:     def disable_response
28:       @disable_response = true
29:     end

[Source]

    # File lib/serverside/http/response.rb, line 31
31:     def enable_response
32:       @disable_response = false
33:     end

[Source]

    # File lib/serverside/http/response.rb, line 35
35:     def persistent?
36:       !@close && !@stream_proc && @body
37:     end

[Source]

     # File lib/serverside/http/response.rb, line 114
114:     def redirect(location, status = STATUS_FOUND)
115:       @status = status
116:       add_header(:location, location)
117:     end

Adds a cookie to the response headers.

[Source]

    # File lib/serverside/http/response.rb, line 48
48:     def set_cookie(name, value, opts = {})
49:       path = opts[:path] || ROOT_PATH
50:       expires = opts[:expires] || (opts[:ttl] && (Time.now + opts[:ttl])) || \
51:         (Time.now + 86400) # if no expiry is specified we assume one day
52: 
53:       v = "#{name}=#{value.to_s.uri_escape}; path=#{path}; expires=#{expires.httpdate}"
54:       if domain = opts[:domain]
55:         v << "; domain=#{domain}"
56:       end
57:       add_header(SET_COOKIE, v)
58:     end

[Source]

     # File lib/serverside/http/response.rb, line 109
109:     def set_representation(body, content_type)
110:       @body = body
111:       add_header(CONTENT_TYPE, content_type)
112:     end

[Source]

    # File lib/serverside/http/response.rb, line 78
78:     def stream(period, &block)
79:       @stream_period = period
80:       @stream_proc = block
81:       self
82:     end

[Source]

    # File lib/serverside/http/response.rb, line 84
84:     def streaming?
85:       @stream_proc
86:     end

[Source]

    # File lib/serverside/http/response.rb, line 67
67:     def to_s
68:       if @disable_response
69:         EMPTY
70:       else
71:         if !streaming? && (content_length = @body && @body.size)
72:           add_header(CONTENT_LENGTH, content_length)
73:         end
74:         "HTTP/1.1 #{@status}\r\nDate: #{Time.now.httpdate}\r\n#{@headers.join}\r\n#{@body}"
75:       end
76:     end

[Validate]