# class Gem::Commands::WhichCommand

### Public Class Methods

new ()
Source

    # File lib/rubygems/commands/which_command.rb, line 6
    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

Calls superclass method `Gem::Command::new`

### Public Instance Methods

execute ()
Source

    # File lib/rubygems/commands/which_command.rb, line 39
    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
          if options[:search_gems_first]
            dirs = spec.full_require_paths + $LOAD_PATH
          else
            dirs = $LOAD_PATH + spec.full_require_paths
          end
        end

        paths = find_paths arg, dirs

        if paths.empty?
          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)
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) && !File.directory?(full_path)
            result << full_path
            return result unless options[:show_all]
          end
        end
      end

      result
    end