File: rexml/node.rb

Overview
Module Structure
Code

Overview

Module Structure

  module: <Toplevel Module>
  module: REXML#5
  module: Node#8
has properties
method: next_sibling_node #10
method: previous_sibling_node #16
method: to_s #26
method: indent #38
method: parent? #47
method: each_recursive / 1 #53
method: find_first_recursive / 1 #62
method: index_in_parent #71

Code

   1  require "rexml/parseexception"
   2  require "rexml/formatters/pretty"
   3  require "rexml/formatters/default"
   4 
   5  module REXML
   6    # Represents a node in the tree.  Nodes are never encountered except as
   7    # superclasses of other objects.  Nodes have siblings.
   8    module Node
   9      # @return the next sibling (nil if unset)
  10      def next_sibling_node
  11        return nil if @parent.nil?
  12        @parent[ @parent.index(self) + 1 ]
  13      end
  14 
  15      # @return the previous sibling (nil if unset)
  16      def previous_sibling_node
  17        return nil if @parent.nil?
  18        ind = @parent.index(self)
  19        return nil if ind == 0
  20        @parent[ ind - 1 ]
  21      end
  22 
  23      # indent::
  24      #   *DEPRECATED* This parameter is now ignored.  See the formatters in the
  25      #   REXML::Formatters package for changing the output style.
  26      def to_s indent=nil
  27        unless indent.nil?
  28          Kernel.warn( "#{self.class.name}.to_s(indent) parameter is deprecated" )
  29          f = REXML::Formatters::Pretty.new( indent )
  30          f.write( self, rv = "" )
  31        else
  32          f = REXML::Formatters::Default.new
  33          f.write( self, rv = "" )
  34        end
  35        return rv
  36      end
  37 
  38      def indent to, ind
  39        if @parent and @parent.context and not @parent.context[:indentstyle].nil? then
  40          indentstyle = @parent.context[:indentstyle]
  41        else
  42          indentstyle = '  '
  43        end
  44        to << indentstyle*ind unless ind<1
  45      end
  46 
  47      def parent?
  48        false;
  49      end
  50 
  51 
  52      # Visit all subnodes of +self+ recursively
  53      def each_recursive(&block) # :yields: node
  54        self.elements.each {|node|
  55          block.call(node)
  56          node.each_recursive(&block)
  57        }
  58      end
  59 
  60      # Find (and return) first subnode (recursively) for which the block 
  61      # evaluates to true. Returns +nil+ if none was found.
  62      def find_first_recursive(&block) # :yields: node
  63        each_recursive {|node|
  64          return node if block.call(node)
  65        }
  66        return nil
  67      end
  68 
  69      # Returns the position that +self+ holds in its parent's array, indexed
  70      # from 1.
  71      def index_in_parent
  72        parent.index(self)+1
  73      end
  74    end
  75  end