1
require 'rubygems/command'
2
require 'rubygems/local_remote_options'
3
require 'rubygems/version_option'
4
require 'rubygems/source_info_cache'
6
class Gem::Commands::FetchCommand < Gem::Command
8
include Gem::LocalRemoteOptions
9
include Gem::VersionOption
12
super 'fetch', 'Download a gem and place it in the current directory'
14
add_bulk_threshold_option
22
def arguments # :nodoc:
23
'GEMNAME name of gem to download'
26
def defaults_str # :nodoc:
27
"--version '#{Gem::Requirement.default}'"
31
"#{program_name} GEMNAME [GEMNAME ...]"
35
version = options[:version] || Gem::Requirement.default
37
gem_names = get_all_gem_names
39
gem_names.each do |gem_name|
40
dep = Gem::Dependency.new gem_name, version
41
specs_and_sources = Gem::SourceInfoCache.search_with_source dep, true
43
specs_and_sources.sort_by { |spec,| spec.version }
45
spec, source_uri = specs_and_sources.last
47
gem_file = "#{spec.full_name}.gem"
49
gem_path = File.join source_uri, 'gems', gem_file
51
gem = Gem::RemoteFetcher.fetcher.fetch_path gem_path
53
File.open gem_file, 'wb' do |fp|
57
say "Downloaded #{gem_file}"