Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more

In Files

  • rdoc/include.rb

Class/Module Index [+]



A Module include in a class with #include



Name of included module

Public Class Methods

new(name, comment) click to toggle source

Creates a new Include for name with comment

               # File rdoc/include.rb, line 16
def initialize(name, comment)
  @name = name
  self.comment = comment
  @module = nil   # cache for module if found

Public Instance Methods

<=>(other) click to toggle source

Includes are sorted by name

               # File rdoc/include.rb, line 26
def <=> other
  return unless self.class === other

  name <=> other.name
full_name() click to toggle source

Full name based on module

               # File rdoc/include.rb, line 40
def full_name
  m = self.module
  RDoc::ClassModule === m ? m.full_name : @name
module() click to toggle source

Attempts to locate the included module object. Returns the name if not known.

The scoping rules of Ruby to resolve the name of an included module are:

  • first look into the children of the current context;

  • if not found, look into the children of included modules, in reverse inclusion order;

  • if still not found, go up the hierarchy of names.

               # File rdoc/include.rb, line 63
def module
  return @module if @module

  # search the current context
  return @name unless parent
  full_name = parent.child_name(@name)
  @module = RDoc::TopLevel.modules_hash[full_name]
  return @module if @module
  return @name if @name =~ /^::/

  # search the includes before this one, in reverse order
  searched = parent.includes.take_while { |i| i != self }.reverse
  searched.each do |i|
    inc = i.module
    next if String === inc
    full_name = inc.child_name(@name)
    @module = RDoc::TopLevel.modules_hash[full_name]
    return @module if @module

  # go up the hierarchy of names
  p = parent.parent
  while p
    full_name = p.child_name(@name)
    @module = RDoc::TopLevel.modules_hash[full_name]
    return @module if @module
    p = p.parent