Extended maintenance of Ruby versions 1.8.7 and 1.9.2 ended on July 31, 2014. Read more

In Files

  • rubygems/commands/unpack_command.rb

Class/Module Index [+]



Public Class Methods

new() click to toggle source
               # File rubygems/commands/unpack_command.rb, line 10
def initialize
  super 'unpack', 'Unpack an installed gem to the current directory',
        :version => Gem::Requirement.default,
        :target  => Dir.pwd

             'target directory for unpacking') do |value, options|
    options[:target] = value


Public Instance Methods

download(dependency) click to toggle source
               # File rubygems/commands/unpack_command.rb, line 35
def download dependency
  found = Gem::SpecFetcher.fetcher.fetch dependency

  return if found.empty?

  spec, source_uri = found.first

  Gem::RemoteFetcher.fetcher.download spec, source_uri
execute() click to toggle source
               # File rubygems/commands/unpack_command.rb, line 50
def execute
  get_all_gem_names.each do |name|
    dependency = Gem::Dependency.new name, options[:version]
    path = get_path dependency

    if path then
      basename = File.basename path, '.gem'
      target_dir = File.expand_path basename, options[:target]
      FileUtils.mkdir_p target_dir
      Gem::Installer.new(path, :unpack => true).unpack target_dir
      say "Unpacked gem: '#{target_dir}'"
      alert_error "Gem '#{name}' not installed."
get_path(dependency) click to toggle source

Return the full path to the cached gem file matching the given name and version requirement. Returns ‘nil’ if no match.


get_path 'rake', '> 0.4' # "/usr/lib/ruby/gems/1.8/cache/rake-0.4.2.gem"
get_path 'rake', '< 0.1' # nil
get_path 'rak'           # nil (exact name required)
               # File rubygems/commands/unpack_command.rb, line 84
def get_path dependency
  return dependency.name if dependency.name =~ /\.gem$/i

  specs = Gem.source_index.search dependency

  selected = specs.sort_by { |s| s.version }.last

  return download(dependency) if selected.nil?

  return unless dependency.name =~ /^#{selected.name}$/i

  # We expect to find (basename).gem in the 'cache' directory.  Furthermore,
  # the name match must be exact (ignoring case).
  filename = selected.file_name
  path = nil

  Gem.path.find do |gem_dir|
    path = File.join gem_dir, 'cache', filename
    File.exist? path


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.