Gem::RDoc provides methods to generate RDoc and ri data for installed gems upon gem installation.
This file is automatically required by RubyGems 1.9 and newer.
Post installs hook that generates documentation for each specification in specs
# File ruby-3.1.2/lib/rdoc/rubygems_hook.rb, line 48
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
Loads the RDoc generator
# File ruby-3.1.2/lib/rdoc/rubygems_hook.rb, line 70
def self.load_rdoc
return if @rdoc_version
require_relative 'rdoc'
@rdoc_version = Gem::Version.new ::RDoc::VERSION
end
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 ruby-3.1.2/lib/rdoc/rubygems_hook.rb, line 85
def initialize spec, generate_rdoc = false, generate_ri = true
@doc_dir = spec.doc_dir
@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
Removes legacy rdoc arguments from args
# File ruby-3.1.2/lib/rdoc/rubygems_hook.rb, line 103
def delete_legacy_args args
args.delete '--inline-source'
args.delete '--promiscuous'
args.delete '-p'
args.delete '--one-file'
end
Generates documentation using the named generator (“darkfish” or “ri”) and following the given options.
Documentation will be generated into destination
# File ruby-3.1.2/lib/rdoc/rubygems_hook.rb, line 116
def document generator, options, destination
generator_name = generator
options = options.dup
options.exclude ||= [] # TODO maybe move to RDoc::Options#finish
options.setup_generator generator
options.op_dir = destination
Dir.chdir @spec.full_gem_path do
options.finish
end
generator = options.generator.new @rdoc.store, options
@rdoc.options = options
@rdoc.generator = generator
say "Installing #{generator_name} documentation for #{@spec.full_name}"
FileUtils.mkdir_p options.op_dir
Dir.chdir options.op_dir do
begin
@rdoc.class.current = @rdoc
@rdoc.generator.generate
ensure
@rdoc.class.current = nil
end
end
end
Generates RDoc and ri data
# File ruby-3.1.2/lib/rdoc/rubygems_hook.rb, line 149
def generate
return if @spec.default_gem?
return unless @generate_ri or @generate_rdoc
setup
options = nil
args = @spec.rdoc_options
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
options = ::RDoc::Options.new
options.default_title = "#{@spec.full_name} Documentation"
options.parse args
end
options.quiet = !Gem.configuration.really_verbose
@rdoc = new_rdoc
@rdoc.options = options
store = RDoc::Store.new
store.encoding = options.encoding
store.dry_run = options.dry_run
store.main = options.main_page
store.title = options.title
@rdoc.store = store
say "Parsing documentation for #{@spec.full_name}"
Dir.chdir @spec.full_gem_path do
@rdoc.parse_files options.files
end
document 'ri', options, @ri_dir if
@generate_ri and (@force or not File.exist? @ri_dir)
document 'darkfish', options, @rdoc_dir if
@generate_rdoc and (@force or not File.exist? @rdoc_dir)
end
Is rdoc documentation installed?
# File ruby-3.1.2/lib/rdoc/rubygems_hook.rb, line 213
def rdoc_installed?
File.exist? @rdoc_dir
end
Removes generated RDoc and ri data
# File ruby-3.1.2/lib/rdoc/rubygems_hook.rb, line 220
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
Is ri data installed?
# File ruby-3.1.2/lib/rdoc/rubygems_hook.rb, line 232
def ri_installed?
File.exist? @ri_dir
end
Prepares the spec for documentation generation
# File ruby-3.1.2/lib/rdoc/rubygems_hook.rb, line 239
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