Module: AWS::Core::XML::FrameStack

Included in:
SaxHandlers::LibXML, SaxHandlers::Nokogiri, SaxHandlers::Ox, SaxHandlers::REXML
Defined in:
lib/aws/core/xml/frame_stack.rb

Instance Method Summary collapse

Instance Method Details

#attributes(attributes) ⇒ nil

Increase the frame stack level by one by treating xml element attributes as nested elements.

Parameters:

  • attributes (Hash)

    A hash of attributes names to values.

Returns:

  • (nil)

54
55
56
57
58
59
60
61
# File 'lib/aws/core/xml/frame_stack.rb', line 54

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_elementnil

Pops the top frame off the stack. When closing frames their final value is computed.

Returns:

  • (nil)

67
68
69
70
71
72
73
# File 'lib/aws/core/xml/frame_stack.rb', line 67

def end_element *ignored
  parent = @frame.parent_frame
  child = @frame
  parent.consume_child_frame(child)
  @frame = @frame.parent_frame
  nil
end

#initialize(rules) ⇒ Object

Parameters:

  • rules (Hash)

    A hash of parser rules. These rules are typically generated by an Grammar.


23
24
25
# File 'lib/aws/core/xml/frame_stack.rb', line 23

def initialize rules
  @frame = RootFrame.new(rules)
end

#parse(xml) ⇒ Hash

Parses the xml string and returns a hash with the resutls.

Parameters:

  • xml (String)

Returns:

  • (Hash)

35
36
37
38
# File 'lib/aws/core/xml/frame_stack.rb', line 35

def parse xml
  sax_parse(xml)
  @frame.value
end

#start_element(element_name, attributes = {}) ⇒ nil

Increase the frame stack level by one.

Parameters:

  • element_name (String)

    The name of the xml opening tag.

  • attributes (Hash) (defaults to: {})

    A hash of xml element attributes.

Returns:

  • (nil)

44
45
46
47
48
# File 'lib/aws/core/xml/frame_stack.rb', line 44

def start_element element_name, attributes = {}
  @frame = @frame.build_child_frame(element_name)
  self.attributes(attributes)
  nil
end

#text(text) ⇒ Object

Adds text to the current frame. Frames that only contain text and no child elements are leaf nodes and have raw string values.


78
79
80
# File 'lib/aws/core/xml/frame_stack.rb', line 78

def text text
  @frame.add_text(text) if @frame
end