Class: XMLBuilder::PathParser::Element

Inherits:
Object
  • Object
show all
Defined in:
lib/ec2/amitools/xmlbuilder.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, index) ⇒ Element

Returns a new instance of Element.



161
162
163
164
# File 'lib/ec2/amitools/xmlbuilder.rb', line 161

def initialize(name, index)
  @name = name
  @index = index
end

Instance Attribute Details

#indexObject (readonly)

Returns the value of attribute index.



159
160
161
# File 'lib/ec2/amitools/xmlbuilder.rb', line 159

def index
  @index
end

#nameObject (readonly)

Returns the value of attribute name.



158
159
160
# File 'lib/ec2/amitools/xmlbuilder.rb', line 158

def name
  @name
end

Instance Method Details

#assign_visit(rexml_node, value) ⇒ Object



180
181
182
183
184
185
186
187
188
189
190
# File 'lib/ec2/amitools/xmlbuilder.rb', line 180

def assign_visit(rexml_node, value)
  if value.is_a?(String)
    rexml_node.text = value
  elsif value.is_a?(REXML::Element)
    value.name = rexml_node.name
    raise "Node #{rexml_node.name} does not have a parent node" if rexml_node.parent.nil?
    rexml_node.parent.replace_child(rexml_node, value)
  else
    raise 'Can only assign a String or a REXML::Element to an element'
  end
end

#retrieve_visit(rexml_node) ⇒ Object



192
193
194
# File 'lib/ec2/amitools/xmlbuilder.rb', line 192

def retrieve_visit(rexml_node)
  rexml_node
end

#walk_visit(rexml_node) ⇒ Object

Move one element down in the dom



167
168
169
170
171
172
173
174
175
176
177
178
# File 'lib/ec2/amitools/xmlbuilder.rb', line 167

def walk_visit(rexml_node)
  elements = rexml_node.get_elements(name)
  raise "Invalid index #{index} for element #{@name}" if @index > elements.length
  # Create a node if it doesn't exist
  if @index == elements.length
    new_element = REXML::Element.new(@name)
    rexml_node.add_element(new_element)
    new_element
  else
    elements[@index]
  end
end