# frozen_string_literal: true require 'hangouts_chat' 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.
To set up this service:
  1. Set up an incoming webhook for your room. All notifications will come to this room.
  2. Paste the Webhook URL into the field below.
  3. Select events below to enable notifications.
' end def event_field(event) end def default_channel_placeholder end def webhook_placeholder 'https://chat.googleapis.com/v1/spaces…' end def self.supported_events %w[push issue confidential_issue merge_request note confidential_note tag_push pipeline wiki_page] end def default_fields [ { type: 'text', name: 'webhook', placeholder: "e.g. #{webhook_placeholder}" }, { type: 'checkbox', name: 'notify_only_broken_pipelines' }, { type: 'select', name: 'branches_to_be_notified', choices: branch_choices } ] end private def notify(message, opts) simple_text = parse_simple_text_message(message) HangoutsChat::Sender.new(webhook).simple(simple_text) end def parse_simple_text_message(message) header = message.pretext return header if message.attachments.empty? attachment = message.attachments.first title = format_attachment_title(attachment) body = attachment[:text] [header, title, body].compact.join("\n") end def format_attachment_title(attachment) return attachment[:title] unless attachment[:title_link] "<#{attachment[:title_link]}|#{attachment[:title]}>" end end