In Files

  • rubygems/commands/unpack_command.rb

Class/Module Index [+]

Quicksearch

Gem::Commands::UnpackCommand

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

  add_option('--target=DIR',
             'target directory for unpacking') do |value, options|
    options[:target] = value
  end

  add_version_option
end
            

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
end
            
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}'"
    else
      alert_error "Gem '#{name}' not installed."
    end
  end
end
            
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.

Example:

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
  end

  path
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