module MSS::Core::XML::FrameStack
@api private
Public Class Methods
new(rules)
click to toggle source
@param [Hash] rules A hash of parser rules. These
rules are typically generated by an {XML::Grammar}.
# File lib/mss/core/xml/frame_stack.rb, line 22 def initialize rules @frame = RootFrame.new(rules) end
Public Instance Methods
attributes(attributes)
click to toggle source
Increase the frame stack level by one by treating xml element attributes as nested elements. @param [Hash] attributes A hash of attributes names to values. @return [nil]
# File lib/mss/core/xml/frame_stack.rb, line 53 def attributes attributes attributes.each_pair do |attr_name, attr_value| attr_frame = @frame.build_child_frame(attr_name) attr_frame.add_text(attr_value) @frame.consume_child_frame(attr_frame) end nil end
end_element(*ignored)
click to toggle source
Pops the top frame off the stack. When closing frames their final value is computed. @overload end_element
@return [nil]
# File lib/mss/core/xml/frame_stack.rb, line 66 def end_element *ignored parent = @frame.parent_frame child = @frame parent.consume_child_frame(child) @frame = @frame.parent_frame nil end
parse(xml)
click to toggle source
Parses the xml string and returns a hash with the resutls. @param [String] xml @return [Hash]
# File lib/mss/core/xml/frame_stack.rb, line 34 def parse xml sax_parse(xml) @frame.value end
set_text(text)
click to toggle source
Adds text to the current frame. Frames that only contain text and no child elements are leaf nodes and have raw string values.
# File lib/mss/core/xml/frame_stack.rb, line 77 def set_text text @frame.add_text(text) if @frame end
start_element(element_name, attributes = {})
click to toggle source
Increase the frame stack level by one. @param [String] element_name The name of the xml opening tag. @param [Hash] attributes A hash of xml element attributes. @return [nil]
# File lib/mss/core/xml/frame_stack.rb, line 43 def start_element element_name, attributes = {} @frame = @frame.build_child_frame(element_name) self.attributes(attributes) nil end
Protected Instance Methods
sax_parse(xml)
click to toggle source
# File lib/mss/core/xml/frame_stack.rb, line 26 def sax_parse xml raise NotImplementedError end