Class: RGen::Instantiator::NodebasedXMLInstantiator
Defined Under Namespace
Classes: Visitor, XMLNodeDescriptor
Class Method Summary
collapse
Instance Method Summary
collapse
resolve, resolve_by_id
Constructor Details
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
23
24
25
|
# File 'lib/rgen/instantiator/nodebased_xml_instantiator.rb', line 23
def prune_level
@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
|