Class: SergioSax
- Inherits:
-
Nokogiri::XML::SAX::Document
- Object
- Nokogiri::XML::SAX::Document
- SergioSax
- Defined in:
- lib/sergio/sergio_sax.rb
Instance Method Summary collapse
- #cdata_block(string) ⇒ Object
- #characters(string) ⇒ Object
- #end_element(name) ⇒ Object
-
#initialize(object) ⇒ SergioSax
constructor
A new instance of SergioSax.
- #start_element(name, attrs = []) ⇒ Object
Constructor Details
#initialize(object) ⇒ SergioSax
Returns a new instance of SergioSax.
2 3 4 5 |
# File 'lib/sergio/sergio_sax.rb', line 2 def initialize(object) @stack = [] @object = object end |
Instance Method Details
#cdata_block(string) ⇒ Object
16 17 18 |
# File 'lib/sergio/sergio_sax.rb', line 16 def cdata_block(string) characters(string) end |
#characters(string) ⇒ Object
11 12 13 14 |
# File 'lib/sergio/sergio_sax.rb', line 11 def characters(string) name, attrs = @stack.last attrs << ['@text', string] end |
#end_element(name) ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/sergio/sergio_sax.rb', line 20 def end_element(name) e_context = @stack.clone name, attrs = @stack.pop if sergio_elements = @object.class.sergio_config.get_element_configs(e_context) sergio_elements.each do |sergio_element| attr = sergio_element.[:attribute] val = attrs.assoc(attr) if val val = val[1] hash_path = sergio_element.new_path callback = sergio_element.callback r = if callback.arity == 1 callback.call(val) elsif callback.arity == 2 h = Hash[*attrs.flatten] h.delete('@text') callback.call(val, Hash[*attrs.flatten]) end @object.sergio_parsed_document.set_element(hash_path, r, sergio_element.) end end end end |
#start_element(name, attrs = []) ⇒ Object
7 8 9 |
# File 'lib/sergio/sergio_sax.rb', line 7 def start_element(name, attrs = []) @stack << [name, attrs] end |