class Lolcommits::Plugin::Slack

Constants

ENDPOINT_URL

Slack API File upload endpoint

RETRY_COUNT

Number of times to retry if RestClient.post fails

Public Instance Methods

configure_options!() click to toggle source

Prompts the user to configure integration with Slack

Prompts user for a Slack `access_token` and a comma seperated list of valid Slack channel IDs.

@return [Hash] a hash of configured plugin options

Calls superclass method
# File lib/lolcommits/plugin/slack.rb, line 64
def configure_options!
  options = super

  if options[:enabled]
    print "open the url below and issue a token for your user:\n"
    print "https://api.slack.com/custom-integrations/legacy-tokens\n"
    print "enter the generated token below, then press enter: (e.g. xxxx-xxxxxxxxx-xxxx) \n"
    code = parse_user_input(gets.strip)

    print "enter a comma-seperated list of channel ids to post lolcommits in, then press enter: (e.g. c1234567890,c1234567890)\n"
    print "note: you must use channel ids (not channel names). grab them from here; https://api.slack.com/methods/channels.list/test\n"
    channels = parse_user_input(gets.strip)

    options.merge!(
      access_token: code,
      channels: channels
    )
  end

  options
end
run_capture_ready() click to toggle source

Capture ready hook, runs after lolcommits captures a snapshot.

Uses `RestClient` to post the lolcommit to (one or more) Slack channels. Posting will be retried (`RETRY_COUNT`) times if any error occurs.

The post contains the git commit message, repo name and the SHA is used for the filename. The response from the POST request is sent to the debug log.

# File lib/lolcommits/plugin/slack.rb, line 26
def run_capture_ready
  retries = RETRY_COUNT
  begin
    print "Posting to Slack ... "
    response = RestClient.post(
      ENDPOINT_URL,
      file: File.new(runner.lolcommit_path),
      token: configuration[:access_token],
      filetype: 'jpg',
      filename: runner.sha,
      title: runner.message + "[#{runner.vcs_info.repo}]",
      channels: configuration[:channels]
    )

    debug response
    print "done!\n"
  rescue => e
    retries -= 1
    print "failed! #{e.message}"
    if retries > 0
      print " - retrying ...\n"
      retry
    else
      print " - giving up ...\n"
      puts 'Try running config again:'
      puts "\tlolcommits --config -p slack"
    end
  end
end