Class: Hatetepe::Parser
- Inherits:
-
Object
show all
- Includes:
- Events
- Defined in:
- lib/hatetepe/parser.rb
Instance Attribute Summary collapse
Attributes included from Events
#state
Instance Method Summary
collapse
Methods included from Events
#event, #event!, included
Constructor Details
#initialize(&block) ⇒ Parser
Returns a new instance of Parser.
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
# File 'lib/hatetepe/parser.rb', line 21
def initialize(&block)
@parser = HTTP::Parser.new.tap do |p|
p. = proc do
version = p.http_version.join(".")
if p.http_method
@message = Request.new(p.http_method, p.request_url,
p., Body.new, version)
event! :request, message
else
@message = Response.new(p.status_code, p., Body.new, version)
event! :response, message
end
event! :headers, message.
event! :body, message.body
nil
end
p.on_body = proc do |chunk|
message.body.write chunk unless message.body.closed_write?
end
p.on_message_complete = method(:complete)
end
reset
if block
block.arity == 0 ? instance_eval(&block) : block.call(self)
end
end
|
Instance Attribute Details
#message ⇒ Object
Returns the value of attribute message.
19
20
21
|
# File 'lib/hatetepe/parser.rb', line 19
def message
@message
end
|
Instance Method Details
#<<(data) ⇒ Object
65
66
67
68
69
|
# File 'lib/hatetepe/parser.rb', line 65
def <<(data)
@parser << data
rescue HTTP::Parser::Error => e
raise Hatetepe::ParserError, e.message, e.backtrace
end
|
#complete ⇒ Object
59
60
61
62
63
|
# File 'lib/hatetepe/parser.rb', line 59
def complete
message.body.rewind
message.body.close_write unless message.body.closed_write?
event! :complete
end
|
#reset ⇒ Object
53
54
55
56
57
|
# File 'lib/hatetepe/parser.rb', line 53
def reset
@parser.reset!
event! :reset
@message = nil
end
|