# class REXML::Parent

A parent has children, and has methods for accessing them. The `Parent` class is never encountered except as the superclass for some other object.

### Public Class Methods

new(parent=nil) click to toggle source

Constructor @param parent if supplied, will be set as the parent of this object

Calls superclass method `REXML::Child::new`

    # File lib/rexml/parent.rb, line 13
    def initialize parent=nil
      super(parent)
      @children = []
    end

### Public Instance Methods

<<( object )
Alias for: push
[]( index ) click to toggle source

Fetches a child at a given index @param index the `Integer` index of the child to fetch

    # File lib/rexml/parent.rb, line 57
    def []( index )
      @children[index]
    end

[]=( *args ) click to toggle source

`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 lib/rexml/parent.rb, line 70
    def []=( *args )
      args[-1].parent = self
      @children[*args[0..-2]] = args[-1]
    end

add( object ) click to toggle source

    # File lib/rexml/parent.rb, line 18
    def add( object )
      object.parent = self
      @children << object
      object
    end

Also aliased as: push
children()
Alias for: to_a
deep_clone() click to toggle source

Deeply clones this object. This creates a complete duplicate of this `Parent`, including all descendants.

    # File lib/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

delete( object ) click to toggle source

    # File lib/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

delete_at( index ) click to toggle source

    # File lib/rexml/parent.rb, line 47
    def delete_at( index )
      @children.delete_at index
    end

delete_if( &block ) click to toggle source

    # File lib/rexml/parent.rb, line 43
    def delete_if( &block )
      @children.delete_if(&block)
    end

each(&block) click to toggle source

    # File lib/rexml/parent.rb, line 39
    def each(&block)
      @children.each(&block)
    end

Also aliased as: each_child
each_child(&block)
Alias for: each
each_index( &block ) click to toggle source

    # File lib/rexml/parent.rb, line 51
    def each_index( &block )
      @children.each_index(&block)
    end

index( child ) click to toggle source

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 lib/rexml/parent.rb, line 123
    def index( child )
      count = -1
      @children.find { |i| count += 1 ; i.hash == child.hash }
      count
    end

insert_after( child1, child2 ) click to toggle source

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 lib/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

insert_before( child1, child2 ) click to toggle source

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 lib/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

length()
Alias for: size
parent?() click to toggle source

    # File lib/rexml/parent.rb, line 162
    def parent?
      true
    end

push( object )
Also aliased as: <<
Alias for: add
replace_child( to_replace, replacement ) click to toggle source

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 lib/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

size() click to toggle source

@return the number of children of this parent

    # File lib/rexml/parent.rb, line 130
    def size
      @children.size
    end

Also aliased as: length
to_a() click to toggle source

    # File lib/rexml/parent.rb, line 115
    def to_a
      @children.dup
    end

Also aliased as: children
unshift( object ) click to toggle source

    # File lib/rexml/parent.rb, line 27
    def unshift( object )
      object.parent = self
      @children.unshift object
    end