class Gem::Commands::RdocCommand

Public Class Methods

new() click to toggle source
Calls superclass method Gem::Command::new
# File rubygems/commands/rdoc_command.rb, line 10
def initialize
  super "rdoc", "Generates RDoc for pre-installed gems",
        :version => Gem::Requirement.default,
        :include_rdoc => false, :include_ri => true, :overwrite => false

  add_option("--all",
             "Generate RDoc/RI documentation for all",
             "installed gems") do |value, options|
    options[:all] = value
  end

  add_option("--[no-]rdoc",
             "Generate RDoc HTML") do |value, options|
    options[:include_rdoc] = value
  end

  add_option("--[no-]ri",
             "Generate RI data") do |value, options|
    options[:include_ri] = value
  end

  add_option("--[no-]overwrite",
             "Overwrite installed documents") do |value, options|
    options[:overwrite] = value
  end

  add_version_option
end

Public Instance Methods

execute() click to toggle source
# File rubygems/commands/rdoc_command.rb, line 62
def execute
  specs = if options[:all]
    Gem::Specification.to_a
  else
    get_all_gem_names.map do |name|
      Gem::Specification.find_by_name name, options[:version]
    end.flatten.uniq
  end

  if specs.empty?
    alert_error "No matching gems found"
    terminate_interaction 1
  end

  specs.each do |spec|
    doc = Gem::RDoc.new spec, options[:include_rdoc], options[:include_ri]

    doc.force = options[:overwrite]

    if options[:overwrite]
      FileUtils.rm_rf File.join(spec.doc_dir, "ri")
      FileUtils.rm_rf File.join(spec.doc_dir, "rdoc")
    end

    begin
      doc.generate
    rescue Errno::ENOENT => e
      match = / - /.match(e.message)
      alert_error "Unable to document #{spec.full_name}, " \
                  " #{match.post_match} is missing, skipping"
      terminate_interaction 1 if specs.length == 1
    end
  end
end