summaryrefslogtreecommitdiff
path: root/lib/rubygems/commands/rdoc_command.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rubygems/commands/rdoc_command.rb')
-rw-r--r--lib/rubygems/commands/rdoc_command.rb90
1 files changed, 90 insertions, 0 deletions
diff --git a/lib/rubygems/commands/rdoc_command.rb b/lib/rubygems/commands/rdoc_command.rb
new file mode 100644
index 0000000000..62c4bf8ce9
--- /dev/null
+++ b/lib/rubygems/commands/rdoc_command.rb
@@ -0,0 +1,90 @@
+# frozen_string_literal: true
+
+require_relative "../command"
+require_relative "../version_option"
+require_relative "../rdoc"
+require "fileutils"
+
+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: 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
+
+ def arguments # :nodoc:
+ "GEMNAME gem to generate documentation for (unless --all)"
+ end
+
+ def defaults_str # :nodoc:
+ "--version '#{Gem::Requirement.default}' --ri --no-overwrite"
+ end
+
+ def description # :nodoc:
+ <<-DESC
+The rdoc command builds documentation for installed gems. By default
+only documentation is built using rdoc, but additional types of
+documentation may be built through rubygems plugins and the
+Gem.post_installs hook.
+
+Use --overwrite to force rebuilding of documentation.
+ DESC
+ end
+
+ def usage # :nodoc:
+ "#{program_name} [args]"
+ end
+
+ def execute
+ specs = if options[:all]
+ Gem::Specification.to_a
+ else
+ get_all_gem_names.flat_map do |name|
+ Gem::Specification.find_by_name name, options[:version]
+ end.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
+
+ doc.generate
+ end
+ end
+end