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.

[View source]

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

[View source]

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:

[View source]

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

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

#descriptionObject

:nodoc:

[View source]

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

[View source]

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

[View source]

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

[View source]

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

[View source]

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:

[View source]

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

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