diff options
| author | Jari Vetoniemi <jari.vetoniemi@indooratlas.com> | 2020-03-16 18:49:26 +0900 | 
|---|---|---|
| committer | Jari Vetoniemi <jari.vetoniemi@indooratlas.com> | 2020-03-30 00:39:06 +0900 | 
| commit | fcbf63e62c627deae76c1b8cb8c0876c536ed811 (patch) | |
| tree | 64cb17de3f41a2b6fef2368028fbd00349946994 /jni/ruby/lib/rubygems/commands/owner_command.rb | |
Fresh start
Diffstat (limited to 'jni/ruby/lib/rubygems/commands/owner_command.rb')
| -rw-r--r-- | jni/ruby/lib/rubygems/commands/owner_command.rb | 99 | 
1 files changed, 99 insertions, 0 deletions
diff --git a/jni/ruby/lib/rubygems/commands/owner_command.rb b/jni/ruby/lib/rubygems/commands/owner_command.rb new file mode 100644 index 0000000..322bf65 --- /dev/null +++ b/jni/ruby/lib/rubygems/commands/owner_command.rb @@ -0,0 +1,99 @@ +require 'rubygems/command' +require 'rubygems/local_remote_options' +require 'rubygems/gemcutter_utilities' + +class Gem::Commands::OwnerCommand < Gem::Command +  include Gem::LocalRemoteOptions +  include Gem::GemcutterUtilities + +  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). + +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 + +  def arguments # :nodoc: +    "GEM       gem to manage owners for" +  end + +  def usage # :nodoc: +    "#{program_name} GEM" +  end + +  def initialize +    super 'owner', 'Manage gem owners of a gem on the push server' +    add_proxy_option +    add_key_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' do |value, options| +      options[:host] = value +    end +  end + +  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 + +  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 = YAML.load resp.body + +      say "Owners for gem: #{name}" +      owners.each do |owner| +        say "- #{owner['email']}" +      end +    end +  end + +  def add_owners name, owners +    manage_owners :post, name, owners +  end + +  def remove_owners name, owners +    manage_owners :delete, name, owners +  end + +  def manage_owners method, name, owners +    owners.each do |owner| +      begin +        response = rubygems_api_request method, "api/v1/gems/#{name}/owners" do |request| +          request.set_form_data 'email' => owner +          request.add_field "Authorization", api_key +        end + +        action = method == :delete ? "Removing" : "Adding" + +        with_response response, "#{action} #{owner}" +      rescue +        # ignore +      end +    end +  end + +end +  | 
