# 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 11
    def initialize
      defaults = {
        suggest_alternate: true,
        version: Gem::Requirement.default,
      }

      super "fetch", "Download a gem and place it in the current directory", defaults

      add_bulk_threshold_option
      add_proxy_option
      add_source_option
      add_clear_sources_option

      add_version_option
      add_platform_option
      add_prerelease_option

      add_option "--[no-]suggestions", "Suggest alternates when gems are not found" do |value, options|
        options[:suggest_alternate] = value
      end
    end

### Public Instance Methods

execute() click to toggle source

    # File lib/rubygems/commands/fetch_command.rb, line 64
    def execute
      check_version

      exit_code = fetch_gems

      terminate_interaction exit_code
    end

### Private Instance Methods

fetch_gems() click to toggle source

    # File lib/rubygems/commands/fetch_command.rb, line 74
    def fetch_gems
      exit_code = 0

      version = options[:version]

      platform  = Gem.platforms.last
      gem_names = get_all_gem_names_and_versions

      gem_names.each do |gem_name, gem_version|
        gem_version ||= version
        dep = Gem::Dependency.new gem_name, gem_version
        dep.prerelease = options[:prerelease]
        suppress_suggestions = !options[:suggest_alternate]

        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 }

        if spec.nil?
          show_lookup_failure gem_name, gem_version, errors, suppress_suggestions, options[:domain]
          exit_code |= 2
          next
        end
        source.download spec
        say "Downloaded #{spec.full_name}"
      end

      exit_code
    end