In Files

  • rubygems/commands/install_command.rb

Class/Module Index [+]

Quicksearch

Gem::Commands::InstallCommand

Gem installer command line tool

See `gem help install`

Public Class Methods

new() click to toggle source
 
               # File rubygems/commands/install_command.rb, line 20
def initialize
  defaults = Gem::DependencyInstaller::DEFAULT_OPTIONS.merge({
    :generate_rdoc     => true,
    :generate_ri       => true,
    :format_executable => false,
    :test              => false,
    :version           => Gem::Requirement.default,
  })

  super 'install', 'Install a gem into the local repository', defaults

  add_install_update_options
  add_local_remote_options
  add_platform_option
  add_version_option
  add_prerelease_option "to be installed. (Only for listed gems)"
end
            

Public Instance Methods

execute() click to toggle source
 
               # File rubygems/commands/install_command.rb, line 104
def execute
  if options[:include_dependencies] then
    alert "`gem install -y` is now default and will be removed"
    alert "use --ignore-dependencies to install only the gems you list"
  end

  installed_gems = []

  ENV.delete 'GEM_PATH' if options[:install_dir].nil? and RUBY_VERSION > '1.9'

  exit_code = 0

  get_all_gem_names.each do |gem_name|
    begin
      inst = Gem::DependencyInstaller.new options
      inst.install gem_name, options[:version]

      inst.installed_gems.each do |spec|
        say "Successfully installed #{spec.full_name}"
      end

      installed_gems.push(*inst.installed_gems)
    rescue Gem::InstallError => e
      alert_error "Error installing #{gem_name}:\n\t#{e.message}"
      exit_code |= 1
    rescue Gem::GemNotFoundException => e
      show_lookup_failure e.name, e.version, e.errors

      exit_code |= 2
    end
  end

  unless installed_gems.empty? then
    gems = installed_gems.length == 1 ? 'gem' : 'gems'
    say "#{installed_gems.length} #{gems} installed"

    # NOTE: *All* of the RI documents must be generated first.  For some
    # reason, RI docs cannot be generated after any RDoc documents are
    # generated.

    if options[:generate_ri] then
      installed_gems.each do |gem|
        Gem::DocManager.new(gem, options[:rdoc_args]).generate_ri
      end

      Gem::DocManager.update_ri_cache
    end

    if options[:generate_rdoc] then
      installed_gems.each do |gem|
        Gem::DocManager.new(gem, options[:rdoc_args]).generate_rdoc
      end
    end

    if options[:test] then
      installed_gems.each do |spec|
        gem_spec = Gem::SourceIndex.from_installed_gems.find_name(spec.name, spec.version.version).first
        result = Gem::Validator.new.unit_test(gem_spec)
        if result and not result.passed?
          unless ask_yes_no("...keep Gem?", true)
            require 'rubygems/uninstaller'
            Gem::Uninstaller.new(spec.name, :version => spec.version.version).uninstall
          end
        end
      end
    end
  end

  raise Gem::SystemExitException, exit_code
end