Sha256: fe4862990e55f63eb28fa50c7f61d06f0e978699afaf1974fcf2e158e03dcbc3

Contents?: true

Size: 1.63 KB

Versions: 2

Compression:

Stored size: 1.63 KB

Contents

module Vidar
  class SlackNotification
    SUCCESS_COLOR = "good".freeze
    ERROR_COLOR = "danger".freeze

    def initialize(webhook_url:, github:, revision:, revision_name:, cluster_name:, cluster_url:)
      @webhook_url   = webhook_url
      @github        = github
      @revision      = revision
      @revision_name = revision_name
      @cluster_name  = cluster_name
      @cluster_url   = cluster_url
      @connection    = Faraday.new
    end

    def configured?
      !webhook_url.to_s.empty?
    end

    def error
      message = "Failed deploy of #{github_link} to #{cluster_link} :fire: <!channel>"
      perform_with data(message: message, color: ERROR_COLOR)
    end

    def success
      message = "Successful deploy of #{github_link} to #{cluster_link}"
      perform_with data(message: message, color: SUCCESS_COLOR)
    end

    def perform_with(data)
      connection.post do |req|
        req.url webhook_url
        req.headers['Content-Type'] = 'application/json'
        req.body = data.to_json
      end
    end

    private

    attr_reader :webhook_url, :github, :revision, :revision_name, :cluster_name, :cluster_url, :connection

    def data(message:, color:)
      {
        "attachments": [
          {
            "title": github,
            "title_link": github_url,
            "color": color,
            "text": message,
            "fallback": message
          }
        ]
      }
    end

    def github_url
      "https://github.com/#{github}/commit/#{revision}"
    end

    def github_link
      "<#{github_url}|#{revision_name}>"
    end

    def cluster_link
      "<#{cluster_url}|#{cluster_name}>"
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
vidar-0.3.0 lib/vidar/slack_notification.rb
vidar-0.2.1 lib/vidar/slack_notification.rb