Class: Hatetepe::Parser

Inherits:
Object
  • 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
# File 'lib/hatetepe/parser.rb', line 21

def initialize(&block)
  initialize_parser
  reset

  if block
    block.arity == 0 ? instance_eval(&block) : block.call(self)
  end
end

Instance Attribute Details

#messageObject (readonly)

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



50
51
52
53
54
# File 'lib/hatetepe/parser.rb', line 50

def <<(data)
  @parser << data
rescue HTTP::Parser::Error => e
  raise Hatetepe::ParserError, e.message, e.backtrace
end

#initialize_parserObject



30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/hatetepe/parser.rb', line 30

def initialize_parser
  @parser = HTTP::Parser.new.tap do |p|
    p.on_headers_complete = proc do |headers|
      headers_complete(p) if @headers_counter.even?
      @headers_counter += 1
      nil
    end
    
    p.on_body             = method(:body)
    p.on_message_complete = method(:complete)
  end
end

#resetObject



43
44
45
46
47
48
# File 'lib/hatetepe/parser.rb', line 43

def reset
  @parser.reset!
  event! :reset
  @message = nil
  @headers_counter = 0
end