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
58 59 60 |
# File 'lib/rexml/parent.rb', line 58 def []( index ) @children[index] end |
#[]=(*args) ⇒ Object
Set an index entry. See Array.[]=
71 72 73 74 |
# File 'lib/rexml/parent.rb', line 71 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 22 23 |
# File 'lib/rexml/parent.rb', line 17 def add( object ) #puts "PARENT GOTS #{size} CHILDREN" object.parent = self @children << object #puts "PARENT NOW GOTS #{size} CHILDREN" object end |
#deep_clone ⇒ Object
Deeply clones this object. This creates a complete duplicate of this Parent, including all descendants.
149 150 151 152 153 154 155 156 157 158 159 |
# File 'lib/rexml/parent.rb', line 149 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
33 34 35 36 37 38 |
# File 'lib/rexml/parent.rb', line 33 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
48 49 50 |
# File 'lib/rexml/parent.rb', line 48 def delete_at( index ) @children.delete_at index end |
#delete_if(&block) ⇒ Object
44 45 46 |
# File 'lib/rexml/parent.rb', line 44 def delete_if( &block ) @children.delete_if(&block) end |
#each(&block) ⇒ Object Also known as: each_child
40 41 42 |
# File 'lib/rexml/parent.rb', line 40 def each(&block) @children.each(&block) end |
#each_index(&block) ⇒ Object
52 53 54 |
# File 'lib/rexml/parent.rb', line 52 def each_index( &block ) @children.each_index(&block) end |
#index(child) ⇒ Object
Fetches the index of a given child of this parent.
124 125 126 127 128 |
# File 'lib/rexml/parent.rb', line 124 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.
103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/rexml/parent.rb', line 103 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.
83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/rexml/parent.rb', line 83 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
163 164 165 |
# File 'lib/rexml/parent.rb', line 163 def parent? true end |
#replace_child(to_replace, replacement) ⇒ Object
Replaces one child with another, making sure the nodelist is correct Child)
141 142 143 144 145 |
# File 'lib/rexml/parent.rb', line 141 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.
131 132 133 |
# File 'lib/rexml/parent.rb', line 131 def size @children.size end |
#to_a ⇒ Object Also known as: children
116 117 118 |
# File 'lib/rexml/parent.rb', line 116 def to_a @children.dup end |
#unshift(object) ⇒ Object
28 29 30 31 |
# File 'lib/rexml/parent.rb', line 28 def unshift( object ) object.parent = self @children.unshift object end |