123456789_123456789_123456789_123456789_123456789_

Class: REXML::Parent

Relationships & Source Files
Extension / Inclusion / Inheritance Descendants
Subclasses:
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
self, Child
Instance Chain:
self, Enumerable, Child, Node
Inherits: REXML::Child
Defined in: lib/rexml/parent.rb

Overview

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

Class Method Summary

Child - Inherited

.new

Constructor.

Instance Attribute Summary

Child - Inherited

#next_sibling
#next_sibling=

Sets the next sibling of this child.

#parent

The Parent of this object.

#parent=

Sets the parent of this child to the supplied argument.

#previous_sibling
#previous_sibling=

Sets the previous sibling of this child.

Node - Included

Instance Method Summary

Child - Inherited

#bytes

This doesn’t yet handle encodings.

#document
Returns

the document this child belongs to, or nil if this child belongs to no document.

#remove

Removes this child from the parent.

#replace_with

Replaces this object with another object.

Node - Included

#each_recursive

Visit all subnodes of self recursively.

#find_first_recursive

Find (and return) first subnode (recursively) for which the block evaluates to true.

#indent,
#index_in_parent

Returns the position that self holds in its parent’s array, indexed from 1.

#next_sibling_node, #previous_sibling_node,
#to_s
indent

Constructor Details

.new(parent = nil) ⇒ Parent

Constructor

Parameters:

  • parent (defaults to: nil)

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

[ GitHub ]

  
# File 'lib/rexml/parent.rb', line 13

def initialize parent=nil
  super(parent)
  @children = []
end

Instance Attribute Details

#parent?Boolean (readonly)

[ GitHub ]

  
# File 'lib/rexml/parent.rb', line 162

def parent?
  true
end

Instance Method Details

#<<(object)

Alias for #push.

[ GitHub ]

  
# File 'lib/rexml/parent.rb', line 25

alias :<< :push

#[](index)

Fetches a child at a given index

Parameters:

  • index

    the ::Integer index of the child to fetch

[ GitHub ]

  
# File 'lib/rexml/parent.rb', line 57

def []( index )
  @children[index]
end

#[]=(*args) ⇒ Object

Set an index entry. See Array.[]=

Parameters:

  • index

    the index of the element to set

  • opt

    either the object to set, or an ::Integer length

  • child

    if opt is an ::Integer, this is the child to set

Returns:

  • the parent (self)

[ GitHub ]

  
# File 'lib/rexml/parent.rb', line 70

def []=( *args )
  args[-1].parent = self
  @children[*args[0..-2]] = args[-1]
end

#add(object) Also known as: #push

[ GitHub ]

  
# File 'lib/rexml/parent.rb', line 18

def add( object )
  object.parent = self
  @children << object
  object
end

#children

Alias for #to_a.

[ GitHub ]

  
# File 'lib/rexml/parent.rb', line 160

alias :children :to_a

#deep_clone

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

[ GitHub ]

  
# 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)

[ GitHub ]

  
# 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)

[ GitHub ]

  
# File 'lib/rexml/parent.rb', line 47

def delete_at( index )
  @children.delete_at index
end

#delete_if(&block)

[ GitHub ]

  
# File 'lib/rexml/parent.rb', line 43

def delete_if( &block )
  @children.delete_if(&block)
end

#each(&block) Also known as: #each_child

[ GitHub ]

  
# File 'lib/rexml/parent.rb', line 39

def each(&block)
  @children.each(&block)
end

#each_child(&block)

Alias for #each.

[ GitHub ]

  
# File 'lib/rexml/parent.rb', line 61

alias :each_child :each

#each_index(&block)

[ GitHub ]

  
# File 'lib/rexml/parent.rb', line 51

def each_index( &block )
  @children.each_index(&block)
end

#index(child) ⇒ Object

Fetches the index of a given child of this parent.

Parameters:

  • child

    the child to get the index of

Returns:

  • the index of the child, or nil if the object is not a child

[ GitHub ]

  
# 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) ⇒ Object

Inserts an child after another child 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.

Parameters:

  • child1

    this is either an xpath or an Element. If an Element,

  • child2

    the child to insert

Returns:

  • the parent (self)

[ GitHub ]

  
# 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) ⇒ Object

Inserts an child before another child 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.

Parameters:

  • child1

    this is either an xpath or an Element. If an Element,

  • child2

    the child to insert

Returns:

  • the parent (self)

[ GitHub ]

  
# 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.

[ GitHub ]

  
# File 'lib/rexml/parent.rb', line 134

alias :length :size

#push(object) Also known as: #<<

Alias for #add.

[ GitHub ]

  
# File 'lib/rexml/parent.rb', line 24

alias :push :add

#replace_child(to_replace, replacement)

Replaces one child with another, making sure the nodelist is correct Child)

Parameters:

  • to_replace

    the child to replace (must be a Child)

  • replacement

    the child to insert into the nodelist (must be a

[ GitHub ]

  
# 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

#sizeObject Also known as: #length

Returns:

  • the number of children of this parent

[ GitHub ]

  
# File 'lib/rexml/parent.rb', line 130

def size
  @children.size
end

#to_a Also known as: #children

[ GitHub ]

  
# File 'lib/rexml/parent.rb', line 115

def to_a
  @children.dup
end

#unshift(object)

[ GitHub ]

  
# File 'lib/rexml/parent.rb', line 27

def unshift( object )
  object.parent = self
  @children.unshift object
end