123456789_123456789_123456789_123456789_123456789_

Class: Gem::Doctor

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Instance Chain:
Inherits: Object
Defined in: lib/rubygems/doctor.rb

Overview

Cleans up after a partially-failed uninstall or for an invalid Specification.

If a specification was removed by hand this will remove any remaining files.

If a corrupt specification was installed this will clean up warnings by removing the bogus specification.

Class Method Summary

Instance Attribute Summary

Instance Method Summary

  • #doctor

    Cleans up uninstalled files and invalid gem specifications.

UserInteraction - Included

#alert

Displays an alert statement.

#alert_error

Displays an error statement to the error output location.

#alert_warning

Displays a warning statement to the warning output location.

#ask

Asks a question and returns the answer.

#ask_for_password

Asks for a password with a prompt

#ask_yes_no

Asks a yes or no question.

#choose_from_list

Asks the user to answer question with an answer from the given list.

#say

Displays the given statement on the standard output (or equivalent).

#terminate_interaction

Terminates the RubyGems process with the given exit_code

#verbose

Calls say with msg or the results of the block if really_verbose is true.

DefaultUserInteraction - Included

Text - Included

#clean_text

Remove any non-printable characters and make the text suitable for printing.

#format_text

Wraps text to wrap characters and optionally indents by indent characters.

#levenshtein_distance

This code is based directly on the Text gem implementation Returns a value representing the “cost” of transforming str1 into str2.

#truncate_text

Constructor Details

.new(gem_repository, dry_run = false) ⇒ Doctor

Creates a new Doctor that will clean up gem_repository. Only one gem repository may be cleaned at a time.

If dry_run is true no files or directories will be removed.

[ GitHub ]

  
# File 'lib/rubygems/doctor.rb', line 44

def initialize gem_repository, dry_run = false
  @gem_repository = gem_repository
  @dry_run        = dry_run

  @installed_specs = nil
end

Instance Attribute Details

#gem_repository?Boolean (readonly)

Are we doctoring a gem repository?

[ GitHub ]

  
# File 'lib/rubygems/doctor.rb', line 61

def gem_repository?
  not installed_specs.empty?
end

Instance Method Details

#doctor

Cleans up uninstalled files and invalid gem specifications

[ GitHub ]

  
# File 'lib/rubygems/doctor.rb', line 68

def doctor
  @orig_home = Gem.dir
  @orig_path = Gem.path

  say "Checking #{@gem_repository}"

  Gem.use_paths @gem_repository.to_s

  unless gem_repository? then
    say 'This directory does not appear to be a RubyGems repository, ' +
        'skipping'
    say
    return
  end

  doctor_children

  say
ensure
  Gem.use_paths @orig_home, *@orig_path
end