# module RDoc::RI::Paths

The directories where ri data lives. Paths can be enumerated via ::each, or queried individually via ::system_dir, ::site_dir, ::home_dir and ::gem_dir.

### Public Class Methods

each(system = true, site = true, home = true, gems = :latest, *extra_dirs) { |directory, type| ... } click to toggle source

Iterates over each selected path yielding the directory and type.

Yielded types:

:system

  Where Ruby's ri data is stored. Yielded when `system` is true

:site

  Where ri for installed libraries are stored. Yielded when `site` is true. Normally no ri data is stored here.

:home

  ~/.rdoc. Yielded when `home` is true.

:gem

  ri data for an installed gem. Yielded when `gems` is true.

:extra

  ri data directory from the command line. Yielded for each entry in `extra_dirs`

    # File lib/rdoc/ri/paths.rb, line 47
    def self.each system = true, site = true, home = true, gems = :latest, *extra_dirs # :yields: directory, type
      return enum_for __method__, system, site, home, gems, *extra_dirs unless
        block_given?

      extra_dirs.each do |dir|
        yield dir, :extra
      end

      yield system_dir,  :system if system
      yield site_dir,    :site   if site
      yield home_dir,    :home   if home and HOMEDIR

      gemdirs(gems).each do |dir|
        yield dir, :gem
      end if gems

      nil
    end

gem_dir(name, version) click to toggle source

The ri directory for the gem with `gem_name`.

    # File lib/rdoc/ri/paths.rb, line 69
    def self.gem_dir name, version
      req = Gem::Requirement.new "= #{version}"

      spec = Gem::Specification.find_by_name name, req

      File.join spec.doc_dir, 'ri'
    end

gemdirs(filter = :latest) click to toggle source

The latest installed gems' ri directories. `filter` can be :all or :latest.

A `filter` :all includes all versions of gems and includes gems without ri documentation.

    # File lib/rdoc/ri/paths.rb, line 84
    def self.gemdirs filter = :latest
      ri_paths = {}

      all = Gem::Specification.map do |spec|
        [File.join(spec.doc_dir, 'ri'), spec.name, spec.version]
      end

      if filter == :all then
        gemdirs = []

        all.group_by do |_, name, _|
          name
        end.sort_by do |group, _|
          group
        end.map do |group, items|
          items.sort_by do |_, _, version|
            version
          end.reverse_each do |dir,|
            gemdirs << dir
          end
        end

        return gemdirs
      end

      all.each do |dir, name, ver|
        next unless File.exist? dir

        if ri_paths[name].nil? or ver > ri_paths[name].first then
          ri_paths[name] = [ver, name, dir]
        end
      end

      ri_paths.sort_by { |_, (_, name, _)| name }.map { |k, v| v.last }
    rescue LoadError
      []
    end

home_dir() click to toggle source

The location of the rdoc data in the user's home directory.

Like ::system, ri data in the user's home directory is rare and predates libraries distributed via RubyGems. ri data is rarely generated into this directory.

    # File lib/rdoc/ri/paths.rb, line 129
    def self.home_dir
      HOMEDIR
    end

path(system = true, site = true, home = true, gems = :latest, *extra_dirs) click to toggle source

Returns existing directories from the selected documentation directories as an Array.

See also ::each

    # File lib/rdoc/ri/paths.rb, line 139
    def self.path(system = true, site = true, home = true, gems = :latest, *extra_dirs)
      path = raw_path system, site, home, gems, *extra_dirs

      path.select { |directory| File.directory? directory }
    end

raw_path(system, site, home, gems, *extra_dirs) click to toggle source

Returns selected documentation directories including nonexistent directories.

See also ::each

    # File lib/rdoc/ri/paths.rb, line 151
    def self.raw_path(system, site, home, gems, *extra_dirs)
      path = []

      each(system, site, home, gems, *extra_dirs) do |dir, type|
        path << dir
      end

      path.compact
    end

site_dir() click to toggle source

The location of ri data installed into the site dir.

Historically this was available for documentation installed by Ruby libraries predating RubyGems. It is unlikely to contain any content for modern Ruby installations.

    # File lib/rdoc/ri/paths.rb, line 168
    def self.site_dir
      File.join BASE, 'site'
    end

system_dir() click to toggle source

The location of the built-in ri data.

This data is built automatically when `make` is run when Ruby is installed. If you did not install Ruby by hand you may need to install the documentation yourself. Please consult the documentation for your package manager or Ruby installer for details. You can also use the rdoc-data gem to install system ri data for common versions of Ruby.

    # File lib/rdoc/ri/paths.rb, line 181
    def self.system_dir
      File.join BASE, 'system'
    end