Sha256: 7ae6b6569fe0a186709dcf31822605eaa305f2b0a155205700870b68cc2c3413

Contents?: true

Size: 1.94 KB

Versions: 2

Compression:

Stored size: 1.94 KB

Contents

require 'multi_json'

module Slackify
  class Payload

    def initialize(context, status)
      @context = context
      @status = status
    end

    def self.build(context, status)
      new(context, status).build
    end

    def build
      "'payload=#{payload}'"
    end

    def payload
      MultiJson.dump(
        {
          channel: fetch(:slack_channel),
          username: fetch(:slack_username),
          icon_emoji: fetch(:slack_emoji),
          parse: fetch(:slack_parse),
          attachments: [
            {
              fallback: text,
              color: color,
              text: text,
              fields: [
                {
                  title: 'Status',
                  value: @status,
                  short: true
                },
                {
                  title: 'Stage',
                  value: fetch(:stage),
                  short: true
                },
                {
                  title: 'Branch',
                  value: fetch(:branch),
                  short: true
                },
                {
                  title: 'Revision',
                  value: fetch(:current_revision),
                  short: true
                },
                {
                  title: 'Hosts',
                  value: fetch(:slack_hosts),
                  short: true
                },
              ]
            }
          ]
        }
      )
    end

    def fetch(*args, &block)
      @context.fetch(*args, &block)
    end

    def text
      @text ||= case @status
      when :starting
        fetch(:slack_deploy_starting_text)
      when :success
        fetch(:slack_text)
      when :failed
        fetch(:slack_deploy_failed_text)
      end
    end

    def color
      case @status
      when :starting
        fetch(:slack_deploy_starting_color)
      when :success
        fetch(:slack_deploy_finished_color)
      when :failed
        fetch(:slack_deploy_failed_color)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
capistrano-slackify-2.6.1 lib/slackify.rb
capistrano-slackify-2.6.0 lib/slackify.rb