A parent has children, and has methods for accessing them.  The Parent class is never encountered except as the
superclass for some other object.
     
  
  
  
  
  
  
    
    Methods
    
      
        - #
- 
          
        
- A
- 
          
        
- C
- 
          
        
- D
- 
          
        
- E
- 
          
        
- I
- 
          
        
- L
- 
          
        
- N
- 
          
        
- P
- 
          
        
- R
- 
          
        
- S
- 
          
        
- T
- 
          
        
- U
- 
          
        
Included Modules
    
  
  
    
    
    
    
    
    
      Class Public methods
      
        
          
          
          
            
              Constructor @param parent if supplied, will be set as the parent of this
object
             
          
          
          
          
          
          
            
            
              
              
                Source: 
                show
                
                  | on GitHub
                
              
              
                
def initialize parent=nil
  super(parent)
  @children = []
end
               
             
            
           
                  
      Instance Public methods
      
        
        
        
          
          
          
            
              Fetches a child at a given index @param index the Integer index of the child to fetch
             
          
          
          
          
          
          
            
            
            
           
        
        
          
          
          
            
              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)
             
          
          
          
          
          
          
            
            
              
              
                Source: 
                show
                
                  | on GitHub
                
              
              
                
def []=( *args )
  args[-1].parent = self
  @children[*args[0..-2]] = args[-1]
end
               
             
            
           
        
        
          
          
          
            
              
            
          
          
          
            
          
          
          
          
            
            
              
              
                Source: 
                show
                
                  | on GitHub
                
              
              
                
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.
             
          
          
          
          
          
          
            
            
              
              
                Source: 
                show
                
                  | on GitHub
                
              
              
                
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
               
             
            
           
        
        
          
          
          
            
              
            
          
          
          
          
          
          
            
            
              
              
                Source: 
                show
                
                  | on GitHub
                
              
              
                
def delete( object )
  found = false
  @children.delete_if {|c| c.equal?(object) and found = true }
  object.parent = nil if found
  found ? object : nil
end
               
             
            
           
        
        
          
          
          
            
              
            
          
          
          
          
          
          
            
            
              
              
                Source: 
                show
                
                  | on GitHub
                
              
              
                
def delete_at( index )
  @children.delete_at index
end
               
             
            
           
        
        
          
          
          
            
              
            
          
          
          
          
          
          
            
            
              
              
                Source: 
                show
                
                  | on GitHub
                
              
              
                
def delete_if( &block )
  @children.delete_if(&block)
end
               
             
            
           
        
        
          
          
          
            
              
            
          
          
          
            
          
          
          
          
            
            
              
              
                Source: 
                show
                
                  | on GitHub
                
              
              
                
def each(&block)
  @children.each(&block)
end
               
             
            
           
        
        
        
        
          
            
              each_index( &block )
            
            
Link
           
          
          
            
              
            
          
          
          
          
          
          
            
            
              
              
                Source: 
                show
                
                  | on GitHub
                
              
              
                
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.
             
          
          
          
          
          
          
            
            
              
              
                Source: 
                show
                
                  | on GitHub
                
              
              
                
def index( child )
  count = -1
  @children.find { |i| count += 1 ; i.hash == child.hash }
  count
end
               
             
            
           
        
        
          
            
              insert_after( child1, child2 )
            
            
Link
           
          
          
            
              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)
             
          
          
          
          
          
          
            
            
              
              
                Source: 
                show
                
                  | on GitHub
                
              
              
                
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
               
             
            
           
        
        
          
            
              insert_before( child1, child2 )
            
            
Link
           
          
          
            
              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)
             
          
          
          
          
          
          
            
            
              
              
                Source: 
                show
                
                  | on GitHub
                
              
              
                
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
               
             
            
           
        
        
        
        
        
        
        
        
          
            
              replace_child( to_replace, replacement )
            
            
Link
           
          
          
            
              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)
             
          
          
          
          
          
          
            
            
              
              
                Source: 
                show
                
                  | on GitHub
                
              
              
                
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
             
          
          
          
            
          
          
          
          
            
            
            
           
        
        
        
        
          
          
          
            
              
            
          
          
          
          
          
          
            
            
              
              
                Source: 
                show
                
                  | on GitHub
                
              
              
                
def unshift( object )
  object.parent = self
  @children.unshift object
end