class YARD::RubygemsHook

Attributes

yard_version[R]

Loaded version of YARD. Set by ::load_yard

force[RW]

Force installation of documentation?

generate_yard[RW]

Generate yard?

generate_yri[RW]

Generate yri data?

Public Class Methods

generation_hook(installer, specs) click to toggle source

Post installs hook that generates documentation for each specification in specs

# File lib/yard/rubygems/hook.rb, line 45
def self.generation_hook(installer, specs)
  start = Time.now
  types = installer.document

  generate_yard = types.include?('yardoc') || types.include?('yard')
  generate_yri = types.include? 'yri'

  specs.each do |spec|
    gen_yard = generate_yard
    gen_yri = generate_yri
    gen_yri = false if gen_yard # never generate both, no need
    unless types.empty? # --no-document is not in effect
      # look at spec.metadata['yard.run'] for override
      run_yard = spec.metadata['yard.run']
      gen_yard = true if run_yard && run_yard != 'yri'
      gen_yri = true if run_yard == 'yri'
    end

    new(spec, gen_yard, gen_yri).generate
  end

  return unless generate_yard || generate_yri

  duration = (Time.now - start).to_i
  names = specs.map(&:name).join ', '

  say "Done installing documentation for #{names} after #{duration} seconds"
end
load_yard() click to toggle source

Loads the YARD generator

# File lib/yard/rubygems/hook.rb, line 85
def self.load_yard
  return if @yard_version

  require 'yard'

  @yard_version = Gem::Version.new ::YARD::VERSION
end
new(spec, generate_yard = false, generate_yri = true) click to toggle source
# File lib/yard/rubygems/hook.rb, line 93
def initialize(spec, generate_yard = false, generate_yri = true)
  @doc_dir = spec.doc_dir
  @force = false
  @spec = spec

  @generate_yard = generate_yard
  @generate_yri = generate_yri

  @yard_dir = spec.doc_dir('yard')
  @yri_dir = spec.doc_dir('.yardoc')
end
removal_hook(uninstaller) click to toggle source

Pre uninstalls hook that removes documentation

# File lib/yard/rubygems/hook.rb, line 78
def self.removal_hook(uninstaller)
  new(uninstaller.spec).remove
end

Public Instance Methods

generate() click to toggle source

Generates YARD and yri data

# File lib/yard/rubygems/hook.rb, line 148
def generate
  return if @spec.default_gem?
  return unless @generate_yri || @generate_yard

  setup

  install_yri if @generate_yri && (@force || !File.exist?(@yri_dir))

  install_yard if @generate_yard && (@force || !File.exist?(@yard_dir))
end
install_yard() click to toggle source
# File lib/yard/rubygems/hook.rb, line 131
def install_yard
  FileUtils.rm_rf @yard_dir

  say "Installing YARD documentation for #{@spec.full_name}..."
  run_yardoc '--no-progress', '--db', @yri_dir, '-o', @yard_dir
end
install_yri() click to toggle source
# File lib/yard/rubygems/hook.rb, line 138
def install_yri
  FileUtils.rm_rf @yri_dir

  say "Building YARD (yri) index for #{@spec.full_name}..."
  run_yardoc '--no-progress', '-c', '-n', '--db', @yri_dir
end
remove() click to toggle source

Removes YARD and yri data

# File lib/yard/rubygems/hook.rb, line 189
def remove
  uninstall_yri
  uninstall_yard
end
run_yardoc(*args) click to toggle source
# File lib/yard/rubygems/hook.rb, line 105
def run_yardoc(*args)
  args << '--quiet' unless Gem.configuration.really_verbose
  args << '--backtrace' if Gem.configuration.backtrace
  unless File.file?(File.join(@spec.full_gem_path, '.yardopts'))
    args << @spec.require_paths
    unless @spec.extra_rdoc_files.empty?
      args << '-'
      args += @spec.extra_rdoc_files
    end
  end
  args = args.flatten.map(&:to_s)

  Dir.chdir(@spec.full_gem_path) do
    YARD::CLI::Yardoc.run(*args)
  end
rescue Errno::EACCES => e
  dirname = File.dirname e.message.split("-")[1].strip
  raise Gem::FilePermissionError, dirname
rescue => ex
  alert_error "While generating documentation for #{@spec.full_name}"
  ui.errs.puts "... MESSAGE:   #{ex}"
  ui.errs.puts "... YARDOC args: #{args.join(' ')}"
  ui.errs.puts "\t#{ex.backtrace.join("\n\t")}" if Gem.configuration.backtrace
  ui.errs.puts "(continuing with the rest of the installation)"
end
setup() click to toggle source

Prepares the spec for documentation generation

# File lib/yard/rubygems/hook.rb, line 162
def setup
  self.class.load_yard

  if File.exist?(@doc_dir)
    raise Gem::FilePermissionError, @doc_dir unless File.writable?(@doc_dir)
  else
    FileUtils.mkdir_p @doc_dir
  end
end
uninstall_yard() click to toggle source
# File lib/yard/rubygems/hook.rb, line 172
def uninstall_yard
  if File.exist?(@yard_dir)
    raise Gem::FilePermissionError, @yard_dir unless File.writable?(@yard_dir)
    FileUtils.rm_rf @yard_dir
  end
end
uninstall_yri() click to toggle source
# File lib/yard/rubygems/hook.rb, line 179
def uninstall_yri
  if File.exist?(@yri_dir)
    raise Gem::FilePermissionError, @yri_dir unless File.writable?(@yri_dir)
    FileUtils.rm_rf @yri_dir
  end
end