class Gem::Commands::OwnerCommand - Documentation for Ruby 3.3

# 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 37
    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 NEW_OWNER", "Add an owner by user identifier" do |value, options|
        options[:add] << value
      end

      add_option "-r", "--remove OLD_OWNER", "Remove an owner by user identifier" 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 87
    def add_owners(name, owners)
      manage_owners :post, name, owners
    end

execute() click to toggle source

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

      sign_in(scope: get_owner_scope)
      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 95
    def manage_owners(method, name, owners)
      owners.each do |owner|
        response = send_owner_request(method, name, owner)
        action = method == :delete ? "Removing" : "Adding"

        with_response response, "#{action} #{owner}"
      rescue Gem::WebauthnVerificationError => e
        raise e
      rescue StandardError
        # ignore early exits to allow for completing the iteration of all owners
      end
    end

remove_owners(name, owners) click to toggle source

    # File lib/rubygems/commands/owner_command.rb, line 91
    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 70
    def show_owners(name)
      Gem.load_yaml

      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

get_owner_scope(method: nil) click to toggle source

    # File lib/rubygems/commands/owner_command.rb, line 117
    def get_owner_scope(method: nil)
      if method == :post || options.any? && options[:add].any?
        :add_owner
      elsif method == :delete || options.any? && options[:remove].any?
        :remove_owner
      end
    end

send_owner_request(method, name, owner) click to toggle source

    # File lib/rubygems/commands/owner_command.rb, line 110
    def send_owner_request(method, name, owner)
      rubygems_api_request method, "api/v1/gems/#{name}/owners", scope: get_owner_scope(method: method) do |request|
        request.set_form_data "email" => owner
        request.add_field "Authorization", api_key
      end
    end