Sha256: 3420b2b836f114b27130f73abf47a0beb760c8f7ec17f043d4e7ab098a70871d

Contents?: true

Size: 1.81 KB

Versions: 5

Compression:

Stored size: 1.81 KB

Contents

# -*- encoding : utf-8 -*-
require 'rest_client'

module Lolcommits
  class LolSlack < Plugin
    ENDPOINT_URL = 'https://slack.com/api/files.upload'.freeze
    RETRY_COUNT  = 2

    def self.name
      'slack'
    end

    def self.runner_order
      :postcapture
    end

    def configured?
      !configuration['access_token'].nil?
    end

    def configure
      print "Open the URL below and issue a token for your user:\n"
      print "https://api.slack.com/web\n"
      print "Enter the generated token below, then press enter: (e.g. xxxx-xxxxxxxxx-xxxx) \n"
      code = STDIN.gets.to_s.strip
      print "Enter a comma-seperated list of channel IDs to post images 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 = STDIN.gets.to_s.strip

      { 'access_token' => code,
        'channels' => channels }
    end

    def configure_options!
      options = super
      if options['enabled']
        config = configure
        options.merge!(config)
      end
      options
    end

    def run_postcapture
      return unless valid_configuration?

      retries = RETRY_COUNT
      begin

        response = RestClient.post(
          ENDPOINT_URL,
          file: File.new(runner.main_image),
          token: configuration['access_token'],
          filetype: 'jpg',
          filename: runner.sha,
          title: runner.message + "[#{runner.vcs_info.repo}]",
          channels: configuration['channels']
        )

        debug response
      rescue => e
        retries -= 1
        retry if retries > 0
        puts "Posting to slack failed - #{e.message}"
        puts 'Try running config again:'
        puts "\tlolcommits --config --plugin slack"
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
lolcommits-0.9.2 lib/lolcommits/plugins/lol_slack.rb
lolcommits-0.9.2.pre1 lib/lolcommits/plugins/lol_slack.rb
lolcommits-0.9.1 lib/lolcommits/plugins/lol_slack.rb
lolcommits-0.9.1.pre1 lib/lolcommits/plugins/lol_slack.rb
lolcommits-0.9.0 lib/lolcommits/plugins/lol_slack.rb