Class: REXML::Parent
| Relationships & Source Files | |
| Extension / Inclusion / Inheritance Descendants | |
| Subclasses: | |
| Super Chains via Extension / Inclusion / Inheritance | |
| Class Chain: 
          self,
           Child | |
| Instance Chain: | |
| 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
Instance Attribute Summary
- #parent? ⇒ Boolean readonly
Child - Inherited
| #next_sibling | Alias for Node#next_sibling_node. | 
| #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 | Alias for Node#previous_sibling_node. | 
| #previous_sibling= | Sets the previous sibling of this child. | 
Node - Included
Instance Method Summary
- 
    
      #<<(object)  
    
    Alias for #push. 
- 
    
      #[](index)  
    
    Fetches a child at a given index. 
- 
    
      #[]=(*args)  ⇒ Object 
    
    Set an index entry. 
- #add(object) (also: #push)
- 
    
      #children  
    
    Alias for #to_a. 
- 
    
      #deep_clone  
    
    Deeply clones this object. 
- #delete(object)
- #delete_at(index)
- #delete_if(&block)
- #each(&block) (also: #each_child)
- 
    
      #each_child(&block)  
    
    Alias for #each. 
- #each_index(&block)
- 
    
      #index(child)  ⇒ Object 
    
    Fetches the index of a given child of this parent. 
- 
    
      #insert_after(child1, child2)  ⇒ Object 
    
    Inserts an child after another child child2 will be inserted after child1 in the child list of the parent. 
- 
    
      #insert_before(child1, child2)  ⇒ Object 
    
    Inserts an child before another child child2 will be inserted before child1 in the child list of the parent. 
- 
    
      #length  
    
    Alias for #size. 
- 
    
      #push(object)  
      (also: #<<)
    
    Alias for #add. 
- 
    
      #replace_child(to_replace, replacement)  
    
    Replaces one child with another, making sure the nodelist is correct Child).
- #size ⇒ Object (also: #length)
- #to_a (also: #children)
- #unshift(object)
Child - Inherited
| #bytes | This doesn’t yet handle encodings. | 
| #document | 
 | 
| #remove | Removes this child from the parent. | 
| #replace_with | Replaces this object with another object. | 
Node - Included
| #each_recursive | Visit all subnodes of  | 
| #find_first_recursive | Find (and return) first subnode (recursively) for which the block evaluates to true. | 
| #indent, | |
| #index_in_parent | Returns the position that  | 
| #next_sibling_node, #previous_sibling_node, | |
| #to_s | 
 | 
Constructor Details
    .new(parent = nil)  ⇒ Parent 
  
Constructor
# 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.
# File 'lib/rexml/parent.rb', line 25
alias :<< :push
#[](index)
Fetches a child at a given index
    #[]=(*args)  ⇒ Object 
  
Set an index entry.  See Array.[]=
# 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.
# 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.
# 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 ]#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.
# 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.
# 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.
# 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.
# 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.
# File 'lib/rexml/parent.rb', line 134
alias :length :size
#push(object) Also known as: #<<
Alias for #add.
# 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)
# 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  ⇒ Object 
    Also known as: #length
  
# 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