require 'rubygems/command' require 'rubygems/version_option' require 'rubygems/doc_manager' class Gem::Commands::RdocCommand < Gem::Command include Gem::VersionOption def initialize super 'rdoc', 'Generates RDoc for pre-installed gems', :version => Gem::Requirement.default, :include_rdoc => true, :include_ri => true add_option('--all', 'Generate RDoc/RI documentation for all', 'installed gems') do |value, options| options[:all] = value end add_option('--[no-]rdoc', 'Include RDoc generated documents') do |value, options| options[:include_rdoc] = value end add_option('--[no-]ri', 'Include RI generated documents') do |value, options| options[:include_ri] = value end add_version_option end def arguments # :nodoc: "GEMNAME gem to generate documentation for (unless --all)" end def defaults_str # :nodoc: "--version '#{Gem::Requirement.default}' --rdoc --ri" end def usage # :nodoc: "#{program_name} [args]" end def execute if options[:all] then specs = Gem::SourceIndex.from_installed_gems.collect { |name, spec| spec } else gem_name = get_one_gem_name dep = Gem::Dependency.new gem_name, options[:version] specs = Gem::SourceIndex.from_installed_gems.search dep end if specs.empty? fail "Failed to find gem #{gem_name} to generate RDoc for #{options[:version]}" end if options[:include_ri] specs.each do |spec| Gem::DocManager.new(spec).generate_ri end Gem::DocManager.update_ri_cache end if options[:include_rdoc] specs.each do |spec| Gem::DocManager.new(spec).generate_rdoc end end true end end