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