class Threatinator::Parsers::XML::SAXDocument

Public Class Methods

new(pattern, cb) click to toggle source
Calls superclass method
# File lib/threatinator/parsers/xml/sax_document.rb, line 9
def initialize(pattern, cb)
  @pattern = pattern
  @max_depth = @pattern.max_depth
  @cb = cb
  @element_stack = Threatinator::Parsers::XML::Path.new
  @parsing_stack = []
  @current_node = nil
  super()
end

Public Instance Methods

cdata_block(str)
Alias for: characters
characters(str) click to toggle source
# File lib/threatinator/parsers/xml/sax_document.rb, line 24
def characters(str)
  return if @current_node.nil?
  @current_node.append_text(str)
end
Also aliased as: cdata_block
end_element_namespace(name, prefix = nil, uri = nil) click to toggle source
# File lib/threatinator/parsers/xml/sax_document.rb, line 47
def end_element_namespace(name, prefix = nil, uri = nil)
  name_sym = name.to_sym
  @element_stack.pop
  return if @parsing_stack.empty?
  @parsing_stack.pop

  if parent = @parsing_stack.last
    parent.add_child(@current_node.build)
    @current_node = parent
  else
    @cb.call(@current_node.build)
    @current_node = nil
  end
end
start_element_namespace(name, attrs = [], prefix = nil, uri = nil, ns = []) click to toggle source
# File lib/threatinator/parsers/xml/sax_document.rb, line 31
def start_element_namespace(name, attrs = [], prefix = nil, uri = nil, ns = [])
  @element_stack.push(name)

  if @parsing_stack.empty?
    if @element_stack.length > @max_depth
      return
    end

    if @pattern.match?(@element_stack)
      start_parsing(name, attrs)
    end
  else
    start_parsing(name, attrs)
  end
end
start_parsing(name, attributes) click to toggle source
# File lib/threatinator/parsers/xml/sax_document.rb, line 19
def start_parsing(name, attributes)
  @current_node = Threatinator::Parsers::XML::NodeBuilder.new(name, attributes)
  @parsing_stack.push(@current_node)
end