Class: Gem::Commands::ContentsCommand
- Inherits:
-
Gem::Command
- Object
- Gem::Command
- Gem::Commands::ContentsCommand
- Includes:
- VersionOption
- Defined in:
- lib/rubygems/commands/contents_command.rb
Instance Attribute Summary
Attributes inherited from Gem::Command
#command, #defaults, #options, #program_name, #summary
Instance Method Summary collapse
-
#arguments ⇒ Object
:nodoc:.
-
#defaults_str ⇒ Object
:nodoc:.
-
#description ⇒ Object
:nodoc:.
- #execute ⇒ Object
- #files_in(spec) ⇒ Object
- #files_in_default_gem(spec) ⇒ Object
- #files_in_gem(spec) ⇒ Object
- #gem_contents(name) ⇒ Object
- #gem_install_dir(name) ⇒ Object
-
#gem_names ⇒ Object
:nodoc:.
-
#initialize ⇒ ContentsCommand
constructor
A new instance of ContentsCommand.
-
#path_description(spec_dirs) ⇒ Object
:nodoc:.
- #show_files(files) ⇒ Object
- #spec_for(name) ⇒ Object
-
#specification_directories ⇒ Object
:nodoc:.
-
#usage ⇒ Object
:nodoc:.
Methods included from VersionOption
#add_platform_option, #add_prerelease_option, #add_version_option
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, extra_args, extra_args=, #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
#initialize ⇒ ContentsCommand
Returns a new instance of ContentsCommand.
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/rubygems/commands/contents_command.rb', line 10 def initialize super 'contents', 'Display the contents of the installed gems', :specdirs => [], :lib_only => false, :prefix => true, :show_install_dir => false add_version_option add_option('--all', "Contents for all gems") do |all, | [:all] = all end add_option('-s', '--spec-dir a,b,c', Array, "Search for gems under specific paths") do |spec_dirs, | [:specdirs] = spec_dirs end add_option('-l', '--[no-]lib-only', "Only return files in the Gem's lib_dirs") do |lib_only, | [:lib_only] = lib_only end add_option('--[no-]prefix', "Don't include installed path prefix") do |prefix, | [:prefix] = prefix end add_option('--[no-]show-install-dir', 'Show only the gem install dir') do |show, | [:show_install_dir] = show end @path_kind = nil @spec_dirs = nil @version = nil end |
Instance Method Details
#arguments ⇒ Object
:nodoc:
47 48 49 |
# File 'lib/rubygems/commands/contents_command.rb', line 47 def arguments # :nodoc: "GEMNAME name of gem to list contents for" end |
#defaults_str ⇒ Object
:nodoc:
51 52 53 |
# File 'lib/rubygems/commands/contents_command.rb', line 51 def defaults_str # :nodoc: "--no-lib-only --prefix" end |
#description ⇒ Object
:nodoc:
55 56 57 58 59 60 61 |
# File 'lib/rubygems/commands/contents_command.rb', line 55 def description # :nodoc: <<-EOF The contents command lists the files in an installed gem. The listing can be given as full file names, file names without the installed directory prefix or only the files that are requireable. EOF end |
#execute ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/rubygems/commands/contents_command.rb', line 67 def execute @version = [:version] || Gem::Requirement.default @spec_dirs = specification_directories @path_kind = path_description @spec_dirs names = gem_names names.each do |name| found = if [:show_install_dir] gem_install_dir name else gem_contents name end terminate_interaction 1 unless found or names.length > 1 end end |
#files_in(spec) ⇒ Object
86 87 88 89 90 91 92 |
# File 'lib/rubygems/commands/contents_command.rb', line 86 def files_in(spec) if spec.default_gem? files_in_default_gem spec else files_in_gem spec end end |
#files_in_default_gem(spec) ⇒ Object
105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/rubygems/commands/contents_command.rb', line 105 def files_in_default_gem(spec) spec.files.map do |file| case file when /\A#{spec.bindir}\// [RbConfig::CONFIG['bindir'], $POSTMATCH] when /\.so\z/ [RbConfig::CONFIG['archdir'], file] else [RbConfig::CONFIG['rubylibdir'], file] end end end |
#files_in_gem(spec) ⇒ Object
94 95 96 97 98 99 100 101 102 103 |
# File 'lib/rubygems/commands/contents_command.rb', line 94 def files_in_gem(spec) gem_path = spec.full_gem_path extra = "/{#{spec.require_paths.join ','}}" if [:lib_only] glob = "#{gem_path}#{extra}/**/*" prefix_re = /#{Regexp.escape(gem_path)}\// Dir[glob].map do |file| [gem_path, file.sub(prefix_re, "")] end end |
#gem_contents(name) ⇒ Object
118 119 120 121 122 123 124 125 126 127 128 |
# File 'lib/rubygems/commands/contents_command.rb', line 118 def gem_contents(name) spec = spec_for name return false unless spec files = files_in spec show_files files true end |
#gem_install_dir(name) ⇒ Object
130 131 132 133 134 135 136 137 138 |
# File 'lib/rubygems/commands/contents_command.rb', line 130 def gem_install_dir(name) spec = spec_for name return false unless spec say spec.gem_dir true end |
#gem_names ⇒ Object
:nodoc:
140 141 142 143 144 145 146 |
# File 'lib/rubygems/commands/contents_command.rb', line 140 def gem_names # :nodoc: if [:all] Gem::Specification.map(&:name) else get_all_gem_names end end |
#path_description(spec_dirs) ⇒ Object
:nodoc:
148 149 150 151 152 153 154 |
# File 'lib/rubygems/commands/contents_command.rb', line 148 def path_description(spec_dirs) # :nodoc: if spec_dirs.empty? "default gem paths" else "specified path" end end |
#show_files(files) ⇒ Object
156 157 158 159 160 161 162 163 164 165 166 167 |
# File 'lib/rubygems/commands/contents_command.rb', line 156 def show_files(files) files.sort.each do |prefix, basename| absolute_path = File.join(prefix, basename) next if File.directory? absolute_path if [:prefix] say absolute_path else say basename end end end |
#spec_for(name) ⇒ Object
169 170 171 172 173 174 175 176 177 178 179 180 181 182 |
# File 'lib/rubygems/commands/contents_command.rb', line 169 def spec_for(name) spec = Gem::Specification.find_all_by_name(name, @version).last return spec if spec say "Unable to find gem '#{name}' in #{@path_kind}" if Gem.configuration.verbose say "\nDirectories searched:" @spec_dirs.sort.each { |dir| say dir } end return nil end |
#specification_directories ⇒ Object
:nodoc:
184 185 186 187 188 |
# File 'lib/rubygems/commands/contents_command.rb', line 184 def specification_directories # :nodoc: [:specdirs].map do |i| [i, File.join(i, "specifications")] end.flatten end |
#usage ⇒ Object
:nodoc:
63 64 65 |
# File 'lib/rubygems/commands/contents_command.rb', line 63 def usage # :nodoc: "#{program_name} GEMNAME [GEMNAME ...]" end |