Class: Slackify::Payload

Inherits:
Object
  • Object
show all
Defined in:
lib/slackify.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(context, status) ⇒ Payload

Returns a new instance of Payload.



7
8
9
10
# File 'lib/slackify.rb', line 7

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

Class Method Details

.build(context, status, channel) ⇒ Object



12
13
14
# File 'lib/slackify.rb', line 12

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

Instance Method Details

#build(channel) ⇒ Object



16
17
18
# File 'lib/slackify.rb', line 16

def build(channel)
  Shellwords.escape("payload=#{payload(channel)}")
end

#colorObject



102
103
104
105
106
107
108
109
110
111
# File 'lib/slackify.rb', line 102

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

#default_field_mapObject



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/slackify.rb', line 57

def default_field_map
  {
    'status' => {
      title: 'Status',
      value: @status,
      short: true
    },
    'stage' => {
      title: 'Stage',
      value: fetch(:stage),
      short: true
    },
    'branch' => {
      title: 'Branch',
      value: fetch(:branch),
      short: true
    },
    'revision' => {
      title: 'Revision',
      value: fetch(:current_revision),
      short: true
    },
    'hosts' => {
      title: 'Hosts',
      value: fetch(:slack_hosts),
      short: true
    }
  }
end

#fetch(*args, &block) ⇒ Object



87
88
89
# File 'lib/slackify.rb', line 87

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

#fields_mapObject



50
51
52
53
54
55
# File 'lib/slackify.rb', line 50

def fields_map
  @fields_map ||= [
    default_field_map,
    fetch(:slack_custom_field_mapping),
  ].reduce(&:merge)
end

#payload(channel) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/slackify.rb', line 20

def payload(channel)
  fields = fetch(:slack_fields).each_with_object([]) { |field, fields|
    if fields_map[field].fetch(:value).respond_to?(:call)
      field_data = fields_map[field]
      field_data[:value] = field_data.fetch(:value).call
      fields.push(field_data)
    else
      fields.push(fields_map[field])
    end
  }

  MultiJson.dump(
    {
      channel: channel,
      username: fetch(:slack_username),
      icon_emoji: fetch(:slack_emoji),
      parse: fetch(:slack_parse),
      attachments: [
        {
          fallback: text,
          color: color,
          text: text,
          fields: fields,
          mrkdwn_in: fetch(:slack_mrkdwn_in),
        }
      ]
    }
  )
end

#textObject



91
92
93
94
95
96
97
98
99
100
# File 'lib/slackify.rb', line 91

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