Class: Gem::Commands::UpdateCommand
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
| Class Chain: 
          self,
          ::Gem::Command
         | |
| Instance Chain: | |
| Inherits: | Gem::Command 
 | 
| Defined in: | lib/rubygems/commands/update_command.rb | 
Class Attribute Summary
::Gem::Command - Inherited
| .build_args | Arguments used when building gems. | 
| .build_args=, .extra_args, .extra_args= | |
Class Method Summary
- .new ⇒ UpdateCommand constructor
::Gem::Command - Inherited
| .add_common_option, | |
| .add_specific_extra_args | Add a list of extra arguments for the given command. | 
| .common_options, | |
| .new | Initializes a generic gem command named  | 
| .specific_extra_args | Return an array of extra arguments for the command. | 
| .specific_extra_args_hash | Accessor for the specific extra args hash (self initializing). | 
Instance Attribute Summary
::Gem::LocalRemoteOptions - Included
| #both? | Is fetching of local and remote information enabled? | 
| #local? | Is local fetching enabled? | 
| #remote? | Is remote fetching enabled? | 
::Gem::Command - Inherited
| #defaults | The default options for the command. | 
| #program_name | The name of the command for command-line invocation. | 
| #summary | A short description of the command. | 
| #command | The name of the command. | 
| #options | The options for the command. | 
::Gem::DefaultUserInteraction - Included
Instance Method Summary
- #execute
- #rubygems_target_version
- #update_gem(name, version = Gem::Requirement.default)
- #update_gems(gems_to_update)
- 
    
      #update_rubygems  
    
    Update RubyGems software to the latest version. 
- #which_to_update(highest_installed_gems, gem_names, system = false)
::Gem::VersionOption - Included
| #add_platform_option | Add the –platform option to the option parser. | 
| #add_prerelease_option | Add the –prerelease option to the option parser. | 
| #add_version_option | Add the –version option to the option parser. | 
::Gem::LocalRemoteOptions - Included
| #accept_uri_http | Allows OptionParser to handle HTTP URIs. | 
| #add_bulk_threshold_option | Add the –bulk-threshold option. | 
| #add_clear_sources_option | Add the –clear-sources option. | 
| #add_local_remote_options | Add local/remote options to the command line parser. | 
| #add_proxy_option | Add the –http-proxy option. | 
| #add_source_option | Add the –source option. | 
| #add_update_sources_option | Add the –update-sources option. | 
::Gem::InstallUpdateOptions - Included
| #add_install_update_options | Add the install/update options to the option parser. | 
| #install_update_defaults_str | Default options for the gem install command. | 
::Gem::Command - Inherited
| #add_extra_args | Adds extra args from ~/.gemrc. | 
| #add_option | Add a command-line option and handler to the command. | 
| #arguments | Override to provide details of the arguments a command takes. | 
| #begins? | True if  | 
| #defaults_str | Override to display the default values of the command options. | 
| #description | Override to display a longer description of what this command does. | 
| #execute | Override to provide command handling. | 
| #get_all_gem_names | Get all gem names from the command line. | 
| #get_all_gem_names_and_versions | Get all [gem, version] from the command line. | 
| #get_one_gem_name | Get a single gem name from the command line. | 
| #get_one_optional_argument | Get a single optional argument from the command line. | 
| #handle_options | Handle the given list of arguments by parsing them and recording the results. | 
| #handles? | True if the command handles the given argument list. | 
| #invoke | Invoke the command with the given list of arguments. | 
| #invoke_with_build_args | Invoke the command with the given list of normal arguments and additional build arguments. | 
| #merge_options | Merge a set of command options with the set of default options (without modifying the default option hash). | 
| #remove_option | Remove previously defined command-line argument  | 
| #show_help | Display the help message for the command. | 
| #show_lookup_failure | Display to the user that a gem couldn't be found and reasons why. | 
| #usage | Override to display the usage for an individual gem command. | 
| #when_invoked | Call the given block when invoked. | 
| #add_parser_run_info | Adds a section with  | 
| #configure_options, | |
| #create_option_parser | Creates an option parser and fills it in with the help info for the command. | 
| #parser | Create on demand parser. | 
| #wrap | Wraps  | 
::Gem::UserInteraction - Included
| #alert | Displays an alert  | 
| #alert_error | Displays an error  | 
| #alert_warning | Displays a warning  | 
| #ask | Asks a  | 
| #ask_for_password | Asks for a password with a  | 
| #ask_yes_no | Asks a yes or no  | 
| #choose_from_list | Asks the user to answer  | 
| #say | Displays the given  | 
| #terminate_interaction | Terminates the RubyGems process with the given  | 
| #verbose | Calls  | 
::Gem::DefaultUserInteraction - Included
Constructor Details
    .new  ⇒ UpdateCommand 
  
# File 'lib/rubygems/commands/update_command.rb', line 22
def initialize super 'update', 'Update installed gems to the latest version', :document => %w[rdoc ri], :force => false 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, | value = true unless value [:system] = value end add_platform_option add_prerelease_option "as update targets" @updated = [] @installer = nil end
Instance Method Details
#execute
[ GitHub ]# File 'lib/rubygems/commands/update_command.rb', line 87
def execute if [:system] then update_rubygems return end say "Updating installed gems" hig = highest_installed_gems gems_to_update = which_to_update hig, [:args].uniq updated = update_gems gems_to_update updated_names = updated.map { |spec| spec.name } not_updated_names = [: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
[ GitHub ]# File 'lib/rubygems/commands/update_command.rb', line 170
def rubygems_target_version version = [: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, [: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)
[ GitHub ]# File 'lib/rubygems/commands/update_command.rb', line 202
def update_gem name, version = Gem::Requirement.default return if @updated.any? { |spec| spec.name == name } = .dup [:prerelease] = version.prerelease? @installer = Gem::DependencyInstaller.new 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.}" end @installer.installed_gems.each do |spec| @updated << spec end end
#update_gems(gems_to_update)
[ GitHub ]# File 'lib/rubygems/commands/update_command.rb', line 222
def update_gems gems_to_update gems_to_update.uniq.sort.each do |(name, version)| update_gem name, version end @updated end
#update_rubygems
Update RubyGems software to the latest version.
# File 'lib/rubygems/commands/update_command.rb', line 233
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)
[ GitHub ]# File 'lib/rubygems/commands/update_command.rb', line 261
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