Sha256: 3e13ddacfe198d2287f9f54dda789310a5f88a0b0f6355071c1ad9c580bf1af4

Contents?: true

Size: 1.91 KB

Versions: 3

Compression:

Stored size: 1.91 KB

Contents

module Vidar
  class SlackNotification
    def initialize(github:, revision:, revision_name:, deploy_config:)
      @github          = github
      @revision        = revision
      @revision_name   = revision_name
      @deploy_name     = deploy_config.name
      @deploy_url      = deploy_config.url
      @default_color   = deploy_config.default_color
      @success_color   = deploy_config.success_color
      @failure_color   = deploy_config.failure_color
      @webhook_url     = deploy_config.slack_webhook_url
      @connection      = Faraday.new
    end

    def configured?
      !webhook_url.to_s.empty?
    end

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

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

    def deliver(message:, color: default_color)
      perform_with data(message: message, color: 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 :github, :revision, :revision_name,
      :deploy_name, :deploy_url, :webhook_url,
      :default_color, :success_color, :failure_color,
      :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 deploy_link
      "<#{deploy_url}|#{deploy_name}>"
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
vidar-1.0.0 lib/vidar/slack_notification.rb
vidar-0.13.1 lib/vidar/slack_notification.rb
vidar-0.13.0 lib/vidar/slack_notification.rb