class Gem::Commands::YankCommand

def arguments # :nodoc:

:nodoc:
def arguments # :nodoc:
  "GEM       name of gem"
end

def description # :nodoc:

:nodoc:
def description # :nodoc:
  <<-EOF
e yank command permanently removes a gem you pushed to a server.
ce you have pushed a gem several downloads will happen automatically
a the webhooks. If you accidentally pushed passwords or other sensitive
ta you will need to change them immediately and yank your gem.
  EOF
end

def execute

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

def get_version_from_requirements(requirements)

def get_version_from_requirements(requirements)
  requirements.requirements.first[1].version
rescue StandardError
  nil
end

def get_yank_scope

def get_yank_scope
  :yank_rubygem
end

def initialize

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

def usage # :nodoc:

:nodoc:
def usage # :nodoc:
  "#{program_name} -v VERSION [-p PLATFORM] [--key KEY_NAME] [--host HOST] GEM"
end

def yank_api_request(method, version, platform, api)

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

def yank_gem(version, platform)

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