Sha256: 93fc6b4aa6b5daf9391f054e5df69c979c557795224a20ed090644cf5181fed8

Contents?: true

Size: 1.99 KB

Versions: 4

Compression:

Stored size: 1.99 KB

Contents

module FDE
  module Slack
    class Message

      class Error < StandardError; end

      BLUE = '#BDE5F8'.freeze
      GREEN = '#DFF2BF'.freeze
      YELLOW = '#FEEFB3'.freeze
      RED = '#FFBABA'.freeze


      attr_accessor :username,
        :title,
        :author,
        :fields,
        :footer,
        :color

      def initialize(title, fields, options = {})
        @title = title
        @fields = fields
        if options[:title_link]
          @title_link = options[:title_link]
        end
        if options[:username]
          @username = options[:username] || 'FDE Slack Notifier'
        end
        if options[:author]
          @author = options[:author]
        end
        if options[:footer]
          @footer = options[:footer]
        end
      end

      def deliver(channel, level: :info)
        send(level, channel)
      end

      def info(channel)
        @color = BLUE
        send_message(channel)
      end

      def success(channel)
        @color = GREEN
        send_message(channel)
      end

      def warning(channel)
        @color = YELLOW
        send_message(channel)
      end

      def error(channel)
        @color = RED
        send_message(channel)
      end

      def add_field(field)
        @fields << field.to_h
      end

      private

      def send_message(channel)
        notifier = ::Slack::Notifier.new(
          FDE::Slack::Notification.config.webhook,
          channel: channel,
          username: @username
        )
        begin 
          notifier.ping message_hash
        rescue Slack::Notifier::APIError
          raise FDE::Slack::Message::Error
        end
      end

      def message_hash
        { attachments: [ attachment_hash ] }
      end

      def attachment_hash
        hash = {
          fallback: @title,
          ts: Time.now.to_i,
          color: @color,
          fields: @fields
        }
        hash.merge!(@author.to_h)
        hash.merge!(@footer.to_h)
        hash.merge!(@title_link.to_h)
        hash
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
fde-slack-notification-1.1.1 lib/slack/message.rb
fde-slack-notification-1.1.0 lib/slack/message.rb
fde-slack-notification-0.3.0 lib/slack/message.rb
fde-slack-notification-1.0.0 lib/slack/message.rb