Class: Gem::RDoc
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
|
|
Instance Chain:
|
|
Inherits: | Object |
Defined in: | lib/rubygems/rdoc.rb |
Overview
RDoc
provides methods to generate RDoc
and ri data for installed gems. It works for RDoc
1.0.1 (in Ruby 1.8) up to RDoc
3.6.
This implementation is considered obsolete. The RDoc project is the appropriate location to find this functionality. This file provides the hooks to load RDoc
generation code from the “rdoc” gem and a fallback in case the installed version of RDoc
does not have them.
Class Attribute Summary
-
.rdoc_version
readonly
Loaded version of
RDoc
.
DefaultUserInteraction - Included
Class Method Summary
-
.generation_hook(installer, specs)
Post installs hook that generates documentation for each specification in
specs
-
.load_rdoc
Loads the
RDoc
generator. -
.new(spec, generate_rdoc = true, generate_ri = true) ⇒ RDoc
constructor
Creates a new documentation generator for
spec
.
UserInteraction - Extended
alert | Displays an alert |
alert_error | Displays an error |
alert_warning | Displays a warning |
ask | Asks a |
ask_for_password | Asks for a password with a |
ask_yes_no | Asks a yes or no |
choose_from_list | Asks the user to answer |
say | Displays the given |
terminate_interaction | Terminates the RubyGems process with the given |
verbose | Calls |
DefaultUserInteraction - Included
Text - Included
clean_text | Remove any non-printable characters and make the text suitable for printing. |
format_text | Wraps |
levenshtein_distance | This code is based directly on the Text gem implementation Returns a value representing the “cost” of transforming str1 into str2. |
truncate_text, min3 |
Instance Attribute Summary
-
#force
rw
Force installation of documentation?
-
#generate_rdoc
rw
Generate rdoc?
-
#generate_ri
rw
Generate ri data?
-
#rdoc_installed? ⇒ Boolean
readonly
Is rdoc documentation installed?
-
#ri_installed? ⇒ Boolean
readonly
Is ri data installed?
DefaultUserInteraction - Included
Instance Method Summary
-
#delete_legacy_args(args)
Removes legacy rdoc arguments from
args
-
#document(generator, options, destination)
Generates documentation using the named
generator
(“darkfish” or “ri”) and following the givenoptions
. -
#generate
Generates RDoc and ri data.
-
#generate_legacy
Generates RDoc and ri data for legacy
RDoc
versions. -
#initialize(spec, generate_rdoc = true, generate_ri = true) ⇒ RDoc
constructor
Creates a new documentation generator for
spec
. -
#legacy_rdoc(*args)
Generates RDoc using a legacy version of
RDoc
from the ARGV-likeargs
. -
#new_rdoc
#new_rdoc creates a new
RDoc
instance. -
#remove
Removes generated
RDoc
and ri data. -
#setup
Prepares the spec for documentation generation.
UserInteraction - Included
#alert | Displays an alert |
#alert_error | Displays an error |
#alert_warning | Displays a warning |
#ask | Asks a |
#ask_for_password | Asks for a password with a |
#ask_yes_no | Asks a yes or no |
#choose_from_list | Asks the user to answer |
#say | Displays the given |
#terminate_interaction | Terminates the RubyGems process with the given |
#verbose | Calls |
DefaultUserInteraction - Included
Text - Included
#clean_text | Remove any non-printable characters and make the text suitable for printing. |
#format_text | Wraps |
#levenshtein_distance | This code is based directly on the Text gem implementation Returns a value representing the “cost” of transforming str1 into str2. |
#truncate_text, #min3 |
Constructor Details
.new(spec, generate_rdoc = true, generate_ri = true) ⇒ RDoc
Creates a new documentation generator for spec
. RDoc
and ri data generation can be enabled or disabled through #generate_rdoc and #generate_ri respectively.
Only #generate_ri is enabled by default.
# File 'lib/rubygems/rdoc.rb', line 118
def initialize spec, generate_rdoc = true, generate_ri = true @doc_dir = spec.doc_dir @file_info = nil @force = false @rdoc = nil @spec = spec @generate_rdoc = generate_rdoc @generate_ri = generate_ri @rdoc_dir = spec.doc_dir 'rdoc' @ri_dir = spec.doc_dir 'ri' end
#initialize(spec, generate_rdoc = true, generate_ri = true) ⇒ RDoc
Creates a new documentation generator for spec
. RDoc
and ri data generation can be enabled or disabled through #generate_rdoc and #generate_ri respectively.
Only #generate_ri is enabled by default.
# File 'lib/rubygems/rdoc.rb', line 118
def initialize spec, generate_rdoc = true, generate_ri = true @doc_dir = spec.doc_dir @file_info = nil @force = false @rdoc = nil @spec = spec @generate_rdoc = generate_rdoc @generate_ri = generate_ri @rdoc_dir = spec.doc_dir 'rdoc' @ri_dir = spec.doc_dir 'ri' end
Class Attribute Details
.rdoc_version (readonly)
Loaded version of RDoc
. Set by .load_rdoc
# File 'lib/rubygems/rdoc.rb', line 66
attr_reader :rdoc_version
Class Method Details
.generation_hook(installer, specs)
Post installs hook that generates documentation for each specification in specs
# File 'lib/rubygems/rdoc.rb', line 74
def self.generation_hook installer, specs start = Time.now types = installer.document generate_rdoc = types.include? 'rdoc' generate_ri = types.include? 'ri' specs.each do |spec| new(spec, generate_rdoc, generate_ri).generate end return unless generate_rdoc or generate_ri duration = (Time.now - start).to_i names = specs.map(&:name).join ', ' say "Done installing documentation for #{names} after #{duration} seconds" end
.load_rdoc
Loads the RDoc
generator
# File 'lib/rubygems/rdoc.rb', line 96
def self.load_rdoc return if @rdoc_version require 'rdoc/rdoc' @rdoc_version = if ::RDoc.const_defined? :VERSION then Gem::Version.new ::RDoc::VERSION else Gem::Version.new '1.0.1' end rescue LoadError => e raise Gem::DocumentError, "RDoc is not installed: #{e}" end
Instance Attribute Details
#force (rw)
Force installation of documentation?
# File 'lib/rubygems/rdoc.rb', line 49
attr_accessor :force
#generate_rdoc (rw)
Generate rdoc?
# File 'lib/rubygems/rdoc.rb', line 54
attr_accessor :generate_rdoc
#generate_ri (rw)
Generate ri data?
# File 'lib/rubygems/rdoc.rb', line 59
attr_accessor :generate_ri
#rdoc_installed? ⇒ Boolean
(readonly)
Is rdoc documentation installed?
# File 'lib/rubygems/rdoc.rb', line 298
def rdoc_installed? File.exist? @rdoc_dir end
#ri_installed? ⇒ Boolean
(readonly)
Is ri data installed?
# File 'lib/rubygems/rdoc.rb', line 317
def ri_installed? File.exist? @ri_dir end
Instance Method Details
#delete_legacy_args(args)
Removes legacy rdoc arguments from args
# File 'lib/rubygems/rdoc.rb', line 137
def delete_legacy_args args args.delete '--inline-source' args.delete '--promiscuous' args.delete '-p' args.delete '--one-file' end
#document(generator, options, destination)
Generates documentation using the named generator
(“darkfish” or “ri”) and following the given options
.
Documentation will be generated into destination
# File 'lib/rubygems/rdoc.rb', line 150
def document generator, , destination generator_name = generator = .dup .exclude ||= [] # TODO maybe move to RDoc::Options#finish .setup_generator generator .op_dir = destination .finish generator = .generator.new @rdoc.store, @rdoc. = @rdoc.generator = generator say "Installing #{generator_name} documentation for #{@spec.full_name}" FileUtils.mkdir_p .op_dir Dir.chdir .op_dir do begin @rdoc.class.current = @rdoc @rdoc.generator.generate @file_info ensure @rdoc.class.current = nil end end end
#generate
Generates RDoc and ri data
# File 'lib/rubygems/rdoc.rb', line 181
def generate return unless @generate_ri or @generate_rdoc setup = nil if Gem::Requirement.new('< 3').satisfied_by? self.class.rdoc_version then generate_legacy return end ::RDoc::TopLevel.reset # TODO ::RDoc::RDoc.reset ::RDoc::Parser::C.reset args = @spec. args.concat @spec.source_paths args.concat @spec.extra_rdoc_files case config_args = Gem.configuration[:rdoc] when String then args = args.concat config_args.split when Array then args = args.concat config_args end delete_legacy_args args Dir.chdir @spec.full_gem_path do = ::RDoc::Options.new .default_title = "#{@spec.full_name} Documentation" .parse args end .quiet = !Gem.configuration.really_verbose @rdoc = new_rdoc @rdoc. = say "Parsing documentation for #{@spec.full_name}" Dir.chdir @spec.full_gem_path do @file_info = @rdoc.parse_files .files end document 'ri', , @ri_dir if @generate_ri and (@force or not File.exist? @ri_dir) document 'darkfish', , @rdoc_dir if @generate_rdoc and (@force or not File.exist? @rdoc_dir) end
#generate_legacy
Generates RDoc and ri data for legacy RDoc
versions. This method will not exist in future versions.
# File 'lib/rubygems/rdoc.rb', line 237
def generate_legacy if @generate_rdoc then FileUtils.rm_rf @rdoc_dir say "Installing RDoc documentation for #{@spec.full_name}" legacy_rdoc '--op', @rdoc_dir end if @generate_ri then FileUtils.rm_rf @ri_dir say "Installing ri documentation for #{@spec.full_name}" legacy_rdoc '--ri', '--op', @ri_dir end end
#legacy_rdoc(*args)
Generates RDoc using a legacy version of RDoc
from the ARGV-like args
. This method will not exist in future versions.
# File 'lib/rubygems/rdoc.rb', line 255
def legacy_rdoc *args args << @spec. args << '--quiet' args << @spec.require_paths.clone args << @spec.extra_rdoc_files args << '--title' << "#{@spec.full_name} Documentation" args = args.flatten.map do |arg| arg.to_s end delete_legacy_args args if Gem::Requirement.new('>= 2.4.0') =~ self.class.rdoc_version r = new_rdoc verbose { "rdoc #{args.join ' '}" } Dir.chdir @spec.full_gem_path do begin r.document args rescue Errno::EACCES => e dirname = File.dirname e. .split("-")[1].strip raise Gem::FilePermissionError, dirname rescue Interrupt => e raise e rescue Exception => ex alert_error "While generating documentation for #{@spec.full_name}" ui.errs.puts "... MESSAGE: #{ex}" ui.errs.puts "... RDOC args: #{args.join(' ')}" ui.backtrace ex ui.errs.puts "(continuing with the rest of the installation)" end end end
#new_rdoc
#new_rdoc
creates a new RDoc
instance. This method is provided only to make testing easier.
# File 'lib/rubygems/rdoc.rb', line 291
def new_rdoc # :nodoc: ::RDoc::RDoc.new end
#remove
Removes generated RDoc
and ri data
# File 'lib/rubygems/rdoc.rb', line 305
def remove base_dir = @spec.base_dir raise Gem::FilePermissionError, base_dir unless File.writable? base_dir FileUtils.rm_rf @rdoc_dir FileUtils.rm_rf @ri_dir end
#setup
Prepares the spec for documentation generation
# File 'lib/rubygems/rdoc.rb', line 324
def setup self.class.load_rdoc raise Gem::FilePermissionError, @doc_dir if File.exist?(@doc_dir) and not File.writable?(@doc_dir) FileUtils.mkdir_p @doc_dir unless File.exist? @doc_dir end