123456789_123456789_123456789_123456789_123456789_

Class: REXML::Child

Relationships & Source Files
Extension / Inclusion / Inheritance Descendants
Subclasses:
Super Chains via Extension / Inclusion / Inheritance
Instance Chain:
self, Node
Inherits: Object
Defined in: lib/rexml/child.rb

Overview

A Child object is something contained by a parent, and this class contains methods to support that. Most user code will not use this class directly.

Class Method Summary

Instance Attribute Summary

Node - Included

Instance Method Summary

  • #bytes

    This doesn't yet handle encodings.

  • #document
    Returns

    the document this child belongs to, or nil if this child belongs to no document.

  • #remove

    Removes this child from the parent.

  • #replace_with(child)

    Replaces this object with another object.

Node - Included

#each_recursive

Visit all subnodes of self recursively.

#find_first_recursive

Find (and return) first subnode (recursively) for which the block evaluates to true.

#indent,
#index_in_parent

Returns the position that self holds in its parent's array, indexed from 1.

#next_sibling_node, #previous_sibling_node,
#to_s
indent

Constructor Details

.new(parent = nil) ⇒ Child

Constructor. Any inheritors of this class should call super to make sure this method is called.

parent

if supplied, the parent of this child will be set to the supplied value, and self will be added to the parent

[ GitHub ]

  
# File 'lib/rexml/child.rb', line 17

def initialize( parent = nil )
  @parent = nil
  # Declare @parent, but don't define it.  The next line sets the
  # parent.
  parent.add( self ) if parent
end

Instance Attribute Details

#next_sibling (rw)

[ GitHub ]

  
# File 'lib/rexml/child.rb', line 57

alias :next_sibling :next_sibling_node

#next_sibling=(other) (rw)

Sets the next sibling of this child. This can be used to insert a child after some other child.

a = Element.new("a")
b = a.add_element("b")
c = Element.new("c")
b.next_sibling = c
# => <a><b/><c/></a>
[ GitHub ]

  
# File 'lib/rexml/child.rb', line 67

def next_sibling=( other )
  parent.insert_after self, other
end

#parent (rw)

The Parent of this object

[ GitHub ]

  
# File 'lib/rexml/child.rb', line 10

attr_reader :parent         # The Parent of this object

#parent=(other) (rw)

Sets the parent of this child to the supplied argument.

other

Must be a Parent object. If this object is the same object as the existing parent of this child, no action is taken. Otherwise, this child is removed from the current parent (if one exists), and is added to the new parent.

Returns

The parent added

[ GitHub ]

  
# File 'lib/rexml/child.rb', line 51

def parent=( other )
  return @parent if @parent == other
  @parent.delete self if defined? @parent and @parent
  @parent = other
end

#previous_sibling (rw)

[ GitHub ]

  
# File 'lib/rexml/child.rb', line 58

alias :previous_sibling :previous_sibling_node

#previous_sibling=(other) (rw)

Sets the previous sibling of this child. This can be used to insert a child before some other child.

a = Element.new("a")
b = a.add_element("b")
c = Element.new("c")
b.previous_sibling = c
# => <a><b/><c/></a>
[ GitHub ]

  
# File 'lib/rexml/child.rb', line 78

def previous_sibling=(other)
  parent.insert_before self, other
end

Instance Method Details

#bytes

This doesn't yet handle encodings

[ GitHub ]

  
# File 'lib/rexml/child.rb', line 90

def bytes
  document.encoding

  to_s
end

#document

Returns

the document this child belongs to, or nil if this child

belongs to no document

[ GitHub ]

  
# File 'lib/rexml/child.rb', line 84

def document
  return parent.document unless parent.nil?
  nil
end

#remove

Removes this child from the parent.

Returns

self

[ GitHub ]

  
# File 'lib/rexml/child.rb', line 36

def remove
  unless @parent.nil?
    @parent.delete self
  end
  self
end

#replace_with(child)

Replaces this object with another object. Basically, calls Parent#replace_child

Returns

self

[ GitHub ]

  
# File 'lib/rexml/child.rb', line 28

def replace_with( child )
  @parent.replace_child( self, child )
  self
end