def download(gem_name, version=nil)
puts "Trying to download #{gem_name} (version=#{version || 'latest'})"
dep = ::Gem::Dependency.new gem_name, version
if ::Gem::SpecFetcher.fetcher.respond_to?(:fetch_with_errors)
specs_and_sources, errors =
::Gem::SpecFetcher.fetcher.fetch_with_errors(dep, true, true, false)
else
specs_and_sources =
::Gem::SpecFetcher.fetcher.fetch(dep, true)
errors = "???"
end
spec, source_uri = specs_and_sources.sort_by { |s,| s.version }.last
if spec.nil? then
raise "Invalid gem? Name: #{gem_name}, Version: #{version}, Errors: #{errors}"
end
path = ::Gem::RemoteFetcher.fetcher.download spec, source_uri
FileUtils.mv path, spec.file_name
@paths = [spec.file_name]
end