In Files

  • rubygems/commands/contents_command.rb

Class/Module Index [+]

Quicksearch

Gem::Commands::ContentsCommand

Public Class Methods

new() click to toggle source
 
               # 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

  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

  @path_kind = nil
  @spec_dirs = nil
  @version   = nil
end
            

Public Instance Methods

execute() click to toggle source
 
               # File rubygems/commands/contents_command.rb, line 60
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 = gem_contents name

    terminate_interaction 1 unless found or names.length > 1
  end
end
            
files_in(spec) click to toggle source
 
               # File rubygems/commands/contents_command.rb, line 74
def files_in spec
  if spec.default_gem? then
    files_in_default_gem spec
  else
    files_in_gem spec
  end
end
            
files_in_default_gem(spec) click to toggle source
 
               # File rubygems/commands/contents_command.rb, line 93
def files_in_default_gem spec
  spec.files.sort.map do |file|
    case file
    when /\A#{spec.bindir}\//
      [Gem::ConfigMap[:bindir], $POSTMATCH]
    when /\.so\z/
      [Gem::ConfigMap[:archdir], file]
    else
      [Gem::ConfigMap[:rubylibdir], file]
    end
  end
end
            
files_in_gem(spec) click to toggle source
 
               # File rubygems/commands/contents_command.rb, line 82
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
            
gem_contents(name) click to toggle source
 
               # File rubygems/commands/contents_command.rb, line 106
def gem_contents name
  spec = spec_for name

  return false unless spec

  files = files_in spec

  show_files files

  true
end
            
show_files(files) click to toggle source
 
               # File rubygems/commands/contents_command.rb, line 135
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
            
spec_for(name) click to toggle source
 
               # File rubygems/commands/contents_command.rb, line 148
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.

blog comments powered by Disqus