# class Gem::Commands::FetchCommand

### Public Class Methods

new() click to toggle source
Calls superclass method `Gem::Command::new`

    # File lib/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 lib/rubygems/commands/fetch_command.rb, line 45
    def execute
      version = options[:version] || Gem::Requirement.default

      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.spec_for_dependency dep

        if platform
          filtered = specs_and_sources.select {|s,| s.platform == platform }
          specs_and_sources = filtered unless filtered.empty?
        end

        spec, source = specs_and_sources.max_by {|s,| s.version }

        if spec.nil?
          show_lookup_failure gem_name, version, errors, options[:domain]
          next
        end

        source.download spec

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