# File 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
# File 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] then
gem_install_dir name
else
gem_contents name
end
terminate_interaction 1 unless found or names.length > 1
end
end
# File rubygems/commands/contents_command.rb, line 85
def files_in spec
if spec.default_gem? then
files_in_default_gem spec
else
files_in_gem spec
end
end
# File rubygems/commands/contents_command.rb, line 104
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
# File 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 = /#{Regexp.escape(gem_path)}\//
Dir[glob].map do |file|
[gem_path, file.sub(prefix_re, "")]
end
end
# File 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
# File 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
# File 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 options[:prefix] then
say absolute_path
else
say basename
end
end
end
# File rubygems/commands/contents_command.rb, line 168
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 then
say "\nDirectories searched:"
@spec_dirs.sort.each { |dir| say dir }
end
return nil
end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.