class Gem::Doctor
def doctor
def doctor @orig_home = Gem.dir @orig_path = Gem.path say "Checking #{@gem_repository}" Gem.use_paths @gem_repository.to_s unless gem_repository? 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
def doctor_child(sub_directory, extension) # :nodoc:
def doctor_child(sub_directory, extension) # :nodoc: directory = File.join(@gem_repository, sub_directory) Dir.entries(directory).sort.each do |ent| next if [".", ".."].include?(ent) child = File.join(directory, ent) next unless File.exist?(child) basename = File.basename(child, extension) next if installed_specs.include? basename next if /^rubygems-\d/.match?(basename) next if sub_directory == "specifications" && basename == "default" next if sub_directory == "plugins" && Gem.plugin_suffix_regexp =~ (basename) type = File.directory?(child) ? "directory" : "file" action = if @dry_run "Extra" else FileUtils.rm_r(child) "Removed" end say "#{action} #{type} #{sub_directory}/#{File.basename(child)}" end rescue Errno::ENOENT # ignore end
def doctor_children # :nodoc:
def doctor_children # :nodoc: REPOSITORY_EXTENSION_MAP.each do |sub_directory, extension| doctor_child sub_directory, extension end end
def gem_repository?
def gem_repository? !installed_specs.empty? end
def initialize(gem_repository, dry_run = false)
def initialize(gem_repository, dry_run = false) @gem_repository = gem_repository @dry_run = dry_run @installed_specs = nil end
def installed_specs # :nodoc:
def installed_specs # :nodoc: @installed_specs ||= Gem::Specification.map(&:full_name) end