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