Sha256: 1c9c9e63648823721b5506045d3fde941ad64666112ba19e89078e549ae8a31c

Contents?: true

Size: 1.69 KB

Versions: 13

Compression:

Stored size: 1.69 KB

Contents

require 'rubygems/local_remote_options'
require 'rubygems/version_option'
require 'rubygems/gemcutter_utilities'

class Gem::Commands::YankCommand < Gem::Command
  include Gem::LocalRemoteOptions
  include Gem::VersionOption
  include Gem::GemcutterUtilities

  def description
    'Remove a specific gem version release from RubyGems.org'
  end

  def arguments
    "GEM       name of gem"
  end

  def usage
    "#{program_name} GEM -v VERSION [--undo]"
  end
  
  def initialize
    super 'yank', description
    add_version_option("remove")
    add_option('--undo') do |value, options|
      options[:undo] = true
    end
  end

  def execute
    sign_in
    version = get_version_from_requirements(options[:version])
    if !version.nil?
      if options[:undo]
        unyank_gem(version)
      else
        yank_gem(version)
      end
    else
      say "A version argument is required: #{usage}"
      terminate_interaction
    end
  end

  def yank_gem(version)
    say "Yanking gem from RubyGems.org..."
    yank_api_request(:delete, version, "api/v1/gems/yank")
  end
  
  def unyank_gem(version)
    say "Unyanking gem from RubyGems.org..."
    yank_api_request(:put, version, "api/v1/gems/unyank")
  end
  
  private
    def yank_api_request(method, version, api)
      name = get_one_gem_name
      response = rubygems_api_request(method, api) do |request|
        request.add_field("Authorization", Gem.configuration.rubygems_api_key)
        request.set_form_data({'gem_name' => name, 'version' => version})
      end
      say response.body
    end

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

Version data entries

13 entries across 13 versions & 2 rubygems

Version Path
gemrage-1.0.0 vendor/ruby/1.8/gems/gemcutter-0.6.1/lib/rubygems/commands/yank_command.rb
gemrage-0.4.1 vendor/ruby/1.8/gems/gemcutter-0.6.1/lib/rubygems/commands/yank_command.rb
gemrage-0.4.0 vendor/ruby/1.8/gems/gemcutter-0.6.1/lib/rubygems/commands/yank_command.rb
gemrage-0.3.2 vendor/ruby/1.8/gems/gemcutter-0.6.1/lib/rubygems/commands/yank_command.rb
gemrage-0.3.1 vendor/ruby/1.8/gems/gemcutter-0.6.1/lib/rubygems/commands/yank_command.rb
gemrage-0.3.0 vendor/ruby/1.8/gems/gemcutter-0.6.1/lib/rubygems/commands/yank_command.rb
gemrage-0.2.0 vendor/ruby/1.8/gems/gemcutter-0.6.1/lib/rubygems/commands/yank_command.rb
gemrage-0.1.2 vendor/ruby/1.8/gems/gemcutter-0.6.1/lib/rubygems/commands/yank_command.rb
gemrage-0.1.1 vendor/ruby/1.8/gems/gemcutter-0.6.1/lib/rubygems/commands/yank_command.rb
gemrage-0.1.0 vendor/ruby/1.8/gems/gemcutter-0.6.1/lib/rubygems/commands/yank_command.rb
gemrage-0.0.0 vendor/ruby/1.8/gems/gemcutter-0.6.1/lib/rubygems/commands/yank_command.rb
gemcutter-0.6.1 lib/rubygems/commands/yank_command.rb
gemcutter-0.6.0 lib/rubygems/commands/yank_command.rb