Sha256: c413455c7ec47a2daaf5f890d2a47468aa113d14568f4ffad5c10d4875e03e26

Contents?: true

Size: 1.83 KB

Versions: 5

Compression:

Stored size: 1.83 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.7.0 lib/lolcommits/plugins/lol_slack.rb
lolcommits-0.6.7 lib/lolcommits/plugins/lol_slack.rb
lolcommits-0.6.6 lib/lolcommits/plugins/lol_slack.rb
lolcommits-0.6.6.pre1 lib/lolcommits/plugins/lol_slack.rb
lolcommits-0.6.5 lib/lolcommits/plugins/lol_slack.rb