def execute
version = options[:version] || Gem::Requirement.default
all = Gem::Requirement.default != version
platform = Gem.platforms.last
gem_names = get_all_gem_names
gem_names.each do |gem_name|
dep = Gem::Dependency.new gem_name, version
dep.prerelease = options[:prerelease]
specs_and_sources, errors =
Gem::SpecFetcher.fetcher.fetch_with_errors(dep, all, true,
dep.prerelease?)
if platform then
filtered = specs_and_sources.select { |s,| s.platform == platform }
specs_and_sources = filtered unless filtered.empty?
end
spec, source_uri = specs_and_sources.sort_by { |s,| s.version }.last
if spec.nil? then
show_lookup_failure gem_name, version, errors, options[:domain]
next
end
path = Gem::RemoteFetcher.fetcher.download spec, source_uri
FileUtils.mv path, File.basename(spec.cache_file)
say "Downloaded #{spec.full_name}"
end
end