# REXML::Parent (Class)

In: | rexml/parent.rb
Parent: | Child

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

<< [] []= add children deep_clone delete delete_at delete_if each each_child each_index index insert_after insert_before new parent? push replace_child size to_a unshift

## Included Modules

Enumerable

## Public Class methods

new(parent=nil)

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

[Source]

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

## Public Instance methods

add( object )

[Source]

    # File rexml/parent.rb, line 17
                    def add( object )
                            #puts "PARENT GOTS #{size} CHILDREN"

                            object.parent = self
                            @children << object
                            #puts "PARENT NOW GOTS #{size} CHILDREN"

                            object
                    end

push( object )

Alias for add

<<( object )

Alias for push

unshift( object )

[Source]

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

delete( object )

[Source]

    # File rexml/parent.rb, line 33
                    def delete( object )
                            return unless @children.include? object
                            @children.delete object
                            object.parent = nil
                    end

each(&block)

[Source]

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

delete_if( &block )

[Source]

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

delete_at( index )

[Source]

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

each_index( &block )

[Source]

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

[]( index )

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

[Source]

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

each_child(&block)

Alias for each

[]=( *args )

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]

    # File rexml/parent.rb, line 70
                    def []=( *args )
                            args[-1].parent = self
                            @children[*args[0..-2]] = args[-1]
                    end

insert_before( child1, child2 )

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]

    # 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

insert_after( child1, child2 )

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]

    # 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

to_a()

[Source]

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

index( child )

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]

    # File rexml/parent.rb, line 123
                    def index( child )
                            count = -1
                            @children.find { |i| count += 1 ; i.hash == child.hash }
                            count
                    end

size()

@return the number of children of this parent

[Source]

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

replace_child( to_replace, replacement )

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]

    # File rexml/parent.rb, line 138
                    def replace_child( to_replace, replacement )
                            ind = @children.index( to_replace )
                            to_replace.parent = nil
                            @children[ind,0] = replacement
                            replacement.parent = self
                    end

deep_clone()

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

[Source]

    # File rexml/parent.rb, line 147
                    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

children()

Alias for to_a

parent?()

[Source]

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

[Validate]