# class Gem::Commands::OwnerCommand

### Public Class Methods

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

    # File lib/rubygems/commands/owner_command.rb, line 32
    def initialize
      super 'owner', 'Manage gem owners of a gem on the push server'
      add_proxy_option
      add_key_option
      add_otp_option
      defaults.merge! :add => [], :remove => []

      add_option '-a', '--add EMAIL', 'Add an owner' do |value, options|
        options[:add] << value
      end

      add_option '-r', '--remove EMAIL', 'Remove an owner' do |value, options|
        options[:remove] << value
      end

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

### Public Instance Methods

add_owners(name, owners) click to toggle source

    # File lib/rubygems/commands/owner_command.rb, line 80
    def add_owners(name, owners)
      manage_owners :post, name, owners
    end

execute() click to toggle source

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

      sign_in
      name = get_one_gem_name

      add_owners    name, options[:add]
      remove_owners name, options[:remove]
      show_owners   name
    end

manage_owners(method, name, owners) click to toggle source

    # File lib/rubygems/commands/owner_command.rb, line 88
    def manage_owners(method, name, owners)
      owners.each do |owner|
        begin
          response = send_owner_request(method, name, owner)

          if need_otp? response
            response = send_owner_request(method, name, owner, true)
          end

          action = method == :delete ? "Removing" : "Adding"

          with_response response, "#{action} #{owner}"
        rescue
          # ignore
        end
      end
    end

remove_owners(name, owners) click to toggle source

    # File lib/rubygems/commands/owner_command.rb, line 84
    def remove_owners(name, owners)
      manage_owners :delete, name, owners
    end

show_owners(name) click to toggle source

    # File lib/rubygems/commands/owner_command.rb, line 65
    def show_owners(name)
      response = rubygems_api_request :get, "api/v1/gems/#{name}/owners.yaml" do |request|
        request.add_field "Authorization", api_key
      end

      with_response response do |resp|
        owners = Gem::SafeYAML.load clean_text(resp.body)

        say "Owners for gem: #{name}"
        owners.each do |owner|
          say "- #{owner['email'] || owner['handle'] || owner['id']}"
        end
      end
    end

### Private Instance Methods

send_owner_request(method, name, owner, use_otp = false) click to toggle source

    # File lib/rubygems/commands/owner_command.rb, line 108
    def send_owner_request(method, name, owner, use_otp = false)
      rubygems_api_request method, "api/v1/gems/#{name}/owners" do |request|
        request.set_form_data 'email' => owner
        request.add_field "Authorization", api_key
        request.add_field "OTP", options[:otp] if use_otp
      end
    end