Class: Gem::Commands::OwnerCommand
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
self,
::Gem::Command
|
|
Instance Chain:
|
|
Inherits: |
Gem::Command
|
Defined in: | lib/rubygems/commands/owner_command.rb |
Constant Summary
::Gem::Command
- Inherited
::Gem::GemcutterUtilities
- Included
Class Attribute Summary
::Gem::Command
- Inherited
.build_args | Arguments used when building gems. |
.build_args=, .extra_args, .extra_args= |
Class Method Summary
- .new ⇒ OwnerCommand constructor
::Gem::Command
- Inherited
.add_common_option, | |
.add_specific_extra_args | Add a list of extra arguments for the given command. |
.common_options, | |
.new | Initializes a generic gem command named |
.specific_extra_args | Return an array of extra arguments for the command. |
.specific_extra_args_hash | Accessor for the specific extra args hash (self initializing). |
Instance Attribute Summary
::Gem::GemcutterUtilities
- Included
#host | The host to connect to either from the RUBYGEMS_HOST environment variable or from the user’s configuration. |
#host=, #scope=, #default_host? |
::Gem::LocalRemoteOptions
- Included
#both? | Is fetching of local and remote information enabled? |
#local? | Is local fetching enabled? |
#remote? | Is remote fetching enabled? |
::Gem::Command
- Inherited
#command | The name of the command. |
#defaults | The default options for the command. |
#deprecated?, | |
#options | The options for the command. |
#program_name | The name of the command for command-line invocation. |
#summary | A short description of the command. |
::Gem::DefaultUserInteraction
- Included
Instance Method Summary
- #add_owners(name, owners)
- #execute
- #manage_owners(method, name, owners)
- #remove_owners(name, owners)
- #show_owners(name)
- #get_owner_scope(method: nil) private
- #send_owner_request(method, name, owner) private
- #arguments Internal use only
- #description Internal use only
- #usage Internal use only
::Gem::GemcutterUtilities
- Included
#add_key_option | Add the –key option. |
#add_otp_option | Add the –otp option. |
#api_key | The API key from the command options or from the user’s configuration. |
#mfa_unauthorized?, | |
#otp | The OTP code from the command options or from the user’s configuration. |
#rubygems_api_request | |
#set_api_key | Returns true when the user has enabled multifactor authentication from |
#sign_in | Signs in with the RubyGems API at |
#update_scope, | |
#verify_api_key | Retrieves the pre-configured API key |
#with_response | If |
#api_key_forbidden?, #fetch_otp, #get_key_name, #get_mfa_params, #get_scope_params, #get_user_profile, #pretty_host, #request_with_otp, #wait_for_otp_thread, #webauthn_verification_url |
::Gem::LocalRemoteOptions
- Included
#accept_uri_http | Allows |
#add_bulk_threshold_option | Add the –bulk-threshold option. |
#add_clear_sources_option | Add the –clear-sources option. |
#add_local_remote_options | Add local/remote options to the command line parser. |
#add_proxy_option | Add the –http-proxy option. |
#add_source_option | Add the –source option. |
#add_update_sources_option | Add the –update-sources option. |
::Gem::Command
- Inherited
#add_extra_args | Adds extra args from ~/.gemrc. |
#add_option | Add a command-line option and handler to the command. |
#arguments | Override to provide details of the arguments a command takes. |
#begins? | True if |
#check_deprecated_options, | |
#defaults_str | Override to display the default values of the command options. |
#deprecate_option | Mark a command-line option as deprecated, and optionally specify a deprecation horizon. |
#description | Override to display a longer description of what this command does. |
#execute | Override to provide command handling. |
#get_all_gem_names | Get all gem names from the command line. |
#get_all_gem_names_and_versions | Get all [gem, version] from the command line. |
#get_one_gem_name | Get a single gem name from the command line. |
#get_one_optional_argument | Get a single optional argument from the command line. |
#handle_options | Handle the given list of arguments by parsing them and recording the results. |
#handles? | True if the command handles the given argument list. |
#invoke | Invoke the command with the given list of arguments. |
#invoke_with_build_args | Invoke the command with the given list of normal arguments and additional build arguments. |
#merge_options | Merge a set of command options with the set of default options (without modifying the default option hash). |
#remove_option | Remove previously defined command-line argument |
#show_help | Display the help message for the command. |
#show_lookup_failure | Display to the user that a gem couldn’t be found and reasons why –. |
#usage | Override to display the usage for an individual gem command. |
#when_invoked | Call the given block when invoked. |
#add_parser_run_info | Adds a section with |
#configure_options, | |
#create_option_parser | Creates an option parser and fills it in with the help info for the command. |
#option_is_deprecated?, | |
#parser | Create on demand parser. |
#wrap | Wraps |
#extract_gem_name_and_version, #add_parser_description, #add_parser_options, #add_parser_summary |
::Gem::UserInteraction
- Included
#alert | Displays an alert |
#alert_error | Displays an error |
#alert_warning | Displays a warning |
#ask | Asks a |
#ask_for_password | Asks for a password with a |
#ask_yes_no | Asks a yes or no |
#choose_from_list | Asks the user to answer |
#say | Displays the given |
#terminate_interaction | Terminates the RubyGems process with the given |
#verbose | Calls |
::Gem::DefaultUserInteraction
- Included
::Gem::Text
- Included
#clean_text | Remove any non-printable characters and make the text suitable for printing. |
#format_text | Wraps |
#levenshtein_distance | Returns a value representing the “cost” of transforming str1 into str2 Vendored version of |
#truncate_text, #min3 |
Constructor Details
.new ⇒ OwnerCommand
# 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, | [:add] << value end add_option "-r", "--remove OLD_OWNER", "Remove an owner by user identifier" do |value, | [:remove] << value end add_option "-h", "--host HOST", "Use another gemcutter-compatible host", " (e.g. https://rubygems.org)" do |value, | [:host] = value end end
Instance Method Details
#add_owners(name, owners)
[ GitHub ]# File 'lib/rubygems/commands/owner_command.rb', line 87
def add_owners(name, owners) manage_owners :post, name, owners end
#arguments
# File 'lib/rubygems/commands/owner_command.rb', line 29
def arguments # :nodoc: "GEM gem to manage owners for" end
#description
# File 'lib/rubygems/commands/owner_command.rb', line 13
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 dependent 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
#execute
[ GitHub ]# File 'lib/rubygems/commands/owner_command.rb', line 59
def execute @host = [:host] sign_in(scope: get_owner_scope) name = get_one_gem_name add_owners name, [:add] remove_owners name, [:remove] show_owners name end
#get_owner_scope(method: nil) (private)
[ GitHub ]# File 'lib/rubygems/commands/owner_command.rb', line 117
def get_owner_scope(method: nil) if method == :post || .any? && [:add].any? :add_owner elsif method == :delete || .any? && [:remove].any? :remove_owner end end
#manage_owners(method, name, owners)
[ GitHub ]# 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)
[ GitHub ]# File 'lib/rubygems/commands/owner_command.rb', line 91
def remove_owners(name, owners) manage_owners :delete, name, owners end
#send_owner_request(method, name, owner) (private)
[ GitHub ]# 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
#show_owners(name)
[ GitHub ]# 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
#usage
# File 'lib/rubygems/commands/owner_command.rb', line 33
def usage # :nodoc: "#{program_name} GEM" end