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=, #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
#initialize ⇒ ContentsCommand
Returns a new instance of ContentsCommand.
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 44 |
# File 'lib/rubygems/commands/contents_command.rb', line 9 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:
46 47 48 |
# File 'lib/rubygems/commands/contents_command.rb', line 46 def arguments # :nodoc: "GEMNAME name of gem to list contents for" end |
#defaults_str ⇒ Object
:nodoc:
50 51 52 |
# File 'lib/rubygems/commands/contents_command.rb', line 50 def defaults_str # :nodoc: "--no-lib-only --prefix" end |
#description ⇒ Object
:nodoc:
54 55 56 57 58 59 60 |
# File 'lib/rubygems/commands/contents_command.rb', line 54 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
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/rubygems/commands/contents_command.rb', line 66 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 || names.length > 1 end end |
#files_in(spec) ⇒ Object
85 86 87 88 89 90 91 |
# File 'lib/rubygems/commands/contents_command.rb', line 85 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
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/rubygems/commands/contents_command.rb', line 104 def files_in_default_gem(spec) spec.files.map do |file| if file.start_with?("#{spec.bindir}/") [RbConfig::CONFIG["bindir"], file.delete_prefix("#{spec.bindir}/")] else gem spec.name, spec.version require_path = spec.require_paths.find do |path| file.start_with?("#{path}/") end requirable_part = file.delete_prefix("#{require_path}/") resolve = $LOAD_PATH.resolve_feature_path(requirable_part)&.last next unless resolve [resolve.delete_suffix(requirable_part), requirable_part] end end.compact end |
#files_in_gem(spec) ⇒ Object
93 94 95 96 97 98 99 100 101 102 |
# File 'lib/rubygems/commands/contents_command.rb', line 93 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 = %r{#{Regexp.escape(gem_path)}/} Dir[glob].map do |file| [gem_path, file.sub(prefix_re, "")] end end |
#gem_contents(name) ⇒ Object
125 126 127 128 129 130 131 132 133 134 135 |
# File 'lib/rubygems/commands/contents_command.rb', line 125 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
137 138 139 140 141 142 143 144 145 |
# File 'lib/rubygems/commands/contents_command.rb', line 137 def gem_install_dir(name) spec = spec_for name return false unless spec say spec.gem_dir true end |
#gem_names ⇒ Object
:nodoc:
147 148 149 150 151 152 153 |
# File 'lib/rubygems/commands/contents_command.rb', line 147 def gem_names # :nodoc: if [:all] Gem::Specification.map(&:name) else get_all_gem_names end end |
#path_description(spec_dirs) ⇒ Object
:nodoc:
155 156 157 158 159 160 161 |
# File 'lib/rubygems/commands/contents_command.rb', line 155 def path_description(spec_dirs) # :nodoc: if spec_dirs.empty? "default gem paths" else "specified path" end end |
#show_files(files) ⇒ Object
163 164 165 166 167 168 169 170 171 172 173 174 |
# File 'lib/rubygems/commands/contents_command.rb', line 163 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
176 177 178 179 180 181 182 183 184 185 186 187 188 189 |
# File 'lib/rubygems/commands/contents_command.rb', line 176 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 nil end |
#specification_directories ⇒ Object
:nodoc:
191 192 193 194 195 |
# File 'lib/rubygems/commands/contents_command.rb', line 191 def specification_directories # :nodoc: [:specdirs].map do |i| [i, File.join(i, "specifications")] end.flatten end |
#usage ⇒ Object
:nodoc:
62 63 64 |
# File 'lib/rubygems/commands/contents_command.rb', line 62 def usage # :nodoc: "#{program_name} GEMNAME [GEMNAME ...]" end |