Class: REXML::Parent
- Includes:
- Enumerable
- 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.
Instance Attribute Summary
Attributes inherited from Child
Instance Method Summary collapse
-
#[](index) ⇒ Object
Fetches a child at a given index.
-
#[]=(*args) ⇒ Object
Set an index entry.
- #add(object) ⇒ Object (also: #push)
-
#deep_clone ⇒ Object
Deeply clones this object.
- #delete(object) ⇒ Object
- #delete_at(index) ⇒ Object
- #delete_if(&block) ⇒ Object
- #each(&block) ⇒ Object (also: #each_child)
- #each_index(&block) ⇒ Object
-
#index(child) ⇒ Object
Fetches the index of a given child of this parent.
-
#initialize(parent = nil) ⇒ Parent
constructor
Constructor.
-
#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.
- #parent? ⇒ Boolean
-
#replace_child(to_replace, replacement) ⇒ Object
Replaces one child with another, making sure the nodelist is correct Child).
-
#size ⇒ Object
(also: #length)
The number of children of this parent.
- #to_a ⇒ Object (also: #children)
- #unshift(object) ⇒ Object
Methods inherited from Child
#bytes, #document, #next_sibling=, #previous_sibling=, #remove, #replace_with
Methods included from Node
#each_recursive, #find_first_recursive, #indent, #index_in_parent, #next_sibling_node, #previous_sibling_node, #to_s
Constructor Details
#initialize(parent = nil) ⇒ Parent
Constructor
13 14 15 16 |
# File 'lib/rexml/parent.rb', line 13 def initialize parent=nil super(parent) @children = [] end |
Instance Method Details
#[](index) ⇒ Object
Fetches a child at a given index
57 58 59 |
# File 'lib/rexml/parent.rb', line 57 def []( index ) @children[index] end |
#[]=(*args) ⇒ Object
Set an index entry. See Array.[]=
70 71 72 73 |
# File 'lib/rexml/parent.rb', line 70 def []=( *args ) args[-1].parent = self @children[*args[0..-2]] = args[-1] end |
#add(object) ⇒ Object Also known as: push
18 19 20 21 22 |
# File 'lib/rexml/parent.rb', line 18 def add( object ) object.parent = self @children << object object end |
#deep_clone ⇒ Object
Deeply clones this object. This creates a complete duplicate of this Parent, including all descendants.
148 149 150 151 152 153 154 155 156 157 158 |
# 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) ⇒ Object
32 33 34 35 36 37 |
# 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) ⇒ Object
47 48 49 |
# File 'lib/rexml/parent.rb', line 47 def delete_at( index ) @children.delete_at index end |
#delete_if(&block) ⇒ Object
43 44 45 |
# File 'lib/rexml/parent.rb', line 43 def delete_if( &block ) @children.delete_if(&block) end |
#each(&block) ⇒ Object Also known as: each_child
39 40 41 |
# File 'lib/rexml/parent.rb', line 39 def each(&block) @children.each(&block) end |
#each_index(&block) ⇒ Object
51 52 53 |
# 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.
123 124 125 126 127 |
# 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.
102 103 104 105 106 107 108 109 110 111 112 113 |
# 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.
82 83 84 85 86 87 88 89 90 91 92 93 |
# 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 |
#parent? ⇒ Boolean
162 163 164 |
# File 'lib/rexml/parent.rb', line 162 def parent? true end |
#replace_child(to_replace, replacement) ⇒ Object
Replaces one child with another, making sure the nodelist is correct Child)
140 141 142 143 144 |
# 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
Returns the number of children of this parent.
130 131 132 |
# File 'lib/rexml/parent.rb', line 130 def size @children.size end |
#to_a ⇒ Object Also known as: children
115 116 117 |
# File 'lib/rexml/parent.rb', line 115 def to_a @children.dup end |
#unshift(object) ⇒ Object
27 28 29 30 |
# File 'lib/rexml/parent.rb', line 27 def unshift( object ) object.parent = self @children.unshift object end |