模块 RDoc::RI::Paths

ri 数据所在的目录。Paths 可以通过 ::each 枚举,或者通过 ::system_dir::site_dir::home_dir::gem_dir 单独查询。

公共类方法

each(system = true, site = true, home = true, gems = :latest, *extra_dirs) { |directory, type| ... } 点击切换源代码

迭代每个选定的路径,产生目录和类型。

产生的类型

:system

Ruby 的 ri 数据存储位置。当 system 为 true 时产生。

:site

已安装库的 ri 存储位置。当 site 为 true 时产生。通常这里不存储 ri 数据。

:home

~/.rdoc。当 home 为 true 时产生。

:gem

已安装 gem 的 ri 数据。当 gems 为 true 时产生。

:extra

来自命令行的 ri 数据目录。为 extra_dirs 中的每个条目产生。

# File rdoc/ri/paths.rb, line 33
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) 点击切换源代码

具有 gem_name 的 gem 的 ri 目录。

# File rdoc/ri/paths.rb, line 55
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) 点击切换源代码

最近安装的 gem 的 ri 目录。filter 可以是 :all 或 :latest。

filter :all 包括所有版本的 gem,以及没有 ri 文档的 gem。

# File rdoc/ri/paths.rb, line 70
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() 点击切换源代码

用户主目录中 rdoc 数据的位置。

与 ::system 类似,用户主目录中的 ri 数据很少见,并且早于通过 RubyGems 分发的库。ri 数据很少生成到此目录中。

# File rdoc/ri/paths.rb, line 115
def self.home_dir
  HOMEDIR
end
path(system = true, site = true, home = true, gems = :latest, *extra_dirs) 点击切换源代码

从选定的文档目录中返回现有目录作为数组。

另请参阅 ::each

# File rdoc/ri/paths.rb, line 125
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) 点击切换源代码

返回选定的文档目录,包括不存在的目录。

另请参阅 ::each

# File rdoc/ri/paths.rb, line 137
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() 点击切换源代码

安装到站点目录中的 ri 数据的位置。

历史上,这可用于由早于 RubyGems 的 Ruby 库安装的文档。它不太可能包含现代 Ruby 安装的任何内容。

# File rdoc/ri/paths.rb, line 154
def self.site_dir
  File.join BASE, 'site'
end
system_dir() 点击切换源代码

内置 ri 数据的位置。

此数据在安装 Ruby 时运行 “make” 时自动构建。如果您没有手动安装 Ruby,您可能需要自行安装文档。请查阅您的包管理器或 Ruby 安装程序的文档以获取详细信息。您还可以使用 rdoc-data gem 为常见版本的 Ruby 安装系统 ri 数据。

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