Class: SaxStream::Internal::SaxHandler

Inherits:
Nokogiri::XML::SAX::Document
  • Object
show all
Defined in:
lib/sax_stream/internal/sax_handler.rb

Constant Summary collapse

ERROR_TYPES =
{
  'Document is empty' => nil,
  'Start tag expected, \'<\' not found' => nil
}

Instance Method Summary collapse

Constructor Details

#initialize(collector, mappers, handler_stack = HandlerStack.new) ⇒ SaxHandler

Returns a new instance of SaxHandler.



13
14
15
16
17
18
19
# File 'lib/sax_stream/internal/sax_handler.rb', line 13

def initialize(collector, mappers, handler_stack = HandlerStack.new)
  @handler_stack = handler_stack
  mapper_handlers = mappers.map do |mapper|
    MapperHandler.new(mapper, collector, @handler_stack)
  end
  @handler_stack.root = CombinedHandler.new(@handler_stack, mapper_handlers)
end

Instance Method Details

#cdata_block(*params) ⇒ Object



33
34
35
# File 'lib/sax_stream/internal/sax_handler.rb', line 33

def cdata_block(*params)
  @handler_stack.top.cdata_block(*params)
end

#characters(*params) ⇒ Object



29
30
31
# File 'lib/sax_stream/internal/sax_handler.rb', line 29

def characters(*params)
  @handler_stack.top.characters(*params)
end

#end_element(*params) ⇒ Object



25
26
27
# File 'lib/sax_stream/internal/sax_handler.rb', line 25

def end_element(*params)
  @handler_stack.top.end_element(*params)
end

#error(message) ⇒ Object



37
38
39
40
41
42
# File 'lib/sax_stream/internal/sax_handler.rb', line 37

def error(message)
  klass = error_class(message)
  if klass
    raise klass.new(message.inspect)
  end
end

#error_class(message) ⇒ Object



44
45
46
47
48
49
50
51
# File 'lib/sax_stream/internal/sax_handler.rb', line 44

def error_class(message)
  message.strip!
  if ERROR_TYPES.has_key?(message)
    ERROR_TYPES[message]
  else
    ParsingError
  end
end

#start_element(*params) ⇒ Object



21
22
23
# File 'lib/sax_stream/internal/sax_handler.rb', line 21

def start_element(*params)
  @handler_stack.top.start_element(*params)
end