class Gem::Commands::WhichCommand

Public Class Methods

new() click to toggle source
Calls superclass method Gem::Command.new
# File lib/rubygems/commands/which_command.rb, line 4
def initialize
 super 'which', 'Find the location of a library file you can require',
 :search_gems_first => false, :show_all => false
 add_option '-a', '--[no-]all', 'show all matching files' do |show_all, options|
 options[:show_all] = show_all
 end
 add_option '-g', '--[no-]gems-first',
 'search gems before non-gems' do |gems_first, options|
 options[:search_gems_first] = gems_first
 end
end

Public Instance Methods

execute() click to toggle source
# File lib/rubygems/commands/which_command.rb, line 37
def execute
 found = true
 options[:args].each do |arg|
 arg = arg.sub(/#{Regexp.union(*Gem.suffixes)}$/, '')
 dirs = $LOAD_PATH
 spec = Gem::Specification.find_by_path arg
 if spec then
 if options[:search_gems_first] then
 dirs = spec.full_require_paths + $LOAD_PATH
 else
 dirs = $LOAD_PATH + spec.full_require_paths
 end
 end
 # TODO: this is totally redundant and stupid
 paths = find_paths arg, dirs
 if paths.empty? then
 alert_error "Can't find ruby library file or shared library #{arg}"
 found &&= false
 else
 say paths
 end
 end
 terminate_interaction 1 unless found
end
find_paths(package_name, dirs) click to toggle source
# File lib/rubygems/commands/which_command.rb, line 69
def find_paths(package_name, dirs)
 result = []
 dirs.each do |dir|
 Gem.suffixes.each do |ext|
 full_path = File.join dir, "#{package_name}#{ext}"
 if File.exist? full_path and not File.directory? full_path then
 result << full_path
 return result unless options[:show_all]
 end
 end
 end
 result
end