A Module include in a class with #include

Methods
#
F
M
N
Attributes
[RW] name

Name of included module

Class Public methods
new(name, comment)

Creates a new Include for name with comment

# File ../ruby/lib/rdoc/include.rb, line 16
def initialize(name, comment)
  super()
  @name = name
  self.comment = comment
  @module = nil   # cache for module if found
end
Instance Public methods
<=>(other)

Includes are sorted by name

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

  name <=> other.name
end
full_name()

Full name based on module

# File ../ruby/lib/rdoc/include.rb, line 40
def full_name
  m = self.module
  RDoc::ClassModule === m ? m.full_name : @name
end
module()

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 ../ruby/lib/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
  end

  # 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
  end

  @name
end