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, #get_platform_from_requirements
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=, #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, 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.
8 9 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 |
# File 'lib/rubygems/commands/contents_command.rb', line 8 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:
45 46 47 |
# File 'lib/rubygems/commands/contents_command.rb', line 45 def arguments # :nodoc: "GEMNAME name of gem to list contents for" end |
#defaults_str ⇒ Object
:nodoc:
49 50 51 |
# File 'lib/rubygems/commands/contents_command.rb', line 49 def defaults_str # :nodoc: "--no-lib-only --prefix" end |
#description ⇒ Object
:nodoc:
53 54 55 56 57 58 59 |
# File 'lib/rubygems/commands/contents_command.rb', line 53 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
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/rubygems/commands/contents_command.rb', line 65 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
84 85 86 87 88 89 90 |
# File 'lib/rubygems/commands/contents_command.rb', line 84 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
103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/rubygems/commands/contents_command.rb', line 103 def files_in_default_gem(spec) spec.files.map do |file| case file when /\A#{spec.bindir}\// # $' is POSTMATCH [RbConfig::CONFIG['bindir'], $'] when /\.so\z/ [RbConfig::CONFIG['archdir'], file] else [RbConfig::CONFIG['rubylibdir'], file] end end end |
#files_in_gem(spec) ⇒ Object
92 93 94 95 96 97 98 99 100 101 |
# File 'lib/rubygems/commands/contents_command.rb', line 92 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
117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/rubygems/commands/contents_command.rb', line 117 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
129 130 131 132 133 134 135 136 137 |
# File 'lib/rubygems/commands/contents_command.rb', line 129 def gem_install_dir(name) spec = spec_for name return false unless spec say spec.gem_dir true end |
#gem_names ⇒ Object
:nodoc:
139 140 141 142 143 144 145 |
# File 'lib/rubygems/commands/contents_command.rb', line 139 def gem_names # :nodoc: if [:all] Gem::Specification.map(&:name) else get_all_gem_names end end |
#path_description(spec_dirs) ⇒ Object
:nodoc:
147 148 149 150 151 152 153 |
# File 'lib/rubygems/commands/contents_command.rb', line 147 def path_description(spec_dirs) # :nodoc: if spec_dirs.empty? "default gem paths" else "specified path" end end |
#show_files(files) ⇒ Object
155 156 157 158 159 160 161 162 163 164 165 166 |
# File 'lib/rubygems/commands/contents_command.rb', line 155 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
168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
# File 'lib/rubygems/commands/contents_command.rb', line 168 def spec_for(name) spec = Gem::Specification.find_all_by_name(name, @version).first 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:
183 184 185 186 187 |
# File 'lib/rubygems/commands/contents_command.rb', line 183 def specification_directories # :nodoc: [:specdirs].map do |i| [i, File.join(i, "specifications")] end.flatten end |
#usage ⇒ Object
:nodoc:
61 62 63 |
# File 'lib/rubygems/commands/contents_command.rb', line 61 def usage # :nodoc: "#{program_name} GEMNAME [GEMNAME ...]" end |