Maintenance of Ruby 2.0.0 will end on February 24, 2016. Read more

In Files

  • rdoc/ri/paths.rb

Class/Module Index [+]



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) click to toggle source

Iterates over each selected path yielding the directory and type.

Yielded types:


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


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


~/.rdoc. Yielded when home is true.


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


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

               # File rdoc/ri/paths.rb, line 46
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

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

  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

gem_dir(name, version) click to toggle source

The ri directory for the gem with gem_name.

               # File rdoc/ri/paths.rb, line 68
def self.gem_dir name, version
  req = "= #{version}"

  spec = Gem::Specification.find_by_name name, req

  File.join spec.doc_dir, 'ri'
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 rdoc/ri/paths.rb, line 83
def self.gemdirs filter = :latest
  require 'rubygems' unless defined?(Gem)

  ri_paths = {}

  all = do |spec|
    [File.join(spec.doc_dir, 'ri'),, spec.version]

  if filter == :all then
    gemdirs = []

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

    return gemdirs

  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]

  ri_paths.sort_by { |_, (_, name, _)| name }.map { |k, v| v.last }
rescue LoadError
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 rdoc/ri/paths.rb, line 130
def self.home_dir
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 rdoc/ri/paths.rb, line 140
def self.path(system = true, site = true, home = true, gems = :latest, *extra_dirs)
  path = raw_path system, site, home, gems, *extra_dirs { |directory| directory }
raw_path(system, site, home, gems, *extra_dirs) click to toggle source

Returns selected documentation directories including nonexistent directories.

See also ::each

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

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

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 rdoc/ri/paths.rb, line 169
def self.site_dir
  File.join BASE, 'site'
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 rdoc/ri/paths.rb, line 182
def self.system_dir
  File.join BASE, 'system'

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit

blog comments powered by Disqus