class Gem::Commands::YankCommand - RDoc Documentation

# 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 29
    def initialize
      super 'yank', 'Remove a pushed gem from the index'

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

      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 45
    def execute
      @host = options[:host]

      sign_in @host

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

      if version then
        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 61
    def yank_gem(version, platform)
      say "Yanking gem from #{self.host}..."
      yank_api_request(:delete, version, platform, "api/v1/gems/yank")
    end

### Private Instance Methods

get_platform_from_requirements(requirements) click to toggle source

    # File lib/rubygems/commands/yank_command.rb, line 90
    def get_platform_from_requirements(requirements)
      Gem.platforms[1].to_s if requirements.key? :added_platform
    end

get_version_from_requirements(requirements) click to toggle source

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

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

    # File lib/rubygems/commands/yank_command.rb, line 68
    def yank_api_request(method, version, platform, api)
      name = get_one_gem_name
      response = rubygems_api_request(method, api, host) 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
      say response.body
    end