# class Gem::Commands::YankCommand

### Public Class Methods

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

    # File lib/rubygems/commands/yank_command.rb, line 31
    def initialize
      super "yank", "Remove a pushed gem from the index"

      add_version_option("remove")
      add_platform_option("remove")
      add_otp_option

      add_option("--host HOST",
                 "Yank from another gemcutter-compatible host",
                 "  (e.g. https://rubygems.org)") do |value, options|
        options[:host] = value
      end

      add_key_option
      @host = nil
    end

### Public Instance Methods

execute() click to toggle source

    # File lib/rubygems/commands/yank_command.rb, line 48
    def execute
      @host = options[:host]

      sign_in @host, scope: get_yank_scope

      version   = get_version_from_requirements(options[:version])
      platform  = get_platform_from_requirements(options)

      if version
        yank_gem(version, platform)
      else
        say "A version argument is required: #{usage}"
        terminate_interaction
      end
    end

yank_gem(version, platform) click to toggle source

    # File lib/rubygems/commands/yank_command.rb, line 64
    def yank_gem(version, platform)
      say "Yanking gem from #{host}..."
      args = [:delete, version, platform, "api/v1/gems/yank"]
      response = yank_api_request(*args)

      say response.body
    end

### Private Instance Methods

get_version_from_requirements(requirements) click to toggle source

    # File lib/rubygems/commands/yank_command.rb, line 90
    def get_version_from_requirements(requirements)
      requirements.requirements.first[1].version
    rescue StandardError
      nil
    end

get_yank_scope() click to toggle source

    # File lib/rubygems/commands/yank_command.rb, line 96
    def get_yank_scope
      :yank_rubygem
    end

yank_api_request(method, version, platform, api) click to toggle source

    # File lib/rubygems/commands/yank_command.rb, line 74
    def yank_api_request(method, version, platform, api)
      name = get_one_gem_name
      response = rubygems_api_request(method, api, host, scope: get_yank_scope) do |request|
        request.add_field("Authorization", api_key)

        data = {
          "gem_name" => name,
          "version" => version,
        }
        data["platform"] = platform if platform

        request.set_form_data data
      end
      response
    end