Class: NodeRb::Modules::Http::RackParser
- Inherits:
-
Object
- Object
- NodeRb::Modules::Http::RackParser
show all
- Includes:
- Parser
- Defined in:
- lib/noderb/modules/http/rack_parser.rb
Instance Method Summary
collapse
Methods included from Parser
#dispose, #on_header, #on_message_body, #on_message_error, #on_message_header, #on_status_code, #on_version, #parse, #setup
Constructor Details
Returns a new instance of RackParser.
12
13
14
15
16
17
18
19
20
21
22
23
|
# File 'lib/noderb/modules/http/rack_parser.rb', line 12
def initialize(env)
setup(:request)
@env = {
"rack.input" => StringIO.new,
"rack.version" => ::Rack::VERSION,
"rack.errors" => StringIO.new,
"rack.multithread" => false,
"rack.multiprocess" => false,
"rack.run_once" => false,
"rack.url_scheme" => "http"
}.merge(env || {})
end
|
Instance Method Details
#<<(data) ⇒ Object
25
26
27
28
29
30
|
# File 'lib/noderb/modules/http/rack_parser.rb', line 25
def <<(data)
self.parse(data)
return nil unless @_state == :done
self.dispose
@env
end
|
#on_body(body) ⇒ Object
85
86
87
|
# File 'lib/noderb/modules/http/rack_parser.rb', line 85
def on_body(body)
@env["rack.input"] << body
end
|
#on_error(name, description) ⇒ Object
89
90
91
|
# File 'lib/noderb/modules/http/rack_parser.rb', line 89
def on_error(name, description)
raise(RuntimeError, "Http parser error: #{name} (#{description})")
end
|
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
# File 'lib/noderb/modules/http/rack_parser.rb', line 53
def (name)
if @_state == :value
= @_header_name.sub("-", "_").upcase
case
when "CONTENT_TYPE", "CONTENT_LENGTH"
@env[] = @_header_value
when "HOST"
@env["HTTP_HOST"] = @_header_value
unless @env["SERVER_NAME"]
host = @_header_value.split(":")
@env["SERVER_NAME"] = host[0]
@env["SERVER_PORT"] = host[1] || 80
end
else
@env["HTTP_#{}"] = @_header_value
end
@_header_name = ""
@_header_value = ""
end
@_state = :field
@_header_name << name
end
|
76
77
78
79
|
# File 'lib/noderb/modules/http/rack_parser.rb', line 76
def (value)
@_header_value << value
@_state = :value
end
|
81
82
83
|
# File 'lib/noderb/modules/http/rack_parser.rb', line 81
def
("")
end
|
#on_keep_alive(status) ⇒ Object
93
94
95
|
# File 'lib/noderb/modules/http/rack_parser.rb', line 93
def on_keep_alive status
@env["nrb.keep_alive"] = status
end
|
#on_message_begin ⇒ Object
32
33
34
35
36
|
# File 'lib/noderb/modules/http/rack_parser.rb', line 32
def on_message_begin
@_state = :field
@_header_name = ""
@_header_value = ""
end
|
#on_message_complete ⇒ Object
101
102
103
|
# File 'lib/noderb/modules/http/rack_parser.rb', line 101
def on_message_complete
@_state = :done
end
|
#on_method(method) ⇒ Object
38
39
40
|
# File 'lib/noderb/modules/http/rack_parser.rb', line 38
def on_method(method)
@env["REQUEST_METHOD"] = method
end
|
#on_upgrade ⇒ Object
97
98
99
|
# File 'lib/noderb/modules/http/rack_parser.rb', line 97
def on_upgrade
@env["nrb.upgrade"] = true
end
|
#on_url(url) ⇒ Object
42
43
44
45
46
47
48
49
50
51
|
# File 'lib/noderb/modules/http/rack_parser.rb', line 42
def on_url(url)
url = url.split("?", 2)
if @env["SCRIPT_NAME"]
url.sub!(@env["SCRIPT_NAME"], "")
else
@env["SCRIPT_NAME"] = ""
end
@env["PATH_INFO"] = url[0]
@env["QUERY_STRING"] = url[1] || ""
end
|