Class: Gem::Commands::WebhookCommand

### Home Classes Methods

### In Files

- lib/rubygems/commands/webhook_command.rb

### Parent

Gem::Command

### Methods

- ::new
- #add_webhook
- #arguments
- #description
- #execute
- #fire_webhook
- #list_webhooks
- #make_webhook_request
- #remove_webhook
- #usage

### Included Modules

- Gem::LocalRemoteOptions
- Gem::GemcutterUtilities

### Class/Module Index

Quicksearch

- Gem
- Gem::Commands
- Gem::Commands::MigrateCommand
- Gem::Commands::TumbleCommand
- Gem::Commands::WebhookCommand
- Gem::Commands::YankCommand
- Gemcutter

No matching classes.

# Gem::Commands::WebhookCommand

### Public Class Methods

new() click to toggle source

    # File lib/rubygems/commands/webhook_command.rb, line 24
    def initialize
      super 'webhook', "Register a webhook that will be called any time a gem is updated on Gemcutter."
      option_text = "The URL of the webhook to"

      add_option('-a', '--add URL', "#{option_text} add") do |value, options|
        options[:send] = 'add'
        options[:url] = value
      end

      add_option('-r', '--remove URL', "#{option_text} remove") do |value, options|
        options[:send] = 'remove'
        options[:url] = value
      end

      add_option('-f', '--fire URL', "#{option_text} testfire") do |value, options|
        options[:send] = 'fire'
        options[:url] = value
      end

      add_option('-g', '--global', "Apply hook globally") do |value, options|
        options[:global] = true
      end

      add_proxy_option
    end

### Public Instance Methods

add_webhook(name, url) click to toggle source

    # File lib/rubygems/commands/webhook_command.rb, line 61
    def add_webhook(name, url)
      say "Adding webhook..."
      make_webhook_request(:post, name, url)
    end

arguments() click to toggle source

    # File lib/rubygems/commands/webhook_command.rb, line 16
    def arguments
      "GEM_NAME       name of gem to register webhook for, or omit to list hooks."
    end

description() click to toggle source

    # File lib/rubygems/commands/webhook_command.rb, line 8
    def description
      Webhooks can be created for either specific gems or all gems. In both casesyou'll get a POST request of the gem in JSON format at the URL you specify inthe command. You can also use this command to test fire a webhook for any gem.
    end

execute() click to toggle source

    # File lib/rubygems/commands/webhook_command.rb, line 50
    def execute
      sign_in

      if options[:url]
        name = options[:global] ? '*' : get_one_gem_name
        send("#{options[:send]}_webhook", name, options[:url])
      else
        list_webhooks
      end
    end

fire_webhook(name, url) click to toggle source

    # File lib/rubygems/commands/webhook_command.rb, line 71
    def fire_webhook(name, url)
      say "Test firing webhook..."
      make_webhook_request(:post, name, url, "api/v1/web_hooks/fire")
    end

list_webhooks() click to toggle source

    # File lib/rubygems/commands/webhook_command.rb, line 76
    def list_webhooks
      resp = rubygems_api_request(:get, "api/v1/web_hooks.yaml") do |request|
        request.add_field("Authorization", Gem.configuration.rubygems_api_key)
      end

      with_response(resp) do |response|
        begin
          groups = YAML.load(response.body)

          if groups.size.zero?
            say "You haven't added any webhooks yet."
          else
            groups.each do |group, hooks|
              if options[:global]
                next if group != "all gems"
              elsif options[:args] && options[:args].first
                next if group != options[:args].first
              end

              say "#{group}:"
              hooks.each do |hook|
                say "- #{hook['url']}"
              end
            end
          end
        rescue Exception => error
          say "There was a problem parsing the data:"
          say error.to_s
          terminate_interaction
        end
      end
    end

make_webhook_request(method, name, url, api = "api/v1/web_hooks") click to toggle source

    # File lib/rubygems/commands/webhook_command.rb, line 109
    def make_webhook_request(method, name, url, api = "api/v1/web_hooks")
      response = rubygems_api_request(method, api) do |request|
        request.set_form_data("gem_name" => name, "url" => url)
        request.add_field("Authorization", Gem.configuration.rubygems_api_key)
      end

      with_response(response)
    end

remove_webhook(name, url) click to toggle source

    # File lib/rubygems/commands/webhook_command.rb, line 66
    def remove_webhook(name, url)
      say "Removing webhook..."
      make_webhook_request(:delete, name, url, "api/v1/web_hooks/remove")
    end

usage() click to toggle source

    # File lib/rubygems/commands/webhook_command.rb, line 20
    def usage
      "#{program_name} [GEM_NAME]"
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.