Class: XMPPSimple::Parser

Inherits:
Nokogiri::XML::SAX::Document
  • Object
show all
Defined in:
lib/xmpp_simple/parser.rb

Instance Method Summary collapse

Constructor Details

#initialize(client) ⇒ Parser

Returns a new instance of Parser.



3
4
5
6
7
# File 'lib/xmpp_simple/parser.rb', line 3

def initialize(client)
  @parser = Nokogiri::XML::SAX::PushParser.new self
  @client = client
  @current = nil
end

Instance Method Details

#<<(data) ⇒ Object



9
10
11
12
13
14
15
16
# File 'lib/xmpp_simple/parser.rb', line 9

def <<(data)
  @parser << data
  self
rescue Nokogiri::XML::SyntaxError => e
  @parser = Nokogiri::XML::SAX::PushParser.new self
  @current = nil
  XMPPSimple.logger.error e.message
end

#characters(chars = '') ⇒ Object



39
40
41
42
# File 'lib/xmpp_simple/parser.rb', line 39

def characters(chars = '')
  XMPPSimple.logger.debug "Parse chars: #{chars}"
  @current << Nokogiri::XML::Text.new(chars, @current.document) if @current
end

#end_element_namespace(name, prefix = nil, uri = nil) ⇒ Object



28
29
30
31
32
33
34
35
36
37
# File 'lib/xmpp_simple/parser.rb', line 28

def end_element_namespace(name, prefix = nil, uri = nil)
  params = { name: name, prefix: prefix, uri: uri }
  XMPPSimple.logger.debug "Parse end elem: #{params.inspect}"
  return if name == 'stream'
  if @current.parent
    @current = @current.parent
    return
  end
  process(@current)
end

#process(node) ⇒ Object



44
45
46
47
# File 'lib/xmpp_simple/parser.rb', line 44

def process(node)
  @current = nil
  @client.process(node)
end

#start_element_namespace(name, attrs = [], prefix = nil, uri = nil, ns = []) ⇒ Object



18
19
20
21
22
23
24
25
26
# File 'lib/xmpp_simple/parser.rb', line 18

def start_element_namespace(name, attrs = [], prefix = nil, uri = nil, ns = [])
  params = { name: name, attrs: attrs, prefix: prefix, uri: uri, ns: ns }
  XMPPSimple.logger.debug "Parse start elem: #{params.inspect}"
  return if name == 'stream'
  doc = @current.nil? ? Nokogiri::XML::Document.new : @current.document
  node = Node.new(name, attrs, ns, doc)
  @current << node if @current
  @current = node
end