Class: SockJS::Request
- Inherits:
-
Object
- Object
- SockJS::Request
- Defined in:
- lib/sockjs/servers/request.rb
Overview
This is the SockJS wrapper for a Rack env hash-like. Currently it requires that we’re running under Thin - someday we may break this out such that can adapt to other webservers or compatiblity layers. For now: do your SockJS stuff in Thin.
Instance Attribute Summary collapse
-
#env ⇒ Object
readonly
Returns the value of attribute env.
Instance Method Summary collapse
- #async_callback ⇒ Object
- #async_close ⇒ Object
- #callback ⇒ Object
- #content_type ⇒ Object
-
#cookies ⇒ Object
request.cookies => “123sd”.
-
#data ⇒ Object
request.data.read => “message”.
- #fail ⇒ Object
- #fresh?(etag) ⇒ Boolean
- #headers ⇒ Object
- #http_1_0? ⇒ Boolean
-
#http_method ⇒ Object
request.http_method => “GET”.
-
#initialize(env) ⇒ Request
constructor
A new instance of Request.
-
#inspect ⇒ Object
Somehow, default inspect pulls in the whole app…
- #keep_alive? ⇒ Boolean
- #on_close(&block) ⇒ Object
- #origin ⇒ Object
-
#path_info ⇒ Object
request.path_info => /echo/abc.
-
#query_string ⇒ Object
request.query_string => “myFn”.
- #session_id ⇒ Object
- #succeed ⇒ Object
Constructor Details
#initialize(env) ⇒ Request
Returns a new instance of Request.
13 14 15 |
# File 'lib/sockjs/servers/request.rb', line 13 def initialize(env) @env = env end |
Instance Attribute Details
#env ⇒ Object (readonly)
Returns the value of attribute env.
12 13 14 |
# File 'lib/sockjs/servers/request.rb', line 12 def env @env end |
Instance Method Details
#async_callback ⇒ Object
29 30 31 |
# File 'lib/sockjs/servers/request.rb', line 29 def async_callback env["async.callback"] end |
#async_close ⇒ Object
33 34 35 |
# File 'lib/sockjs/servers/request.rb', line 33 def async_close env["async.close"] end |
#callback ⇒ Object
120 121 122 123 |
# File 'lib/sockjs/servers/request.rb', line 120 def callback callback = self.query_string["callback"] || self.query_string["c"] URI.unescape(callback) if callback end |
#content_type ⇒ Object
116 117 118 |
# File 'lib/sockjs/servers/request.rb', line 116 def content_type self.headers["content-type"] end |
#cookies ⇒ Object
> “123sd”
91 92 93 94 95 96 |
# File 'lib/sockjs/servers/request.rb', line 91 def @cookies ||= begin ::Rack::Request.new(@env). end end |
#data ⇒ Object
request.data.read
> “message”
101 102 103 |
# File 'lib/sockjs/servers/request.rb', line 101 def data @env["rack.input"] end |
#fail ⇒ Object
46 47 48 |
# File 'lib/sockjs/servers/request.rb', line 46 def fail async_close.fail end |
#fresh?(etag) ⇒ Boolean
133 134 135 |
# File 'lib/sockjs/servers/request.rb', line 133 def fresh?(etag) self.headers["if-none-match"] == etag end |
#headers ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/sockjs/servers/request.rb', line 62 def headers @headers ||= begin permitted_keys = /^(CONTENT_(LENGTH|TYPE))$/ @env.reduce(Hash.new) do |headers, (key, value)| if key.match(/^HTTP_(.+)$/) || key.match(permitted_keys) headers[$1.downcase.tr("_", "-")] = value end headers end end end |
#http_1_0? ⇒ Boolean
107 108 109 |
# File 'lib/sockjs/servers/request.rb', line 107 def http_1_0? self.headers[HTTP_VERSION] == HTTP_1_0 end |
#http_method ⇒ Object
request.http_method
> “GET”
25 26 27 |
# File 'lib/sockjs/servers/request.rb', line 25 def http_method env["REQUEST_METHOD"] end |
#inspect ⇒ Object
Somehow, default inspect pulls in the whole app…
51 52 53 54 55 56 57 58 |
# File 'lib/sockjs/servers/request.rb', line 51 def inspect position = data.pos data.rewind body = data.read "<<#{self.class.name}: #{http_method}/#{path_info} #{body.inspect}>>" ensure data.pos = position end |
#keep_alive? ⇒ Boolean
125 126 127 |
# File 'lib/sockjs/servers/request.rb', line 125 def keep_alive? headers["connection"].downcase == "keep-alive" end |
#on_close(&block) ⇒ Object
37 38 39 40 |
# File 'lib/sockjs/servers/request.rb', line 37 def on_close(&block) async_close.callback( &block) async_close.errback( &block) end |
#origin ⇒ Object
111 112 113 114 |
# File 'lib/sockjs/servers/request.rb', line 111 def origin return "*" if self.headers["origin"] == "null" self.headers["origin"] || "*" end |
#path_info ⇒ Object
request.path_info
> /echo/abc
19 20 21 |
# File 'lib/sockjs/servers/request.rb', line 19 def path_info env["PATH_INFO"] end |
#query_string ⇒ Object
> “myFn”
79 80 81 82 83 84 85 86 |
# File 'lib/sockjs/servers/request.rb', line 79 def query_string @query_string ||= begin @env["QUERY_STRING"].split("=").each_slice(2).each_with_object({}) do |pair, buffer| buffer[pair.first] = pair.last end end end |
#session_id ⇒ Object
129 130 131 |
# File 'lib/sockjs/servers/request.rb', line 129 def session_id self.["JSESSIONID"] || "dummy" end |
#succeed ⇒ Object
42 43 44 |
# File 'lib/sockjs/servers/request.rb', line 42 def succeed async_close.succeed end |