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 12
def initialize parent=nil super(parent) @children = [] end
Instance Attribute Details
#parent? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'lib/rexml/parent.rb', line 161
def parent? true end
Instance Method Details
#<<(object)
Alias for #push.
# File 'lib/rexml/parent.rb', line 24
alias :<< :push
#[](index)
Fetches a child at a given index
#[]=(*args) ⇒ Object
Set an index entry. See Array.[]=
# File 'lib/rexml/parent.rb', line 69
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 17
def add( object ) object.parent = self @children << object object end
#children
Alias for #to_a.
# File 'lib/rexml/parent.rb', line 159
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 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
#delete(object)
[ GitHub ]# File 'lib/rexml/parent.rb', line 31
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 42
def delete_if( &block ) @children.delete_if(&block) end
#each(&block) Also known as: #each_child
[ GitHub ]# File 'lib/rexml/parent.rb', line 38
def each(&block) @children.each(&block) end
#each_child(&block)
Alias for #each.
# File 'lib/rexml/parent.rb', line 60
alias :each_child :each
#each_index(&block)
[ GitHub ]# File 'lib/rexml/parent.rb', line 50
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 122
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 101
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 81
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 133
alias :length :size
#push(object) Also known as: #<<
Alias for #add.
# File 'lib/rexml/parent.rb', line 23
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 139
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 129
def size @children.size end
#to_a Also known as: #children
[ GitHub ]# File 'lib/rexml/parent.rb', line 114
def to_a @children.dup end
#unshift(object)
[ GitHub ]# File 'lib/rexml/parent.rb', line 26
def unshift( object ) object.parent = self @children.unshift object end