In Files

  • rubygems/commands/fetch_command.rb

Class/Module Index [+]

Quicksearch

Gem::Commands::FetchCommand

Public Class Methods

new() click to toggle source
 
               # File rubygems/commands/fetch_command.rb, line 10
def initialize
  super 'fetch', 'Download a gem and place it in the current directory'

  add_bulk_threshold_option
  add_proxy_option
  add_source_option
  add_clear_sources_option

  add_version_option
  add_platform_option
  add_prerelease_option
end
            

Public Instance Methods

execute() click to toggle source
 
               # File rubygems/commands/fetch_command.rb, line 35
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

    file = "#{spec.full_name}.gem"
    remote_path = URI.parse(source_uri) + "gems/#{file}"

    fetch = Gem::RemoteFetcher.fetcher

    gem = fetch.fetch_path remote_path.to_s

    File.open file, "wb" do |f|
      f.write gem
    end

    say "Downloaded #{spec.full_name}"
  end
end