A parent has children, and has methods for accessing them. The Parent
class is never encountered except as the superclass for some other object.
# File tmp/rubies/ruby-2.7.6/lib/rexml/parent.rb, line 13
def initialize parent=nil
super(parent)
@children = []
end
Constructor @param parent if supplied, will be set as the parent of this object
# File tmp/rubies/ruby-2.7.6/lib/rexml/parent.rb, line 57
def []( index )
@children[index]
end
Fetches a child at a given index @param index the Integer
index of the child to fetch
# File tmp/rubies/ruby-2.7.6/lib/rexml/parent.rb, line 70
def []=( *args )
args[-1].parent = self
@children[*args[0..-2]] = args[-1]
end
# File tmp/rubies/ruby-2.7.6/lib/rexml/parent.rb, line 18
def add( object )
object.parent = self
@children << object
object
end
# File tmp/rubies/ruby-2.7.6/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
Deeply clones this object. This creates a complete duplicate of this Parent
, including all descendants.
# File tmp/rubies/ruby-2.7.6/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
# File tmp/rubies/ruby-2.7.6/lib/rexml/parent.rb, line 47
def delete_at( index )
@children.delete_at index
end
# File tmp/rubies/ruby-2.7.6/lib/rexml/parent.rb, line 43
def delete_if( &block )
@children.delete_if(&block)
end
# File tmp/rubies/ruby-2.7.6/lib/rexml/parent.rb, line 39
def each(&block)
@children.each(&block)
end
# File tmp/rubies/ruby-2.7.6/lib/rexml/parent.rb, line 51
def each_index( &block )
@children.each_index(&block)
end
# File tmp/rubies/ruby-2.7.6/lib/rexml/parent.rb, line 123
def index( child )
count = -1
@children.find { |i| count += 1 ; i.hash == child.hash }
count
end
Fetches the index of a given child @param child the child to get the index of @return the index of the child, or nil if the object is not a child of this parent.
# File tmp/rubies/ruby-2.7.6/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
Inserts an child after another child @param child1 this is either an xpath or an Element
. If an Element
, 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. @param child2 the child to insert @return the parent (self)
# File tmp/rubies/ruby-2.7.6/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
Inserts an child before another child @param child1 this is either an xpath or an Element
. If an Element
, 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. @param child2 the child to insert @return the parent (self)
# File tmp/rubies/ruby-2.7.6/lib/rexml/parent.rb, line 162
def parent?
true
end
# File tmp/rubies/ruby-2.7.6/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
# File tmp/rubies/ruby-2.7.6/lib/rexml/parent.rb, line 130
def size
@children.size
end
@return the number of children of this parent
# File tmp/rubies/ruby-2.7.6/lib/rexml/parent.rb, line 115
def to_a
@children.dup
end
# File tmp/rubies/ruby-2.7.6/lib/rexml/parent.rb, line 27
def unshift( object )
object.parent = self
@children.unshift object
end