A parent has children, and has methods for accessing them. The Parent
class is never encountered except as the superclass for some other object.
Fetches a child at a given index @param index the Integer
index of the child to fetch
# File rexml/parent.rb, line 57 def []( index ) @children[index] end
Set an index entry. See Array.[]= @param index the index of the element to set @param opt either the object to set, or an Integer
length @param child if opt is an Integer
, this is the child to set @return the parent (self)
# File rexml/parent.rb, line 70 def []=( *args ) args[-1].parent = self @children[*args[0..-2]] = args[-1] end
# File rexml/parent.rb, line 18 def add( object ) object.parent = self @children << object object end
Deeply clones this object. This creates a complete duplicate of this Parent
, including all descendants.
# File rexml/parent.rb, line 148 def deep_clone cl = clone() each do |child| if child.kind_of? Parent cl << child.deep_clone else cl << child.clone end end cl end
# File rexml/parent.rb, line 32 def delete( object ) found = false @children.delete_if {|c| c.equal?(object) and found = true } object.parent = nil if found found ? object : nil end
# File rexml/parent.rb, line 47 def delete_at( index ) @children.delete_at index end
# File rexml/parent.rb, line 43 def delete_if( &block ) @children.delete_if(&block) end
# File rexml/parent.rb, line 39 def each(&block) @children.each(&block) end
# File rexml/parent.rb, line 51 def each_index( &block ) @children.each_index(&block) end
Fetches the index of a given child @param child the child to get the index of @return the index of the child, or nil if the object is not a child of this parent.
# File rexml/parent.rb, line 123 def index( child ) count = -1 @children.find { |i| count += 1 ; i.hash == child.hash } count end
Inserts an child after another child @param child1 this is either an xpath or an Element
. If an Element
, child2 will be inserted after child1 in the child list of the parent. If an xpath, child2 will be inserted after the first child to match the xpath. @param child2 the child to insert @return the parent (self)
# File rexml/parent.rb, line 102 def insert_after( child1, child2 ) if child1.kind_of? String child1 = XPath.first( self, child1 ) child1.parent.insert_after child1, child2 else ind = index(child1)+1 child2.parent.delete(child2) if child2.parent @children[ind,0] = child2 child2.parent = self end self end
Inserts an child before another child @param child1 this is either an xpath or an Element
. If an Element
, child2 will be inserted before child1 in the child list of the parent. If an xpath, child2 will be inserted before the first child to match the xpath. @param child2 the child to insert @return the parent (self)
# File rexml/parent.rb, line 82 def insert_before( child1, child2 ) if child1.kind_of? String child1 = XPath.first( self, child1 ) child1.parent.insert_before child1, child2 else ind = index(child1) child2.parent.delete(child2) if child2.parent @children[ind,0] = child2 child2.parent = self end self end
Replaces one child with another, making sure the nodelist is correct @param to_replace the child to replace (must be a Child
) @param replacement the child to insert into the nodelist (must be a Child
)
# File rexml/parent.rb, line 140 def replace_child( to_replace, replacement ) @children.map! {|c| c.equal?( to_replace ) ? replacement : c } to_replace.parent = nil replacement.parent = self end
@return the number of children of this parent
# File rexml/parent.rb, line 130 def size @children.size end
# File rexml/parent.rb, line 115 def to_a @children.dup end