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
12 13 14 15 |
# File 'lib/rexml/parent.rb', line 12 def initialize parent=nil super(parent) @children = [] end |
Instance Method Details
#[](index) ⇒ Object
Fetches a child at a given index
56 57 58 |
# File 'lib/rexml/parent.rb', line 56 def []( index ) @children[index] end |
#[]=(*args) ⇒ Object
Set an index entry. See Array.[]=
69 70 71 72 |
# File 'lib/rexml/parent.rb', line 69 def []=( *args ) args[-1].parent = self @children[*args[0..-2]] = args[-1] end |
#add(object) ⇒ Object Also known as: push
17 18 19 20 21 |
# File 'lib/rexml/parent.rb', line 17 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.
147 148 149 150 151 152 153 154 155 156 157 |
# 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) ⇒ Object
31 32 33 34 35 36 |
# 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) ⇒ Object
46 47 48 |
# File 'lib/rexml/parent.rb', line 46 def delete_at( index ) @children.delete_at index end |
#delete_if(&block) ⇒ Object
42 43 44 |
# File 'lib/rexml/parent.rb', line 42 def delete_if( &block ) @children.delete_if(&block) end |
#each(&block) ⇒ Object Also known as: each_child
38 39 40 |
# File 'lib/rexml/parent.rb', line 38 def each(&block) @children.each(&block) end |
#each_index(&block) ⇒ Object
50 51 52 |
# 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.
122 123 124 125 126 |
# 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.
101 102 103 104 105 106 107 108 109 110 111 112 |
# 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.
81 82 83 84 85 86 87 88 89 90 91 92 |
# 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 |
#parent? ⇒ Boolean
161 162 163 |
# File 'lib/rexml/parent.rb', line 161 def parent? true end |
#replace_child(to_replace, replacement) ⇒ Object
Replaces one child with another, making sure the nodelist is correct Child)
139 140 141 142 143 |
# 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
Returns the number of children of this parent.
129 130 131 |
# File 'lib/rexml/parent.rb', line 129 def size @children.size end |
#to_a ⇒ Object Also known as: children
114 115 116 |
# File 'lib/rexml/parent.rb', line 114 def to_a @children.dup end |
#unshift(object) ⇒ Object
26 27 28 29 |
# File 'lib/rexml/parent.rb', line 26 def unshift( object ) object.parent = self @children.unshift object end |