Class: RDoc::RubyGemsHook
- Inherits:
-
Object
- Object
- RDoc::RubyGemsHook
- Extended by:
- Gem::UserInteraction
- Includes:
- Gem::UserInteraction
- Defined in:
- lib/rdoc/rubygems_hook.rb
Overview
We define the following two similar name classes in this file:
-
RDoc::RubyGemsHook
-
RDoc::RubygemsHook
RDoc::RubyGemsHook is the main class that has real logic.
RDoc::RubygemsHook is a class that is only for compatibility. RDoc::RubygemsHook is used by RubyGems directly. We can remove this when all maintained RubyGems remove ‘rubygems/rdoc.rb`.
Class Attribute Summary collapse
-
.rdoc_version ⇒ Object
readonly
Loaded version of RDoc.
Instance Attribute Summary collapse
-
#force ⇒ Object
Force installation of documentation?.
-
#generate_rdoc ⇒ Object
Generate rdoc?.
-
#generate_ri ⇒ Object
Generate ri data?.
Class Method Summary collapse
-
.generate(installer, specs) ⇒ Object
Post installs hook that generates documentation for each specification in
specs
. -
.load_rdoc ⇒ Object
Loads the RDoc generator.
- .remove(uninstaller) ⇒ Object
Instance Method Summary collapse
-
#delete_legacy_args(args) ⇒ Object
Removes legacy rdoc arguments from
args
– TODO move to RDoc::Options. -
#document(generator, options, destination) ⇒ Object
Generates documentation using the named
generator
(“darkfish” or “ri”) and following the givenoptions
. -
#generate ⇒ Object
Generates RDoc and ri data.
-
#initialize(spec, generate_rdoc = false, generate_ri = true) ⇒ RubyGemsHook
constructor
Creates a new documentation generator for
spec
. -
#new_rdoc ⇒ Object
#new_rdoc creates a new RDoc instance.
-
#rdoc_installed? ⇒ Boolean
Is rdoc documentation installed?.
-
#remove ⇒ Object
Removes generated RDoc and ri data.
-
#ri_installed? ⇒ Boolean
Is ri data installed?.
-
#setup ⇒ Object
Prepares the spec for documentation generation.
Constructor Details
#initialize(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.
95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/rdoc/rubygems_hook.rb', line 95 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 ⇒ Object (readonly)
Loaded version of RDoc. Set by ::load_rdoc
46 47 48 |
# File 'lib/rdoc/rubygems_hook.rb', line 46 def rdoc_version @rdoc_version end |
Instance Attribute Details
#force ⇒ Object
Force installation of documentation?
29 30 31 |
# File 'lib/rdoc/rubygems_hook.rb', line 29 def force @force end |
#generate_rdoc ⇒ Object
Generate rdoc?
34 35 36 |
# File 'lib/rdoc/rubygems_hook.rb', line 34 def generate_rdoc @generate_rdoc end |
#generate_ri ⇒ Object
Generate ri data?
39 40 41 |
# File 'lib/rdoc/rubygems_hook.rb', line 39 def generate_ri @generate_ri end |
Class Method Details
.generate(installer, specs) ⇒ Object
Post installs hook that generates documentation for each specification in specs
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/rdoc/rubygems_hook.rb', line 54 def self.generate 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 ⇒ Object
Loads the RDoc generator
80 81 82 83 84 85 86 |
# File 'lib/rdoc/rubygems_hook.rb', line 80 def self.load_rdoc return if @rdoc_version require_relative 'rdoc' @rdoc_version = Gem::Version.new ::RDoc::VERSION end |
.remove(uninstaller) ⇒ Object
73 74 75 |
# File 'lib/rdoc/rubygems_hook.rb', line 73 def self.remove uninstaller new(uninstaller.spec).remove end |
Instance Method Details
#delete_legacy_args(args) ⇒ Object
Removes legacy rdoc arguments from args
– TODO move to RDoc::Options
113 114 115 116 117 118 |
# File 'lib/rdoc/rubygems_hook.rb', line 113 def delete_legacy_args args args.delete '--inline-source' args.delete '--promiscuous' args.delete '-p' args.delete '--one-file' end |
#document(generator, options, destination) ⇒ Object
Generates documentation using the named generator
(“darkfish” or “ri”) and following the given options
.
Documentation will be generated into destination
126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
# File 'lib/rdoc/rubygems_hook.rb', line 126 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 ⇒ Object
Generates RDoc and ri data
159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 |
# File 'lib/rdoc/rubygems_hook.rb', line 159 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 ⇒ Object
#new_rdoc creates a new RDoc instance. This method is provided only to make testing easier.
216 217 218 |
# File 'lib/rdoc/rubygems_hook.rb', line 216 def new_rdoc # :nodoc: ::RDoc::RDoc.new end |
#rdoc_installed? ⇒ Boolean
Is rdoc documentation installed?
223 224 225 |
# File 'lib/rdoc/rubygems_hook.rb', line 223 def rdoc_installed? File.exist? @rdoc_dir end |
#remove ⇒ Object
Removes generated RDoc and ri data
230 231 232 233 234 235 236 237 |
# File 'lib/rdoc/rubygems_hook.rb', line 230 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 |
#ri_installed? ⇒ Boolean
Is ri data installed?
242 243 244 |
# File 'lib/rdoc/rubygems_hook.rb', line 242 def ri_installed? File.exist? @ri_dir end |
#setup ⇒ Object
Prepares the spec for documentation generation
249 250 251 252 253 254 255 256 |
# File 'lib/rdoc/rubygems_hook.rb', line 249 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 |