class Gem::Commands::ContentsCommand
Public Class Methods
new()
click to toggle source
Calls superclass method
Gem::Command::new
# 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, options| options[:all] = all end add_option("-s", "--spec-dir a,b,c", Array, "Search for gems under specific paths") do |spec_dirs, options| options[:specdirs] = spec_dirs end add_option("-l", "--[no-]lib-only", "Only return files in the Gem's lib_dirs") do |lib_only, options| options[:lib_only] = lib_only end add_option("--[no-]prefix", "Don't include installed path prefix") do |prefix, options| options[:prefix] = prefix end add_option("--[no-]show-install-dir", "Show only the gem install dir") do |show, options| options[:show_install_dir] = show end @path_kind = nil @spec_dirs = nil @version = nil end
Public Instance Methods
execute()
click to toggle source
# File lib/rubygems/commands/contents_command.rb, line 66 def execute @version = options[:version] || Gem::Requirement.default @spec_dirs = specification_directories @path_kind = path_description @spec_dirs names = gem_names names.each do |name| found = if options[: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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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 options[: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)
click to toggle source
# 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)
click to toggle source
# 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
show_files(files)
click to toggle source
# 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 options[:prefix] say absolute_path else say basename end end end
spec_for(name)
click to toggle source
# 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