Class: Gem::Commands::OwnerCommand

Inherits:
Gem::Command show all
Includes:
GemcutterUtilities, LocalRemoteOptions, Text
Defined in:
lib/rubygems/commands/owner_command.rb

Constant Summary

Constants included from GemcutterUtilities

GemcutterUtilities::API_SCOPES, GemcutterUtilities::ERROR_CODE

Instance Attribute Summary

Attributes included from GemcutterUtilities

#host, #scope

Attributes inherited from Gem::Command

#command, #defaults, #options, #program_name, #summary

Instance Method Summary collapse

Methods included from GemcutterUtilities

#add_key_option, #add_otp_option, #api_key, #mfa_unauthorized?, #otp, #rubygems_api_request, #set_api_key, #sign_in, #update_scope, #verify_api_key, #with_response

Methods included from Text

#clean_text, #format_text, #levenshtein_distance, #min3, #truncate_text

Methods included from LocalRemoteOptions

#accept_uri_http, #add_bulk_threshold_option, #add_clear_sources_option, #add_local_remote_options, #add_proxy_option, #add_source_option, #add_update_sources_option, #both?, #local?, #remote?

Methods inherited from Gem::Command

add_common_option, #add_extra_args, #add_option, add_specific_extra_args, #begins?, build_args, build_args=, #check_deprecated_options, common_options, #defaults_str, #deprecate_option, #deprecated?, extra_args, extra_args=, #get_all_gem_names, #get_all_gem_names_and_versions, #get_one_gem_name, #get_one_optional_argument, #handle_options, #handles?, #invoke, #invoke_with_build_args, #merge_options, #remove_option, #show_help, #show_lookup_failure, specific_extra_args, specific_extra_args_hash, #when_invoked

Methods included from UserInteraction

#alert, #alert_error, #alert_warning, #ask, #ask_for_password, #ask_yes_no, #choose_from_list, #say, #terminate_interaction, #verbose

Methods included from DefaultUserInteraction

ui, #ui, ui=, #ui=, use_ui, #use_ui

Constructor Details

#initializeOwnerCommand

Returns a new instance of OwnerCommand.



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/rubygems/commands/owner_command.rb', line 36

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

Instance Method Details

#add_owners(name, owners) ⇒ Object



86
87
88
# File 'lib/rubygems/commands/owner_command.rb', line 86

def add_owners(name, owners)
  manage_owners :post, name, owners
end

#argumentsObject

:nodoc:



28
29
30
# File 'lib/rubygems/commands/owner_command.rb', line 28

def arguments # :nodoc:
  "GEM       gem to manage owners for"
end

#descriptionObject

:nodoc:



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/rubygems/commands/owner_command.rb', line 12

def description # :nodoc:
  <<-EOF
The owner command lets you add and remove owners of a gem on a push
server (the default is https://rubygems.org). Multiple owners can be
added or removed at the same time, if the flag is given multiple times.

The supported user identifiers are dependant on the push server.
For rubygems.org, both e-mail and handle are supported, even though the
user identifier field is called "email".

The owner of a gem has the permission to push new versions, yank existing
versions or edit the HTML page of the gem.  Be careful of who you give push
permission to.
  EOF
end

#executeObject



58
59
60
61
62
63
64
65
66
67
# File 'lib/rubygems/commands/owner_command.rb', line 58

def execute
  @host = options[:host]

  (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) ⇒ Object



94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/rubygems/commands/owner_command.rb', line 94

def manage_owners(method, name, owners)
  owners.each do |owner|
    begin
      response = send_owner_request(method, name, owner)
      action = method == :delete ? "Removing" : "Adding"

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

#remove_owners(name, owners) ⇒ Object



90
91
92
# File 'lib/rubygems/commands/owner_command.rb', line 90

def remove_owners(name, owners)
  manage_owners :delete, name, owners
end

#show_owners(name) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/rubygems/commands/owner_command.rb', line 69

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

#usageObject

:nodoc:



32
33
34
# File 'lib/rubygems/commands/owner_command.rb', line 32

def usage # :nodoc:
  "#{program_name} GEM"
end