A TopLevel context is a representation of the contents of a single file

Methods
#
A
B
C
E
F
H
L
M
N
O
P
R
U
Attributes
[RW] absolute_name

Absolute name of this file

[R] classes_or_modules

All the classes or modules that were declared in this file. These are assigned to either #classes_hash or #modules_hash once we know what they really are.

[RW] file_stat

This TopLevel's File::Stat struct

[RW] parser

The parser that processed this file

[RW] relative_name

Relative name of this file

Class Public methods
all_classes()

Returns all classes discovered by RDoc

Also aliased as: classes
# File ../ruby/lib/rdoc/top_level.rb, line 40
def self.all_classes
  @all_classes_hash.values
end
all_classes_and_modules()

Returns all classes and modules discovered by RDoc

# File ../ruby/lib/rdoc/top_level.rb, line 47
def self.all_classes_and_modules
  @all_classes_hash.values + @all_modules_hash.values
end
all_classes_hash()

Hash of all classes known to RDoc

Also aliased as: classes_hash
# File ../ruby/lib/rdoc/top_level.rb, line 54
def self.all_classes_hash
  @all_classes_hash
end
all_files()

All TopLevels known to RDoc

Also aliased as: files
# File ../ruby/lib/rdoc/top_level.rb, line 61
def self.all_files
  @all_files_hash.values
end
all_files_hash()

Hash of all files known to RDoc

Also aliased as: files_hash
# File ../ruby/lib/rdoc/top_level.rb, line 68
def self.all_files_hash
  @all_files_hash
end
all_modules()

Returns all modules discovered by RDoc

Also aliased as: modules
# File ../ruby/lib/rdoc/top_level.rb, line 75
def self.all_modules
  all_modules_hash.values
end
all_modules_hash()

Hash of all modules known to RDoc

Also aliased as: modules_hash
# File ../ruby/lib/rdoc/top_level.rb, line 82
def self.all_modules_hash
  @all_modules_hash
end
classes()
Alias for: all_classes
classes_hash()
Alias for: all_classes_hash
complete(min_visibility)

Prepares the RDoc code object tree for use by a generator.

It finds unique classes/modules defined, and replaces classes/modules that are aliases for another one by a copy with RDoc::ClassModule#is_alias_for set.

It updates the RDoc::ClassModule#constant_aliases attribute of “real” classes or modules.

It also completely removes the classes and modules that should be removed from the documentation and the methods that have a visibility below min_visibility, which is the --visibility option.

See also RDoc::Context#remove_from_documentation?

# File ../ruby/lib/rdoc/top_level.rb, line 102
def self.complete min_visibility
  fix_basic_object_inheritance

  # cache included modules before they are removed from the documentation
  all_classes_and_modules.each { |cm| cm.ancestors }

  remove_nodoc @all_classes_hash
  remove_nodoc @all_modules_hash

  @unique_classes = find_unique @all_classes_hash
  @unique_modules = find_unique @all_modules_hash

  unique_classes_and_modules.each do |cm|
    cm.complete min_visibility
  end

  @all_files_hash.each_key do |file_name|
    tl = @all_files_hash[file_name]

    unless RDoc::Parser::Simple === tl.parser then
      tl.modules_hash.clear
      tl.classes_hash.clear

      tl.classes_or_modules.each do |cm|
        name = cm.full_name
        if cm.type == 'class' then
          tl.classes_hash[name] = cm if @all_classes_hash[name]
        else
          tl.modules_hash[name] = cm if @all_modules_hash[name]
        end
      end
    end
  end
end
files()
Alias for: all_files
files_hash()
Alias for: all_files_hash
find_class_named(name)

Finds the class with name in all discovered classes

# File ../ruby/lib/rdoc/top_level.rb, line 140
def self.find_class_named(name)
  @all_classes_hash[name]
end
find_class_named_from(name, from)

Finds the class with name starting in namespace from

# File ../ruby/lib/rdoc/top_level.rb, line 147
def self.find_class_named_from name, from
  from = find_class_named from unless RDoc::Context === from

  until RDoc::TopLevel === from do
    return nil unless from

    klass = from.find_class_named name
    return klass if klass

    from = from.parent
  end

  find_class_named name
end
find_class_or_module(name)

Finds the class or module with name

# File ../ruby/lib/rdoc/top_level.rb, line 165
def self.find_class_or_module(name)
  name = $' if name =~ /^::/
  RDoc::TopLevel.classes_hash[name] || RDoc::TopLevel.modules_hash[name]
end
find_file_named(name)

Finds the file with name in all discovered files

# File ../ruby/lib/rdoc/top_level.rb, line 173
def self.find_file_named(name)
  @all_files_hash[name]
end
find_module_named(name)

Finds the module with name in all discovered modules

# File ../ruby/lib/rdoc/top_level.rb, line 180
def self.find_module_named(name)
  modules_hash[name]
end
find_unique(all_hash)

Finds unique classes/modules defined in all_hash, and returns them as an array. Performs the alias updates in all_hash: see ::complete.

# File ../ruby/lib/rdoc/top_level.rb, line 191
def self.find_unique(all_hash)
  unique = []

  all_hash.each_pair do |full_name, cm|
    unique << cm if full_name == cm.full_name
  end

  unique
end
fix_basic_object_inheritance()

Fixes the erroneous BasicObject < Object in 1.9.

Because we assumed all classes without a stated superclass inherit from Object, we have the above wrong inheritance.

We fix BasicObject right away if we are running in a Ruby version >= 1.9. If not, we may be documenting 1.9 source while running under 1.8: we search the files of BasicObject for “object.c”, and fix the inheritance if we find it.

# File ../ruby/lib/rdoc/top_level.rb, line 212
def self.fix_basic_object_inheritance
  basic = all_classes_hash['BasicObject']
  return unless basic
  if RUBY_VERSION >= '1.9'
    basic.superclass = nil
  elsif basic.in_files.any? { |f| File.basename(f.full_name) == 'object.c' }
    basic.superclass = nil
  end
end
modules()
Alias for: all_modules
modules_hash()
Alias for: all_modules_hash
new(file_name)

Creates a new TopLevel for file_name

# File ../ruby/lib/rdoc/top_level.rb, line 298
def initialize(file_name)
  super()
  @name = nil
  @relative_name = file_name
  @absolute_name = file_name
  @file_stat     = File.stat(file_name) rescue nil # HACK for testing
  @diagram       = nil
  @parser        = nil

  @classes_or_modules = []

  RDoc::TopLevel.files_hash[file_name] = self
end
new(file_name)

Creates a new RDoc::TopLevel with file_name only if one with the same name does not exist in all_files.

# File ../ruby/lib/rdoc/top_level.rb, line 226
def self.new file_name
  if top_level = @all_files_hash[file_name] then
    top_level
  else
    top_level = super
    @all_files_hash[file_name] = top_level
    top_level
  end
end
remove_nodoc(all_hash)

Removes from all_hash the contexts that are nodoc or have no content.

See RDoc::Context#remove_from_documentation?

# File ../ruby/lib/rdoc/top_level.rb, line 241
def self.remove_nodoc(all_hash)
  all_hash.keys.each do |name|
    context = all_hash[name]
    all_hash.delete(name) if context.remove_from_documentation?
  end
end
reset()

Empties RDoc of stored class, module and file information

# File ../ruby/lib/rdoc/top_level.rb, line 251
def self.reset
  @all_classes_hash = {}
  @all_modules_hash = {}
  @all_files_hash   = {}
end
unique_classes()

Returns the unique classes discovered by RDoc.

::complete must have been called prior to using this method.

# File ../ruby/lib/rdoc/top_level.rb, line 262
def self.unique_classes
  @unique_classes
end
unique_classes_and_modules()

Returns the unique classes and modules discovered by RDoc. ::complete must have been called prior to using this method.

# File ../ruby/lib/rdoc/top_level.rb, line 270
def self.unique_classes_and_modules
  @unique_classes + @unique_modules
end
unique_modules()

Returns the unique modules discovered by RDoc. ::complete must have been called prior to using this method.

# File ../ruby/lib/rdoc/top_level.rb, line 278
def self.unique_modules
  @unique_modules
end
Instance Public methods
==(other)

An RDoc::TopLevel is equal to another with the same #absolute_name

Also aliased as: eql?
# File ../ruby/lib/rdoc/top_level.rb, line 315
def == other
  other.class === self and @absolute_name == other.absolute_name
end
add_alias(an_alias)

Adds an_alias to Object instead of self.

# File ../ruby/lib/rdoc/top_level.rb, line 324
def add_alias(an_alias)
  object_class.record_location self
  return an_alias unless @document_self
  object_class.add_alias an_alias
end
add_constant(constant)

Adds constant to Object instead of self.

# File ../ruby/lib/rdoc/top_level.rb, line 333
def add_constant(constant)
  object_class.record_location self
  return constant unless @document_self
  object_class.add_constant constant
end
add_include(include)

Adds include to Object instead of self.

# File ../ruby/lib/rdoc/top_level.rb, line 342
def add_include(include)
  object_class.record_location self
  return include unless @document_self
  object_class.add_include include
end
add_method(method)

Adds method to Object instead of self.

# File ../ruby/lib/rdoc/top_level.rb, line 351
def add_method(method)
  object_class.record_location self
  return method unless @document_self
  object_class.add_method method
end
add_to_classes_or_modules(mod)

Adds class or module mod. Used in the building phase by the ruby parser.

# File ../ruby/lib/rdoc/top_level.rb, line 361
def add_to_classes_or_modules mod
  @classes_or_modules << mod
end
base_name()

Base name of this file

Also aliased as: name
# File ../ruby/lib/rdoc/top_level.rb, line 368
def base_name
  File.basename @absolute_name
end
cvs_url()

Returns a URL for this source file on some web repository. Use the -W command line option to set.

# File ../ruby/lib/rdoc/generator/markup.rb, line 197
def cvs_url
  url = RDoc::RDoc.current.options.webcvs

  if /%s/ =~ url then
    url % @absolute_name
  else
    url + @absolute_name
  end
end
eql?(other)
Alias for: ==
find_class_or_module(name)
# File ../ruby/lib/rdoc/top_level.rb, line 380
def find_class_or_module name
  RDoc::TopLevel.find_class_or_module name
end
find_local_symbol(symbol)

Finds a class or module named symbol

# File ../ruby/lib/rdoc/top_level.rb, line 387
def find_local_symbol(symbol)
  find_class_or_module(symbol) || super
end
find_module_named(name)

Finds a module or class with name

# File ../ruby/lib/rdoc/top_level.rb, line 394
def find_module_named(name)
  find_class_or_module(name)
end
full_name()

Returns the relative name of this file

# File ../ruby/lib/rdoc/top_level.rb, line 401
def full_name
  @relative_name
end
hash()

An RDoc::TopLevel has the same hash as another with the same #absolute_name

# File ../ruby/lib/rdoc/top_level.rb, line 409
def hash
  @absolute_name.hash
end
http_url(prefix)

URL for this with a prefix

# File ../ruby/lib/rdoc/top_level.rb, line 416
def http_url(prefix)
  path = [prefix, @relative_name.tr('.', '_')]

  File.join(*path.compact) + '.html'
end
last_modified()

Time this file was last modified, if known

# File ../ruby/lib/rdoc/top_level.rb, line 434
def last_modified
  @file_stat ? file_stat.mtime : nil
end
name()
Alias for: base_name
object_class()

Returns the NormalClass “Object”, creating it if not found.

Records self as a location in “Object”.

# File ../ruby/lib/rdoc/top_level.rb, line 443
def object_class
  @object_class ||= begin
    oc = self.class.find_class_named('Object') || add_class(RDoc::NormalClass, 'Object')
    oc.record_location self
    oc
  end
end
path()

Path to this file

# File ../ruby/lib/rdoc/top_level.rb, line 454
def path
  http_url RDoc::RDoc.current.generator.file_dir
end