Class: Gem::Commands::UninstallCommand
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
self,
::Gem::Command
|
|
Instance Chain:
|
|
Inherits: |
Gem::Command
|
Defined in: | lib/rubygems/commands/uninstall_command.rb |
Overview
::Gem
uninstaller command line tool
See gem help uninstall
Constant Summary
::Gem::Command
- Inherited
Class Attribute Summary
::Gem::Command
- Inherited
.build_args | Arguments used when building gems. |
.build_args=, .extra_args, .extra_args= |
Class Method Summary
- .new ⇒ UninstallCommand 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::Command
- Inherited
#command | The name of the command. |
#defaults | The default options for the command. |
#deprecated?, | |
#options | The options for the command. |
#program_name | The name of the command for command-line invocation. |
#summary | A short description of the command. |
::Gem::DefaultUserInteraction
- Included
Instance Method Summary
- #execute
- #uninstall(gem_name)
- #uninstall_all
- #uninstall_gem(gem_name)
- #uninstall_specific
- #arguments Internal use only
- #check_version Internal use only
- #defaults_str Internal use only
- #description Internal use only
- #usage Internal use only
::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. |
#get_platform_from_requirements | Extract platform given on the command line. |
::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 |
#check_deprecated_options, | |
#defaults_str | Override to display the default values of the command options. |
#deprecate_option | Mark a command-line option as deprecated, and optionally specify a deprecation horizon. |
#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. |
#option_is_deprecated?, | |
#parser | Create on demand parser. |
#wrap | Wraps |
#extract_gem_name_and_version, #add_parser_description, #add_parser_options, #add_parser_summary |
::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
::Gem::Text
- Included
#clean_text | Remove any non-printable characters and make the text suitable for printing. |
#format_text | Wraps |
#levenshtein_distance | Returns a value representing the “cost” of transforming str1 into str2 Vendored version of |
#truncate_text, #min3 |
Constructor Details
.new ⇒ UninstallCommand
# File 'lib/rubygems/commands/uninstall_command.rb', line 16
def initialize super "uninstall", "Uninstall gems from the local repository", version: Gem::Requirement.default, user_install: true, check_dev: false, vendor: false add_option("-a", "--[no-]all", "Uninstall all matching versions") do |value, | [:all] = value end add_option("-I", "--[no-]ignore-dependencies", "Ignore dependency requirements while", "uninstalling") do |value, | [:ignore] = value end add_option("-D", "--[no-]check-development", "Check development dependencies while uninstalling", "(default: false)") do |value, | [:check_dev] = value end add_option("-x", "--[no-]executables", "Uninstall applicable executables without", "confirmation") do |value, | [:executables] = value end add_option("-i", "--install-dir DIR", "Directory to uninstall gem from") do |value, | [:install_dir] = File. (value) end add_option("-n", "--bindir DIR", "Directory to remove executables from") do |value, | [:bin_dir] = File. (value) end add_option("--[no-]user-install", "Uninstall from user's home directory", "in addition to GEM_HOME.") do |value, | [:user_install] = value end add_option("--[no-]format-executable", "Assume executable names match Ruby's prefix and suffix.") do |value, | [:format_executable] = value end add_option("--[no-]force", "Uninstall all versions of the named gems", "ignoring dependencies") do |value, | [:force] = value end add_option("--[no-]abort-on-dependent", "Prevent uninstalling gems that are", "depended on by other gems.") do |value, | [:abort_on_dependent] = value end add_version_option add_platform_option add_option("--vendor", "Uninstall gem from the vendor directory.", "Only for use by gem repackagers.") do |_value, | unless Gem.vendor_dir raise Gem::OptionParser::InvalidOption.new "your platform is not supported" end alert_warning "Use your OS package manager to uninstall vendor gems" [:vendor] = true [:install_dir] = Gem.vendor_dir end end
Instance Method Details
#arguments
# File 'lib/rubygems/commands/uninstall_command.rb', line 93
def arguments # :nodoc: "GEMNAME name of gem to uninstall" end
#check_version
# File 'lib/rubygems/commands/uninstall_command.rb', line 116
def check_version # :nodoc: if [:version] != Gem::Requirement.default && get_all_gem_names.size > 1 alert_error "Can't use --version with multiple gems. You can specify multiple gems with" \ " version requirements using `gem uninstall 'my_gem:1.0.0' 'my_other_gem:~>2.0.0'`" terminate_interaction 1 end end
#defaults_str
# File 'lib/rubygems/commands/uninstall_command.rb', line 97
def defaults_str # :nodoc: "--version '#{Gem::Requirement.default}' --no-force " \ "--user-install" end
#description
# File 'lib/rubygems/commands/uninstall_command.rb', line 102
def description # :nodoc: <<-EOF The uninstall command removes a previously installed gem. RubyGems will ask for confirmation if you are attempting to uninstall a gem that is a dependency of an existing gem. You can use the --ignore-dependencies option to skip this check. EOF end
#execute
[ GitHub ]# File 'lib/rubygems/commands/uninstall_command.rb', line 125
def execute check_version # Consider only gem specifications installed at `--install-dir` Gem::Specification.dirs = [:install_dir] if [:install_dir] if [:all] && ! [:args].empty? uninstall_specific elsif [:all] uninstall_all else uninstall_specific end end
#uninstall(gem_name)
[ GitHub ]# File 'lib/rubygems/commands/uninstall_command.rb', line 201
def uninstall(gem_name) Gem::Uninstaller.new(gem_name, ).uninstall end
#uninstall_all
[ GitHub ]# File 'lib/rubygems/commands/uninstall_command.rb', line 140
def uninstall_all specs = Gem::Specification.reject(&:default_gem?) specs.each do |spec| [:version] = spec.version uninstall_gem spec.name end alert "Uninstalled all gems in #{ [:install_dir] || Gem.dir}" end
#uninstall_gem(gem_name)
[ GitHub ]# File 'lib/rubygems/commands/uninstall_command.rb', line 187
def uninstall_gem(gem_name) uninstall(gem_name) rescue Gem::GemNotInHomeException => e spec = e.spec alert("In order to remove #{spec.name}, please execute:\n" \ "\tgem uninstall #{spec.name} --install-dir=#{spec.base_dir}") rescue Gem::UninstallError => e spec = e.spec alert_error("Error: unable to successfully uninstall '#{spec.name}' which is " \ "located at '#{spec.full_gem_path}'. This is most likely because" \ "the current user does not have the appropriate permissions") terminate_interaction 1 end
#uninstall_specific
[ GitHub ]# File 'lib/rubygems/commands/uninstall_command.rb', line 151
def uninstall_specific deplist = Gem::DependencyList.new original_gem_version = {} get_all_gem_names_and_versions.each do |name, version| original_gem_version[name] = version || [:version] gem_specs = Gem::Specification.find_all_by_name(name, original_gem_version[name]) if gem_specs.empty? say("Gem '#{name}' is not installed") else gem_specs.reject!(&:default_gem?) if gem_specs.size > 1 gem_specs.each do |spec| deplist.add spec end end end deps = deplist.strongly_connected_components.flatten.reverse gems_to_uninstall = {} deps.each do |dep| if original_gem_version[dep.name] == Gem::Requirement.default next if gems_to_uninstall[dep.name] gems_to_uninstall[dep.name] = true else [:version] = dep.version end uninstall_gem(dep.name) end end
#usage
# File 'lib/rubygems/commands/uninstall_command.rb', line 112
def usage # :nodoc: "#{program_name} GEMNAME [GEMNAME ...]" end