Class: RGen::Instantiator::NodebasedXMLInstantiator
- Inherits:
-
AbstractInstantiator
- Object
- AbstractInstantiator
- RGen::Instantiator::NodebasedXMLInstantiator
- Defined in:
- lib/rgen/instantiator/nodebased_xml_instantiator.rb
Direct Known Subclasses
Defined Under Namespace
Classes: Visitor, XMLNodeDescriptor
Class Method Summary collapse
-
.prune_level ⇒ Object
:nodoc:.
-
.set_prune_level(level) ⇒ Object
The prune level is the number of parent/children associations which is kept when the instantiator ascents the XML tree.
Instance Method Summary collapse
- #end_element ⇒ Object
-
#initialize(env) ⇒ NodebasedXMLInstantiator
constructor
A new instance of NodebasedXMLInstantiator.
- #instantiate(text) ⇒ Object
- #instantiate_file(file) ⇒ Object
- #namespaces ⇒ Object
-
#on_ascent(node) ⇒ Object
This method is called when the XML parser goes up the tree.
- #on_chardata(str) ⇒ Object
-
#on_descent(node) ⇒ Object
This method is called when the XML parser goes down the tree.
- #parse(src) ⇒ Object
- #start_element(ns, qtag, prefix, tag, attributes) ⇒ Object
Methods inherited from AbstractInstantiator
Constructor Details
#initialize(env) ⇒ NodebasedXMLInstantiator
Returns a new instance of NodebasedXMLInstantiator.
66 67 68 69 70 |
# File 'lib/rgen/instantiator/nodebased_xml_instantiator.rb', line 66 def initialize(env) super @env = env @stack = [] end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class RGen::Instantiator::AbstractInstantiator
Class Method Details
.prune_level ⇒ Object
:nodoc:
23 24 25 |
# File 'lib/rgen/instantiator/nodebased_xml_instantiator.rb', line 23 def prune_level # :nodoc: @prune_level ||= 0 end |
.set_prune_level(level) ⇒ Object
The prune level is the number of parent/children associations which is kept when the instantiator ascents the XML tree. If the level is 2, information for the node’s children and the childrens’ children will be available as an XMLNodeDescriptor object. If the level is 0 no pruning will take place, i.e. the whole information is kept until the end of the instantiation process. 0 is default.
19 20 21 |
# File 'lib/rgen/instantiator/nodebased_xml_instantiator.rb', line 19 def set_prune_level(level) @prune_level = level end |
Instance Method Details
#end_element ⇒ Object
95 96 97 98 99 |
# File 'lib/rgen/instantiator/nodebased_xml_instantiator.rb', line 95 def end_element node = @stack.pop on_ascent(node) prune_children(node, self.class.prune_level - 1) if self.class.prune_level > 0 end |
#instantiate(text) ⇒ Object
77 78 79 80 |
# File 'lib/rgen/instantiator/nodebased_xml_instantiator.rb', line 77 def instantiate(text) parse(text) resolve end |
#instantiate_file(file) ⇒ Object
72 73 74 75 |
# File 'lib/rgen/instantiator/nodebased_xml_instantiator.rb', line 72 def instantiate_file(file) File.open(file) { |f| parse(f.read)} resolve end |
#namespaces ⇒ Object
120 121 122 |
# File 'lib/rgen/instantiator/nodebased_xml_instantiator.rb', line 120 def namespaces @visitor.namespaces if @visitor end |
#on_ascent(node) ⇒ Object
This method is called when the XML parser goes up the tree. An XMLNodeDescriptor node
describes the current node. Implementing classes must overwrite this method.
116 117 118 |
# File 'lib/rgen/instantiator/nodebased_xml_instantiator.rb', line 116 def on_ascent(node) raise "Overwrite this method !" end |
#on_chardata(str) ⇒ Object
101 102 103 104 |
# File 'lib/rgen/instantiator/nodebased_xml_instantiator.rb', line 101 def on_chardata(str) node = @stack.last node.chardata << str end |
#on_descent(node) ⇒ Object
This method is called when the XML parser goes down the tree. An XMLNodeDescriptor node
describes the current node. Implementing classes must overwrite this method.
109 110 111 |
# File 'lib/rgen/instantiator/nodebased_xml_instantiator.rb', line 109 def on_descent(node) raise "Overwrite this method !" end |
#parse(src) ⇒ Object
82 83 84 85 86 87 |
# File 'lib/rgen/instantiator/nodebased_xml_instantiator.rb', line 82 def parse(src) @visitor = Visitor.new(self) parser = Nokogiri::XML::SAX::Parser.new(@visitor) parser.parse(src) @visitor = nil end |
#start_element(ns, qtag, prefix, tag, attributes) ⇒ Object
89 90 91 92 93 |
# File 'lib/rgen/instantiator/nodebased_xml_instantiator.rb', line 89 def start_element(ns, qtag, prefix, tag, attributes) node = XMLNodeDescriptor.new(ns, qtag, prefix, tag, @stack[-1], [], attributes) @stack.push node on_descent(node) end |