| Class | ServerSide::HTTP::Response |
| In: |
lib/serverside/http/response.rb
|
| Parent: | Object |
| ROOT_PATH | = | '/'.freeze |
| EMPTY | = | ''.freeze |
| body | [RW] | |
| headers | [R] | |
| request | [RW] | |
| status | [RW] | |
| stream_period | [R] | |
| stream_proc | [R] |
# 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
# 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
# File lib/serverside/http/response.rb, line 92
92: def self.redirect(location, status = STATUS_FOUND)
93: new(:status => status, :location => location)
94: end
# File lib/serverside/http/response.rb, line 96
96: def self.static(path, options = {})
97: new(options.merge(:static => path))
98: end
# File lib/serverside/http/response.rb, line 105
105: def self.streaming(opts = nil, &block)
106: new(opts).stream(1, &block)
107: end
Adds a header to the response.
# 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
# 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.
# 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
# File lib/serverside/http/response.rb, line 27
27: def disable_response
28: @disable_response = true
29: end
# File lib/serverside/http/response.rb, line 31
31: def enable_response
32: @disable_response = false
33: end
# File lib/serverside/http/response.rb, line 35
35: def persistent?
36: !@close && !@stream_proc && @body
37: end
# 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.
# 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
# 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
# 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
# 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