Class: RDoc::RubygemsHook
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
self,
Gem::UserInteraction
|
|
Instance Chain:
self,
Gem::UserInteraction
|
|
Inherits: | Object |
Defined in: | lib/rdoc/rubygems_hook.rb |
Overview
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.
Class Attribute Summary
-
.rdoc_version
readonly
Loaded version of
RDoc
.
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 = false, generate_ri = true) ⇒ RubygemsHook
constructor
Creates a new documentation generator for
spec
.
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?
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.
-
#remove
Removes generated
RDoc
and ri data. -
#setup
Prepares the spec for documentation generation.
- #new_rdoc Internal use only
Constructor Details
.new(spec, generate_rdoc = false, generate_ri = true) ⇒ RubygemsHook
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/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
Class Attribute Details
.rdoc_version (readonly)
Loaded version of RDoc
. Set by .load_rdoc
# File 'lib/rdoc/rubygems_hook.rb', line 40
attr_reader :rdoc_version
Class Method Details
.generation_hook(installer, specs)
Post installs hook that generates documentation for each specification in specs
# File '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
.load_rdoc
Loads the RDoc
generator
Instance Attribute Details
#force (rw)
Force installation of documentation?
# File 'lib/rdoc/rubygems_hook.rb', line 23
attr_accessor :force
#generate_rdoc (rw)
Generate rdoc?
# File 'lib/rdoc/rubygems_hook.rb', line 28
attr_accessor :generate_rdoc
#generate_ri (rw)
Generate ri data?
# File 'lib/rdoc/rubygems_hook.rb', line 33
attr_accessor :generate_ri
#rdoc_installed? ⇒ Boolean
(readonly)
Is rdoc documentation installed?
# File 'lib/rdoc/rubygems_hook.rb', line 213
def rdoc_installed? File.exist? @rdoc_dir end
#ri_installed? ⇒ Boolean
(readonly)
Is ri data installed?
# File 'lib/rdoc/rubygems_hook.rb', line 232
def ri_installed? File.exist? @ri_dir end
Instance Method Details
#delete_legacy_args(args)
Removes legacy rdoc arguments from args
# File '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
#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/rdoc/rubygems_hook.rb', line 116
def document generator, , destination generator_name = generator = .dup .exclude ||= [] # TODO maybe move to RDoc::Options#finish .setup_generator generator .op_dir = destination Dir.chdir @spec.full_gem_path do .finish end 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 ensure @rdoc.class.current = nil end end end
#generate
Generates RDoc and ri data
# File 'lib/rdoc/rubygems_hook.rb', line 149
def generate return if @spec.default_gem? return unless @generate_ri or @generate_rdoc setup = nil 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. = store = RDoc::Store.new store.encoding = .encoding store.dry_run = .dry_run store.main = .main_page store.title = .title @rdoc.store = store say "Parsing documentation for #{@spec.full_name}" Dir.chdir @spec.full_gem_path do @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
#new_rdoc
#new_rdoc
creates a new RDoc
instance. This method is provided only to make testing easier.
#remove
Removes generated RDoc
and ri data
# File '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
#setup
Prepares the spec for documentation generation
# File '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