In Files

  • rubygems/commands/update_command.rb

Class/Module Index [+]

Quicksearch

Gem::Commands::UpdateCommand

Public Class Methods

new() click to toggle source
 
               # File rubygems/commands/update_command.rb, line 21
def initialize
  super 'update', 'Update installed gems to the latest version',
    :document => %w[rdoc ri],
    :force    => false

  add_install_update_options

  OptionParser.accept Gem::Version do |value|
    Gem::Version.new value

    value
  end

  add_option('--system [VERSION]', Gem::Version,
             'Update the RubyGems system software') do |value, options|
    value = true unless value

    options[:system] = value
  end

  add_local_remote_options
  add_platform_option
  add_prerelease_option "as update targets"

  @updated   = []
  @installer = nil
end
            

Public Instance Methods

execute() click to toggle source
 
               # File rubygems/commands/update_command.rb, line 86
def execute
  if options[:system] then
    update_rubygems
    return
  end

  say "Updating installed gems"

  hig = highest_installed_gems

  gems_to_update = which_to_update hig, options[:args].uniq

  updated = update_gems gems_to_update

  updated_names = updated.map { |spec| spec.name }
  not_updated_names = options[:args].uniq - updated_names

  if updated.empty? then
    say "Nothing to update"
  else
    say "Gems updated: #{updated_names.join(' ')}"
    say "Gems already up-to-date: #{not_updated_names.join(' ')}" unless not_updated_names.empty?
  end
end
            
rubygems_target_version() click to toggle source
 
               # File rubygems/commands/update_command.rb, line 169
def rubygems_target_version
  version = options[:system]
  update_latest = version == true

  if update_latest then
    version     = Gem::Version.new     Gem::VERSION
    requirement = Gem::Requirement.new ">= #{Gem::VERSION}"
  else
    version     = Gem::Version.new     version
    requirement = Gem::Requirement.new version
  end

  rubygems_update         = Gem::Specification.new
  rubygems_update.name    = 'rubygems-update'
  rubygems_update.version = version

  hig = {
    'rubygems-update' => rubygems_update
  }

  gems_to_update = which_to_update hig, options[:args], :system
  _, up_ver   = gems_to_update.first

  target = if update_latest then
             up_ver
           else
             version
           end

  return target, requirement
end
            
update_gem(name, version = Gem::Requirement.default) click to toggle source
 
               # File rubygems/commands/update_command.rb, line 201
def update_gem name, version = Gem::Requirement.default
  return if @updated.any? { |spec| spec.name == name }

  update_options = options.dup
  update_options[:prerelease] = version.prerelease?

  @installer = Gem::DependencyInstaller.new update_options

  say "Updating #{name}"
  begin
    @installer.install name, Gem::Requirement.new(version)
  rescue Gem::InstallError, Gem::DependencyError => e
    alert_error "Error installing #{name}:\n\t#{e.message}"
  end

  @installer.installed_gems.each do |spec|
    @updated << spec
  end
end
            
update_gems(gems_to_update) click to toggle source
 
               # File rubygems/commands/update_command.rb, line 221
def update_gems gems_to_update
  gems_to_update.uniq.sort.each do |(name, version)|
    update_gem name, version
  end

  @updated
end
            
update_rubygems() click to toggle source

Update RubyGems software to the latest version.

 
               # File rubygems/commands/update_command.rb, line 232
def update_rubygems
  check_update_arguments

  version, requirement = rubygems_target_version

  check_latest_rubygems version

  update_gem 'rubygems-update', version

  installed_gems = Gem::Specification.find_all_by_name 'rubygems-update', requirement
  version        = installed_gems.last.version

  install_rubygems version
end
            
which_to_update(highest_installed_gems, gem_names, system = false) click to toggle source
 
               # File rubygems/commands/update_command.rb, line 260
def which_to_update highest_installed_gems, gem_names, system = false
  result = []

  highest_installed_gems.each do |l_name, l_spec|
    next if not gem_names.empty? and
            gem_names.none? { |name| name == l_spec.name }

    highest_remote_ver = highest_remote_version l_spec

    if system or (l_spec.version < highest_remote_ver) then
      result << [l_spec.name, [l_spec.version, highest_remote_ver].max]
    end
  end

  result
end
            

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 Documenting-ruby.org.