2018-08-10 02:45:01 -04:00
# frozen_string_literal: true
2018-06-24 06:35:35 -04:00
require 'hangouts_chat'
2018-06-24 06:12:07 -04:00
class HangoutsChatService < ChatNotificationService
def title
'Hangouts Chat'
end
def description
'Receive event notifications in Google Hangouts Chat'
end
def self . to_param
'hangouts_chat'
end
def help
' This service sends notifications about projects events to Google Hangouts Chat room . < br / >
To set up this service :
< ol >
< li > < a href = " https://developers.google.com/hangouts/chat/how-tos/webhooks " > Set up an incoming webhook for your room < / a>. All notifications will come to this room.< / li >
< li > Paste the < strong > Webhook URL < / strong> into the field below.< / li >
< li > Select events below to enable notifications . < / li>
< / ol>'
end
def event_field ( event )
end
def default_channel_placeholder
end
def webhook_placeholder
'https://chat.googleapis.com/v1/spaces…'
end
2019-04-26 17:08:41 -04:00
def self . supported_events
%w[ push issue confidential_issue merge_request note confidential_note tag_push
pipeline wiki_page ]
end
2018-06-24 06:12:07 -04:00
def default_fields
[
{ type : 'text' , name : 'webhook' , placeholder : " e.g. #{ webhook_placeholder } " } ,
{ type : 'checkbox' , name : 'notify_only_broken_pipelines' } ,
2019-09-13 14:06:03 -04:00
{ type : 'select' , name : 'branches_to_be_notified' , choices : BRANCH_CHOICES }
2018-06-24 06:12:07 -04:00
]
end
2018-06-24 06:35:35 -04:00
private
def notify ( message , opts )
2018-07-14 06:19:04 -04:00
simple_text = parse_simple_text_message ( message )
2018-06-24 06:35:35 -04:00
HangoutsChat :: Sender . new ( webhook ) . simple ( simple_text )
end
2018-07-14 06:19:04 -04:00
def parse_simple_text_message ( message )
2018-06-24 06:35:35 -04:00
header = message . pretext
return header if message . attachments . empty?
2018-07-14 06:19:04 -04:00
attachment = message . attachments . first
title = format_attachment_title ( attachment )
body = attachment [ :text ]
2018-06-24 06:35:35 -04:00
[ header , title , body ] . compact . join ( " \n " )
end
2018-07-14 06:19:04 -04:00
def format_attachment_title ( attachment )
2018-07-03 08:01:56 -04:00
return attachment [ :title ] unless attachment [ :title_link ]
2018-06-24 06:35:35 -04:00
" < #{ attachment [ :title_link ] } | #{ attachment [ :title ] } > "
end
2018-06-24 06:12:07 -04:00
end