Namespace

Class Index [+]

Quicksearch

Gem


RubyGems is the Ruby standard for publishing and managing third party libraries.

For user documentation, see:

For gem developer documentation see:

Further RubyGems documentation can be found at:

RubyGems Plugins

As of RubyGems 1.3.2, RubyGems will load plugins installed in gems or $LOAD_PATH. Plugins must be named ‘rubygems_plugin’ are discovered via Gem::find_files then loaded. Take care when implementing a plugin as your plugin file may be loaded multiple times if multiple versions of your gem are installed.

For an example plugin, see the graph gem which adds a `gem graph` command.

RubyGems Defaults, Packaging

RubyGems defaults are stored in rubygems/defaults.rb. If you’re packaging RubyGems or implementing Ruby you can change RubyGems’ defaults.

For RubyGems packagers, provide lib/rubygems/operating_system.rb and override any defaults from lib/rubygems/defaults.rb.

For Ruby implementers, provide lib/rubygems/#{RUBY_ENGINE}.rb and override any defaults from lib/rubygems/defaults.rb.

If you need RubyGems to perform extra work on install or uninstall, your defaults override file can set pre and post install and uninstall hooks. See Gem::pre_install, Gem::pre_uninstall, Gem::post_install, Gem::post_uninstall.

Bugs

You can submit bugs to the RubyGems bug tracker on RubyForge

Credits

RubyGems is currently maintained by Eric Hodel.

RubyGems was originally developed at RubyConf 2003 by:

Contributors:

(If your name is missing, PLEASE let us know!)

Thanks!

-The RubyGems Team

Constants

RubyGemsVersion
(Not documented)
ConfigMap

Configuration settings from ::RbConfig

DIRECTORIES

Default directories in a gem repository

WIN_PATTERNS

An Array of Regexps that match windows ruby platforms.

MARSHAL_SPEC_DIR

Location of Marshal quick gemspecs on remote repositories

YAML_SPEC_DIR

Location of legacy YAML quick gemspecs on remote repositories

Attributes

ssl_available[W]

Is SSL available?

loaded_specs[R]

Hash of loaded Gem::Specification keyed by name

post_install_hooks[R]

The list of hooks to be run before Gem::Install#install does any work

post_uninstall_hooks[R]

The list of hooks to be run before Gem::Uninstall#uninstall does any work

pre_install_hooks[R]

The list of hooks to be run after Gem::Install#install is finished

pre_uninstall_hooks[R]

The list of hooks to be run after Gem::Uninstall#uninstall is finished

Public Class Methods

activate(gem, *version_requirements) click to toggle source

Activates an installed gem matching gem. The gem must satisfy version_requirements.

Returns true if the gem is activated, false if it is already loaded, or an exception otherwise.

Gem#activate adds the library paths in gem to $LOAD_PATH. Before a Gem is activated its required Gems are activated. If the version information is omitted, the highest version Gem of the supplied name is loaded. If a Gem is not found that meets the version requirements or a required Gem is not found, a Gem::LoadError is raised.

More information on version requirements can be found in the Gem::Requirement and Gem::Version documentation.

# File lib/rubygems.rb, line 242
  def self.activate(gem, *version_requirements)
    if version_requirements.last.is_a?(Hash)
      options = version_requirements.pop
    else
      options = {}
    end

    sources = options[:sources] || []

    if version_requirements.empty? then
      version_requirements = Gem::Requirement.default
    end

    unless gem.respond_to?(:name) and
           gem.respond_to?(:version_requirements) then
      gem = Gem::Dependency.new(gem, version_requirements)
    end

    matches = Gem.source_index.find_name(gem.name, gem.version_requirements)
    report_activate_error(gem) if matches.empty?

    if @loaded_specs[gem.name] then
      # This gem is already loaded.  If the currently loaded gem is not in the
      # list of candidate gems, then we have a version conflict.
      existing_spec = @loaded_specs[gem.name]

      unless matches.any? { |spec| spec.version == existing_spec.version } then
         sources_message = sources.map { |spec| spec.full_name }
         stack_message = @loaded_stacks[gem.name].map { |spec| spec.full_name }

         msg = "can't activate #{gem} for #{sources_message.inspect}, "
         msg << "already activated #{existing_spec.full_name} for "
         msg << "#{stack_message.inspect}"

         e = Gem::LoadError.new msg
         e.name = gem.name
         e.version_requirement = gem.version_requirements

         raise e
      end

      return false
    end

    # new load
    spec = matches.last
    return false if spec.loaded?

    spec.loaded = true
    @loaded_specs[spec.name] = spec
    @loaded_stacks[spec.name] = sources.dup

    # Load dependent gems first
    spec.runtime_dependencies.each do |dep_gem|
      activate dep_gem, :sources => [spec, *sources]
    end

    # bin directory must come before library directories
    spec.require_paths.unshift spec.bindir if spec.bindir

    require_paths = spec.require_paths.map do |path|
      File.join spec.full_gem_path, path
    end

    sitelibdir = ConfigMap[:sitelibdir]

    # gem directories must come after -I and ENV['RUBYLIB']
    insert_index = load_path_insert_index

    if insert_index then
      # gem directories must come after -I and ENV['RUBYLIB']
      $LOAD_PATH.insert(insert_index, *require_paths)
    else
      # we are probably testing in core, -I and RUBYLIB don't apply
      $LOAD_PATH.unshift(*require_paths)
    end

    return true
  end
all_load_paths() click to toggle source

An Array of all possible load paths for all versions of all gems in the Gem installation.

# File lib/rubygems.rb, line 326
  def self.all_load_paths
    result = []

    Gem.path.each do |gemdir|
      each_load_path all_partials(gemdir) do |load_path|
        result << load_path
      end
    end

    result
  end
available?(gem, *requirements) click to toggle source

See if a given gem is available.

# File lib/rubygems.rb, line 350
  def self.available?(gem, *requirements)
    requirements = Gem::Requirement.default if requirements.empty?

    unless gem.respond_to?(:name) and
           gem.respond_to?(:version_requirements) then
      gem = Gem::Dependency.new gem, requirements
    end

    !Gem.source_index.search(gem).empty?
  end
bin_path(name, exec_name = nil, *version_requirements) click to toggle source

Find the full path to the executable for gem name. If the exec_name is not given, the gem’s default_executable is chosen, otherwise the specifed executable’s path is returned. version_requirements allows you to specify specific gem versions.

# File lib/rubygems.rb, line 367
  def self.bin_path(name, exec_name = nil, *version_requirements)
    version_requirements = Gem::Requirement.default if
      version_requirements.empty?
    spec = Gem.source_index.find_name(name, version_requirements).last

    raise Gem::GemNotFoundException,
          "can't find gem #{name} (#{version_requirements})" unless spec

    exec_name ||= spec.default_executable

    unless exec_name
      msg = "no default executable for #{spec.full_name}"
      raise Gem::Exception, msg
    end

    unless spec.executables.include? exec_name
      msg = "can't find executable #{exec_name} for #{spec.full_name}"
      raise Gem::Exception, msg
    end

    File.join(spec.full_gem_path, spec.bindir, exec_name)
  end
binary_mode() click to toggle source

The mode needed to read a file as straight binary.

# File lib/rubygems.rb, line 393
  def self.binary_mode
    @binary_mode ||= RUBY_VERSION > '1.9' ? 'rb:ascii-8bit' : 'rb'
  end
bindir(install_dir=Gem.dir) click to toggle source

The path where gem executables are to be installed.

# File lib/rubygems.rb, line 400
  def self.bindir(install_dir=Gem.dir)
    return File.join(install_dir, 'bin') unless
      install_dir.to_s == Gem.default_dir
    Gem.default_bindir
  end
clear_paths() click to toggle source

Reset the dir and path values. The next time dir or path is requested, the values will be calculated from scratch. This is mainly used by the unit tests to provide test isolation.

# File lib/rubygems.rb, line 411
  def self.clear_paths
    @gem_home = nil
    @gem_path = nil
    @user_home = nil

    @@source_index = nil

    MUTEX.synchronize do
      @searcher = nil
    end
  end
config_file() click to toggle source

The path to standard location of the user’s .gemrc file.

# File lib/rubygems.rb, line 426
  def self.config_file
    File.join Gem.user_home, '.gemrc'
  end
configuration() click to toggle source

The standard configuration object for gems.

# File lib/rubygems.rb, line 433
  def self.configuration
    @configuration ||= Gem::ConfigFile.new []
  end
configuration=(config) click to toggle source

Use the given configuration object (which implements the ConfigFile protocol) as the standard configuration object.

# File lib/rubygems.rb, line 441
  def self.configuration=(config)
    @configuration = config
  end
datadir(gem_name) click to toggle source

The path the the data directory specified by the gem name. If the package is not available as a gem, return nil.

# File lib/rubygems.rb, line 449
  def self.datadir(gem_name)
    spec = @loaded_specs[gem_name]
    return nil if spec.nil?
    File.join(spec.full_gem_path, 'data', gem_name)
  end
default_bindir() click to toggle source

The default directory for binaries

# File lib/rubygems/defaults.rb, line 69
  def self.default_bindir
    if defined? RUBY_FRAMEWORK_VERSION then # mac framework support
      '/usr/bin'
    else # generic install
      ConfigMap[:bindir]
    end
  end
default_dir() click to toggle source

Default home directory path to be used if an alternate value is not specified in the environment

# File lib/rubygems/defaults.rb, line 19
  def self.default_dir
    if defined? RUBY_FRAMEWORK_VERSION then
      File.join File.dirname(ConfigMap[:sitedir]), 'Gems',
                ConfigMap[:ruby_version]
    # 1.9.2dev reverted to 1.8 style path
    elsif RUBY_VERSION > '1.9' and RUBY_VERSION < '1.9.2' then
      File.join(ConfigMap[:libdir], ConfigMap[:ruby_install_name], 'gems',
                ConfigMap[:ruby_version])
    else
      File.join(ConfigMap[:libdir], ruby_engine, 'gems',
                ConfigMap[:ruby_version])
    end
  end
default_exec_format() click to toggle source

Deduce Ruby’s —program-prefix and —program-suffix from its install name

# File lib/rubygems/defaults.rb, line 55
  def self.default_exec_format
    exec_format = ConfigMap[:ruby_install_name].sub('ruby', '%s') rescue '%s'

    unless exec_format =~ /%s/ then
      raise Gem::Exception,
        "[BUG] invalid exec_format #{exec_format.inspect}, no %s"
    end

    exec_format
  end
default_path() click to toggle source

Default gem load path

# File lib/rubygems/defaults.rb, line 44
  def self.default_path
    if File.exist?(Gem.user_home)
      [user_dir, default_dir]
    else
      [default_dir]
    end
  end
default_sources() click to toggle source

An Array of the default sources that come with RubyGems

# File lib/rubygems/defaults.rb, line 11
  def self.default_sources
    %w[http://gems.rubyforge.org/]
  end
default_system_source_cache_dir() click to toggle source

The default system-wide source info cache directory

# File lib/rubygems/defaults.rb, line 80
  def self.default_system_source_cache_dir
    File.join Gem.dir, 'source_cache'
  end
default_user_source_cache_dir() click to toggle source

The default user-specific source info cache directory

# File lib/rubygems/defaults.rb, line 87
  def self.default_user_source_cache_dir
    File.join Gem.user_home, '.gem', 'source_cache'
  end
deflate(data) click to toggle source

A Zlib::Deflate.deflate wrapper

# File lib/rubygems.rb, line 458
  def self.deflate(data)
    require 'zlib'
    Zlib::Deflate.deflate data
  end
dir() click to toggle source

The path where gems are to be installed.

# File lib/rubygems.rb, line 466
  def self.dir
    @gem_home ||= nil
    set_home(ENV['GEM_HOME'] || Gem.configuration.home || default_dir) unless @gem_home
    @gem_home
  end
ensure_gem_subdirectories(gemdir) click to toggle source

Quietly ensure the named Gem directory contains all the proper subdirectories. If we can’t create a directory due to a permission problem, then we will silently continue.

# File lib/rubygems.rb, line 499
  def self.ensure_gem_subdirectories(gemdir)
    require 'fileutils'

    Gem::DIRECTORIES.each do |filename|
      fn = File.join gemdir, filename
      FileUtils.mkdir_p fn rescue nil unless File.exist? fn
    end
  end
ensure_ssl_available() click to toggle source

Ensure that SSL is available. Throw an exception if it is not.

# File lib/rubygems/gem_openssl.rb, line 31
    def ensure_ssl_available
      unless ssl_available?
        fail Gem::Exception, "SSL is not installed on this system"
      end
    end
find_files(path) click to toggle source

Returns a list of paths matching file that can be used by a gem to pick up features from other gems. For example:

  Gem.find_files('rdoc/discover').each do |path| load path end

find_files search $LOAD_PATH for files as well as gems.

Note that find_files will return all files even if they are from different versions of the same gem.

# File lib/rubygems.rb, line 519
  def self.find_files(path)
    load_path_files = $LOAD_PATH.map do |load_path|
      files = Dir["#{File.expand_path path, load_path}#{Gem.suffix_pattern}"]

      files.select do |load_path_file|
        File.file? load_path_file.untaint
      end
    end.flatten

    specs = searcher.find_all path

    specs_files = specs.map do |spec|
      searcher.matching_files spec, path
    end.flatten

    (load_path_files + specs_files).flatten.uniq
  end
gunzip(data) click to toggle source

Zlib::GzipReader wrapper that unzips data.

# File lib/rubygems.rb, line 573
  def self.gunzip(data)
    require 'stringio'
    require 'zlib'
    data = StringIO.new data

    Zlib::GzipReader.new(data).read
  end
gzip(data) click to toggle source

Zlib::GzipWriter wrapper that zips data.

# File lib/rubygems.rb, line 584
  def self.gzip(data)
    require 'stringio'
    require 'zlib'
    zipped = StringIO.new

    Zlib::GzipWriter.wrap zipped do |io| io.write data end

    zipped.string
  end
inflate(data) click to toggle source

A Zlib::Inflate#inflate wrapper

# File lib/rubygems.rb, line 597
  def self.inflate(data)
    require 'zlib'
    Zlib::Inflate.inflate data
  end
latest_load_paths() click to toggle source

Return a list of all possible load paths for the latest version for all gems in the Gem installation.

# File lib/rubygems.rb, line 606
  def self.latest_load_paths
    result = []

    Gem.path.each do |gemdir|
      each_load_path(latest_partials(gemdir)) do |load_path|
        result << load_path
      end
    end

    result
  end
load_path_insert_index() click to toggle source

The index to insert activated gem paths into the $LOAD_PATH.

Defaults to the site lib directory unless gem_prelude.rb has loaded paths, then it inserts the activated gem’s paths before the gem_prelude.rb paths so you can override the gem_prelude.rb default $LOAD_PATH paths.

# File lib/rubygems.rb, line 645
  def self.load_path_insert_index
    index = $LOAD_PATH.index ConfigMap[:sitelibdir]

    $LOAD_PATH.each_with_index do |path, i|
      if path.instance_variables.include?(:@gem_prelude_index) or
        path.instance_variables.include?('@gem_prelude_index') then
        index = i
        break
      end
    end

    index
  end
location_of_caller() click to toggle source

The file name and line number of the caller of the caller of this method.

# File lib/rubygems.rb, line 662
  def self.location_of_caller
    caller[1] =~ /(.*?):(\d+).*?$/i
    file = $1
    lineno = $2.to_i

    [file, lineno]
  end
marshal_version() click to toggle source

The version of the Marshal format for your Ruby.

# File lib/rubygems.rb, line 673
  def self.marshal_version
    "#{Marshal::MAJOR_VERSION}.#{Marshal::MINOR_VERSION}"
  end
path() click to toggle source

Array of paths to search for Gems.

# File lib/rubygems.rb, line 680
  def self.path
    @gem_path ||= nil

    unless @gem_path then
      paths = [ENV['GEM_PATH'] || Gem.configuration.path || default_path]

      if defined?(APPLE_GEM_HOME) and not ENV['GEM_PATH'] then
        paths << APPLE_GEM_HOME
      end

      set_paths paths.compact.join(File::PATH_SEPARATOR)
    end

    @gem_path
  end
platforms() click to toggle source

Array of platforms this RubyGems supports.

# File lib/rubygems.rb, line 706
  def self.platforms
    @platforms ||= []
    if @platforms.empty?
      @platforms = [Gem::Platform::RUBY, Gem::Platform.local]
    end
    @platforms
  end
platforms=(platforms) click to toggle source

Set array of platforms this RubyGems supports (primarily for testing).

# File lib/rubygems.rb, line 699
  def self.platforms=(platforms)
    @platforms = platforms
  end
post_install(&hook) click to toggle source

Adds a post-install hook that will be passed an Gem::Installer instance when Gem::Installer#install is called

# File lib/rubygems.rb, line 718
  def self.post_install(&hook)
    @post_install_hooks << hook
  end
post_uninstall(&hook) click to toggle source

Adds a post-uninstall hook that will be passed a Gem::Uninstaller instance and the spec that was uninstalled when Gem::Uninstaller#uninstall is called

# File lib/rubygems.rb, line 727
  def self.post_uninstall(&hook)
    @post_uninstall_hooks << hook
  end
pre_install(&hook) click to toggle source

Adds a pre-install hook that will be passed an Gem::Installer instance when Gem::Installer#install is called

# File lib/rubygems.rb, line 735
  def self.pre_install(&hook)
    @pre_install_hooks << hook
  end
pre_uninstall(&hook) click to toggle source

Adds a pre-uninstall hook that will be passed an Gem::Uninstaller instance and the spec that will be uninstalled when Gem::Uninstaller#uninstall is called

# File lib/rubygems.rb, line 744
  def self.pre_uninstall(&hook)
    @pre_uninstall_hooks << hook
  end
prefix() click to toggle source

The directory prefix this RubyGems was installed at.

# File lib/rubygems.rb, line 751
  def self.prefix
    prefix = File.dirname File.expand_path(__FILE__)

    if File.dirname(prefix) == File.expand_path(ConfigMap[:sitelibdir]) or
       File.dirname(prefix) == File.expand_path(ConfigMap[:libdir]) or
       'lib' != File.basename(prefix) then
      nil
    else
      File.dirname prefix
    end
  end
promote_load_path(gem_name, over_name) click to toggle source

Promotes the load paths of the gem_name over the load paths of over_name. Useful for allowing one gem to override features in another using find_files.

# File lib/rubygems.rb, line 768
  def self.promote_load_path(gem_name, over_name)
    gem = Gem.loaded_specs[gem_name]
    over = Gem.loaded_specs[over_name]

    raise ArgumentError, "gem #{gem_name} is not activated" if gem.nil?
    raise ArgumentError, "gem #{over_name} is not activated" if over.nil?

    last_gem_path = File.join gem.full_gem_path, gem.require_paths.last

    over_paths = over.require_paths.map do |path|
      File.join over.full_gem_path, path
    end

    over_paths.each do |path|
      $LOAD_PATH.delete path
    end

    gem = $LOAD_PATH.index(last_gem_path) + 1

    $LOAD_PATH.insert(gem, *over_paths)
  end
read_binary(path) click to toggle source

Safely read a file in binary mode on all platforms.

# File lib/rubygems.rb, line 804
  def self.read_binary(path)
    File.open path, binary_mode do |f| f.read end
  end
refresh() click to toggle source

Refresh source_index from disk and clear searcher.

# File lib/rubygems.rb, line 793
  def self.refresh
    source_index.refresh!

    MUTEX.synchronize do
      @searcher = nil
    end
  end
required_location(gemname, libfile, *requirements) click to toggle source

Full path to libfile in gemname. Searches for the latest gem unless requirements is given.

# File lib/rubygems.rb, line 836
  def self.required_location(gemname, libfile, *requirements)
    requirements = Gem::Requirement.default if requirements.empty?

    matches = Gem.source_index.find_name gemname, requirements

    return nil if matches.empty?

    spec = matches.last
    spec.require_paths.each do |path|
      result = File.join spec.full_gem_path, path, libfile
      return result if File.exist? result
    end

    nil
  end
ruby() click to toggle source

The path to the running Ruby interpreter.

# File lib/rubygems.rb, line 855
  def self.ruby
    if @ruby.nil? then
      @ruby = File.join(ConfigMap[:bindir],
                        ConfigMap[:ruby_install_name])
      @ruby << ConfigMap[:EXEEXT]

      # escape string in case path to ruby executable contain spaces.
      @ruby.sub!(/.*\s.*/m, '"\&"')
    end

    @ruby
  end
ruby_engine() click to toggle source

A wrapper around RUBY_ENGINE const that may not be defined

# File lib/rubygems/defaults.rb, line 94
  def self.ruby_engine
    if defined? RUBY_ENGINE then
      RUBY_ENGINE
    else
      'ruby'
    end
  end
ruby_version() click to toggle source

A Gem::Version for the currently running ruby.

# File lib/rubygems.rb, line 871
  def self.ruby_version
    return @ruby_version if defined? @ruby_version
    version = RUBY_VERSION.dup

    if defined?(RUBY_PATCHLEVEL) && RUBY_PATCHLEVEL != -1 then
      version << ".#{RUBY_PATCHLEVEL}"
    elsif defined?(RUBY_REVISION) then
      version << ".dev.#{RUBY_REVISION}"
    end

    @ruby_version = Gem::Version.new version
  end
searcher() click to toggle source

The GemPathSearcher object used to search for matching installed gems.

# File lib/rubygems.rb, line 887
  def self.searcher
    MUTEX.synchronize do
      @searcher ||= Gem::GemPathSearcher.new
    end
  end
source_index() click to toggle source

Returns the Gem::SourceIndex of specifications that are in the Gem.path

# File lib/rubygems.rb, line 943
  def self.source_index
    @@source_index ||= SourceIndex.from_installed_gems
  end
sources() click to toggle source

Returns an Array of sources to fetch remote gems from. If the sources list is empty, attempts to load the “sources” gem, then uses default_sources if it is not installed.

# File lib/rubygems.rb, line 952
  def self.sources
    if @sources.empty? then
      begin
        gem 'sources', '> 0.0.1'
        require 'sources'
      rescue LoadError
        @sources = default_sources
      end
    end

    @sources
  end
sources=(new_sources) click to toggle source

Need to be able to set the sources without calling Gem.sources.replace since that would cause an infinite loop.

# File lib/rubygems.rb, line 969
  def self.sources=(new_sources)
    @sources = new_sources
  end
ssl_available?() click to toggle source

Is SSL (used by the signing commands) available on this platform?

# File lib/rubygems/gem_openssl.rb, line 19
    def ssl_available?
      @ssl_available
    end
suffix_pattern() click to toggle source

Glob pattern for require-able path suffixes.

# File lib/rubygems.rb, line 976
  def self.suffix_pattern
    @suffix_pattern ||= "{#{suffixes.join(',')}}"
  end
suffixes() click to toggle source

Suffixes for require-able paths.

# File lib/rubygems.rb, line 983
  def self.suffixes
    ['', '.rb', '.rbw', '.so', '.bundle', '.dll', '.sl', '.jar']
  end
time(msg, width = 0, display = Gem.configuration.verbose) click to toggle source

Prints the amount of time the supplied block takes to run using the debug UI output.

# File lib/rubygems.rb, line 991
  def self.time(msg, width = 0, display = Gem.configuration.verbose)
    now = Time.now

    value = yield

    elapsed = Time.now - now

    ui.say "%2$*1$s: %3$3.3fs" % [-width, msg, elapsed] if display

    value
  end
ui() click to toggle source

Lazily loads DefaultUserInteraction and returns the default UI.

# File lib/rubygems.rb, line 1006
  def self.ui
    require 'rubygems/user_interaction'

    Gem::DefaultUserInteraction.ui
  end
use_paths(home, paths=[]) click to toggle source

Use the home and paths values for Gem.dir and Gem.path. Used mainly by the unit tests to provide environment isolation.

# File lib/rubygems.rb, line 1016
  def self.use_paths(home, paths=[])
    clear_paths
    set_home(home) if home
    set_paths(paths.join(File::PATH_SEPARATOR)) if paths
  end
user_dir() click to toggle source

Path for gems in the user’s home directory

# File lib/rubygems/defaults.rb, line 36
  def self.user_dir
    File.join(Gem.user_home, '.gem', ruby_engine,
              ConfigMap[:ruby_version])
  end
user_home() click to toggle source

The home directory for the user.

# File lib/rubygems.rb, line 1025
  def self.user_home
    @user_home ||= find_home
  end
win_platform?() click to toggle source

Is this a windows platform?

# File lib/rubygems.rb, line 1032
  def self.win_platform?
    if @@win_platform.nil? then
      @@win_platform = !!WIN_PATTERNS.find { |r| RUBY_PLATFORM =~ r }
    end

    @@win_platform
  end

Private Class Methods

all_partials(gemdir) click to toggle source

Return all the partial paths in gemdir.

# File lib/rubygems.rb, line 341
  def self.all_partials(gemdir)
    Dir[File.join(gemdir, 'gems/*')]
  end
each_load_path(partials) click to toggle source

Expand each partial gem path with each of the required paths specified in the Gem spec. Each expanded path is yielded.

# File lib/rubygems.rb, line 476
  def self.each_load_path(partials)
    partials.each do |gp|
      base = File.basename(gp)
      specfn = File.join(dir, "specifications", base + ".gemspec")
      if File.exist?(specfn)
        spec = eval(File.read(specfn))
        spec.require_paths.each do |rp|
          yield(File.join(gp, rp))
        end
      else
        filename = File.join(gp, 'lib')
        yield(filename) if File.exist?(filename)
      end
    end
  end
find_home() click to toggle source

Finds the user’s home directory.

# File lib/rubygems.rb, line 548
  def self.find_home
    ['HOME', 'USERPROFILE'].each do |homekey|
      return ENV[homekey] if ENV[homekey]
    end

    if ENV['HOMEDRIVE'] && ENV['HOMEPATH'] then
      return "#{ENV['HOMEDRIVE']}#{ENV['HOMEPATH']}"
    end

    begin
      File.expand_path("~")
    rescue
      if File::ALT_SEPARATOR then
          "C:/"
      else
          "/"
      end
    end
  end
latest_partials(gemdir) click to toggle source

Return only the latest partial paths in the given gemdir.

# File lib/rubygems.rb, line 621
  def self.latest_partials(gemdir)
    latest = {}
    all_partials(gemdir).each do |gp|
      base = File.basename(gp)
      if base =~ /(.*)-((\d+\.)*\d+)/ then
        name, version = $1, $2
        ver = Gem::Version.new(version)
        if latest[name].nil? || ver > latest[name][0]
          latest[name] = [ver, gp]
        end
      end
    end
    latest.collect { |k,v| v[1] }
  end
report_activate_error(gem) click to toggle source

Report a load error during activation. The message of load error depends on whether it was a version mismatch or if there are not gems of any version by the requested name.

# File lib/rubygems.rb, line 813
  def self.report_activate_error(gem)
    matches = Gem.source_index.find_name(gem.name)

    if matches.empty? then
      error = Gem::LoadError.new(
          "Could not find RubyGem #{gem.name} (#{gem.version_requirements})\n")
    else
      error = Gem::LoadError.new(
          "RubyGem version error: " +
          "#{gem.name}(#{matches.first.version} not #{gem.version_requirements})\n")
    end

    error.name = gem.name
    error.version_requirement = gem.version_requirements
    raise error
  end
set_home(home) click to toggle source

Set the Gem home directory (as reported by Gem.dir).

# File lib/rubygems.rb, line 896
  def self.set_home(home)
    home = home.gsub(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR
    @gem_home = home
    ensure_gem_subdirectories(@gem_home)
  end
set_paths(gpaths) click to toggle source

Set the Gem search path (as reported by Gem.path).

# File lib/rubygems.rb, line 907
  def self.set_paths(gpaths)
    if gpaths
      @gem_path = gpaths.split(File::PATH_SEPARATOR)

      if File::ALT_SEPARATOR then
        @gem_path.map! do |path|
          path.gsub File::ALT_SEPARATOR, File::SEPARATOR
        end
      end

      @gem_path << Gem.dir
    else
      # TODO: should this be Gem.default_path instead?
      @gem_path = [Gem.dir]
    end

    @gem_path.uniq!
    @gem_path.each do |path|
      if 0 == File.expand_path(path).index(Gem.user_home)
        next unless File.directory? Gem.user_home
        unless win_platform? then
          # only create by matching user
          if Etc.getpwuid.nil? || Etc.getpwuid.uid != File::Stat.new(Gem.user_home).uid
            next
          end
        end
      end
      ensure_gem_subdirectories path
    end
  end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.