From 07d9b036a9b7b3502238cac0fdb4980bfe02e128 Mon Sep 17 00:00:00 2001 From: Kukovskii Vladimir Date: Sun, 24 Jun 2018 19:12:07 +0900 Subject: Add dummy Google Hangouts Chat integration --- app/models/project.rb | 1 + .../project_services/hangouts_chat_service.rb | 41 ++++++++++++++++++++++ app/models/service.rb | 1 + 3 files changed, 43 insertions(+) create mode 100644 app/models/project_services/hangouts_chat_service.rb (limited to 'app/models') diff --git a/app/models/project.rb b/app/models/project.rb index e29bca365a4..a0744b0c58e 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -154,6 +154,7 @@ class Project < ActiveRecord::Base has_one :mock_monitoring_service has_one :microsoft_teams_service has_one :packagist_service + has_one :hangouts_chat_service # TODO: replace these relations with the fork network versions has_one :forked_project_link, foreign_key: "forked_to_project_id" diff --git a/app/models/project_services/hangouts_chat_service.rb b/app/models/project_services/hangouts_chat_service.rb new file mode 100644 index 00000000000..99a6afcc11a --- /dev/null +++ b/app/models/project_services/hangouts_chat_service.rb @@ -0,0 +1,41 @@ +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. +
  3. Paste the Webhook URL into the field below.
  4. +
  5. Select events below to enable notifications.
  6. +
' + end + + def event_field(event) + end + + def default_channel_placeholder + end + + def webhook_placeholder + 'https://chat.googleapis.com/v1/spaces…' + end + + def default_fields + [ + { type: 'text', name: 'webhook', placeholder: "e.g. #{webhook_placeholder}" }, + { type: 'checkbox', name: 'notify_only_broken_pipelines' }, + { type: 'checkbox', name: 'notify_only_default_branch' } + ] + end +end diff --git a/app/models/service.rb b/app/models/service.rb index ad835293b46..cbfe0c6eedd 100644 --- a/app/models/service.rb +++ b/app/models/service.rb @@ -254,6 +254,7 @@ class Service < ActiveRecord::Base emails_on_push external_wiki flowdock + hangouts_chat hipchat irker jira -- cgit v1.2.3 From cb77d939c919ac8ebf4288724febdf7bb8238399 Mon Sep 17 00:00:00 2001 From: Kukovskii Vladimir Date: Sun, 24 Jun 2018 19:35:35 +0900 Subject: Add Hangouts Chat service implementation --- .../project_services/hangouts_chat_service.rb | 25 ++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'app/models') diff --git a/app/models/project_services/hangouts_chat_service.rb b/app/models/project_services/hangouts_chat_service.rb index 99a6afcc11a..00e9b634dd1 100644 --- a/app/models/project_services/hangouts_chat_service.rb +++ b/app/models/project_services/hangouts_chat_service.rb @@ -1,3 +1,5 @@ +require 'hangouts_chat' + class HangoutsChatService < ChatNotificationService def title 'Hangouts Chat' @@ -38,4 +40,27 @@ class HangoutsChatService < ChatNotificationService { type: 'checkbox', name: 'notify_only_default_branch' } ] end + + private + + def notify(message, opts) + simple_text = compose_simple_message(message) + HangoutsChat::Sender.new(webhook).simple(simple_text) + end + + def compose_simple_message(message) + header = message.pretext + return header if message.attachments.empty? + + title = fetch_attachment_title(message.attachments.first) + body = message.attachments.first[:text] + [header, title, body].compact.join("\n") + end + + def fetch_attachment_title(attachment) + return nil if attachment[:title].nil? + return attachment[:title] if attachment[:title_link].nil? + + "<#{attachment[:title_link]}|#{attachment[:title]}>" + end end -- cgit v1.2.3 From 5b3a9d6bc20b2526483964187454b8c998b20360 Mon Sep 17 00:00:00 2001 From: Kukovskii Vladimir Date: Tue, 3 Jul 2018 21:01:56 +0900 Subject: Fix fetch_attachment_title method of Hangouts Chat service --- app/models/project_services/hangouts_chat_service.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'app/models') diff --git a/app/models/project_services/hangouts_chat_service.rb b/app/models/project_services/hangouts_chat_service.rb index 00e9b634dd1..53f11c424e3 100644 --- a/app/models/project_services/hangouts_chat_service.rb +++ b/app/models/project_services/hangouts_chat_service.rb @@ -58,8 +58,7 @@ class HangoutsChatService < ChatNotificationService end def fetch_attachment_title(attachment) - return nil if attachment[:title].nil? - return attachment[:title] if attachment[:title_link].nil? + return attachment[:title] unless attachment[:title_link] "<#{attachment[:title_link]}|#{attachment[:title]}>" end -- cgit v1.2.3 From d64196ddb3336bd435c5756407cabc162f9acc6c Mon Sep 17 00:00:00 2001 From: Kukovskii Vladimir Date: Sat, 14 Jul 2018 19:19:04 +0900 Subject: Fix couple of moments in HangoutsChatService and its spec --- app/models/project_services/hangouts_chat_service.rb | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'app/models') diff --git a/app/models/project_services/hangouts_chat_service.rb b/app/models/project_services/hangouts_chat_service.rb index 53f11c424e3..a8512c5f57c 100644 --- a/app/models/project_services/hangouts_chat_service.rb +++ b/app/models/project_services/hangouts_chat_service.rb @@ -44,20 +44,22 @@ class HangoutsChatService < ChatNotificationService private def notify(message, opts) - simple_text = compose_simple_message(message) + simple_text = parse_simple_text_message(message) HangoutsChat::Sender.new(webhook).simple(simple_text) end - def compose_simple_message(message) + def parse_simple_text_message(message) header = message.pretext return header if message.attachments.empty? - title = fetch_attachment_title(message.attachments.first) - body = message.attachments.first[:text] + attachment = message.attachments.first + title = format_attachment_title(attachment) + body = attachment[:text] + [header, title, body].compact.join("\n") end - def fetch_attachment_title(attachment) + def format_attachment_title(attachment) return attachment[:title] unless attachment[:title_link] "<#{attachment[:title_link]}|#{attachment[:title]}>" -- cgit v1.2.3