Class: Gem::Commands::WhichCommand

Inherits:
Gem::Command show all
Defined in:
lib/rubygems/commands/which_command.rb

Instance Attribute Summary

Attributes inherited from Gem::Command

#command, #defaults, #options, #program_name, #summary

Instance Method Summary collapse

Methods inherited from Gem::Command

add_common_option, #add_extra_args, #add_option, add_specific_extra_args, #begins?, build_args, build_args=, #check_deprecated_options, common_options, #deprecate_option, #deprecated?, extra_args, extra_args=, #extract_gem_name_and_version, #get_all_gem_names, #get_all_gem_names_and_versions, #get_one_gem_name, #get_one_optional_argument, #handle_options, #handles?, #invoke, #invoke_with_build_args, #merge_options, #remove_option, #show_help, #show_lookup_failure, specific_extra_args, specific_extra_args_hash, #when_invoked

Methods included from UserInteraction

#alert, #alert_error, #alert_warning, #ask, #ask_for_password, #ask_yes_no, #choose_from_list, #say, #terminate_interaction, #verbose

Methods included from DefaultUserInteraction

ui, #ui, ui=, #ui=, use_ui, #use_ui

Methods included from Text

#clean_text, #format_text, #levenshtein_distance, #min3, #truncate_text

Constructor Details

#initializeWhichCommand

Returns a new instance of WhichCommand.



6
7
8
9
10
11
12
13
14
15
16
17
18
# 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

Instance Method Details

#argumentsObject

:nodoc:



20
21
22
# File 'lib/rubygems/commands/which_command.rb', line 20

def arguments # :nodoc:
  "FILE          name of file to find"
end

#defaults_strObject

:nodoc:



24
25
26
# File 'lib/rubygems/commands/which_command.rb', line 24

def defaults_str # :nodoc:
  "--no-gems-first --no-all"
end

#descriptionObject

:nodoc:



28
29
30
31
32
33
34
35
36
37
# File 'lib/rubygems/commands/which_command.rb', line 28

def description # :nodoc:
  <<-EOF
The which command is like the shell which command and shows you where
the file you wish to require lives.

You can use the which command to help determine why you are requiring a
version you did not expect or to look at the content of a file you are
requiring to see why it does not behave as you expect.
  EOF
end

#executeObject



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# 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) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# 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

#usageObject

:nodoc:



85
86
87
# File 'lib/rubygems/commands/which_command.rb', line 85

def usage # :nodoc:
  "#{program_name} FILE [FILE ...]"
end