summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTiago Botelho <tiagonbotelho@hotmail.com>2017-04-04 10:16:24 +0100
committerTiago Botelho <tiagonbotelho@hotmail.com>2017-04-05 13:57:12 +0100
commit05f69ef21246f1a2c0b83540d3e205c9e4d77819 (patch)
tree7d7d0d91fd2044d154d618622401e00958adefb8
parent9bfa0a5ffab279f25c52f2e1e9644616168bf994 (diff)
downloadgitlab-ce-05f69ef21246f1a2c0b83540d3e205c9e4d77819.tar.gz
adds microsoft team activity object and refactors code accordingly
-rw-r--r--app/models/project_services/chat_message/base_message.rb4
-rw-r--r--app/models/project_services/chat_message/issue_message.rb18
-rw-r--r--app/models/project_services/chat_message/merge_message.rb16
-rw-r--r--app/models/project_services/chat_message/note_message.rb39
-rw-r--r--app/models/project_services/chat_message/pipeline_message.rb23
-rw-r--r--app/models/project_services/chat_message/push_message.rb38
-rw-r--r--app/models/project_services/chat_message/wiki_page_message.rb17
-rw-r--r--app/models/project_services/chat_notification_service.rb3
-rw-r--r--app/models/project_services/microsoft_teams_service.rb5
-rw-r--r--lib/microsoft_teams/activity.rb19
-rw-r--r--lib/microsoft_teams/notifier.rb23
11 files changed, 107 insertions, 98 deletions
diff --git a/app/models/project_services/chat_message/base_message.rb b/app/models/project_services/chat_message/base_message.rb
index e17d0181691..0f0657998c7 100644
--- a/app/models/project_services/chat_message/base_message.rb
+++ b/app/models/project_services/chat_message/base_message.rb
@@ -2,8 +2,10 @@ require 'slack-notifier'
module ChatMessage
class BaseMessage
+ attr_reader :markdown_format
+
def initialize(params)
- raise NotImplementedError
+ @markdown_format = params[:markdown_format] || false
end
def pretext
diff --git a/app/models/project_services/chat_message/issue_message.rb b/app/models/project_services/chat_message/issue_message.rb
index 398ea1dee3d..aebd9aa93e5 100644
--- a/app/models/project_services/chat_message/issue_message.rb
+++ b/app/models/project_services/chat_message/issue_message.rb
@@ -10,9 +10,10 @@ module ChatMessage
attr_reader :action
attr_reader :state
attr_reader :description
- attr_reader :markdown_format
def initialize(params)
+ super(params)
+
@user_name = params[:user][:username]
@user_avatar = params[:user][:avatar_url]
@project_name = params[:project_name]
@@ -26,7 +27,6 @@ module ChatMessage
@action = obj_attr[:action]
@state = obj_attr[:state]
@description = obj_attr[:description] || ''
- @markdown_format = params[:format]
end
def attachments
@@ -36,12 +36,12 @@ module ChatMessage
end
def activity
- {
- title: "Issue #{state} by #{user_name}",
- subtitle: "to: #{project_link}",
- text: issue_link,
- image: user_avatar
- }
+ MicrosoftTeams::Activity.new(
+ "Issue #{state} by #{user_name}",
+ "to: #{project_link}",
+ issue_link,
+ user_avatar
+ ).to_json
end
private
@@ -60,7 +60,7 @@ module ChatMessage
title_link: issue_url,
text: format(description),
color: "#C95823"
- }]
+ }]
end
def project_link
diff --git a/app/models/project_services/chat_message/merge_message.rb b/app/models/project_services/chat_message/merge_message.rb
index 13a894df980..e9ef211438b 100644
--- a/app/models/project_services/chat_message/merge_message.rb
+++ b/app/models/project_services/chat_message/merge_message.rb
@@ -9,9 +9,10 @@ module ChatMessage
attr_reader :target_branch
attr_reader :state
attr_reader :title
- attr_reader :markdown_format
def initialize(params)
+ super(params)
+
@user_name = params[:user][:username]
@user_avatar = params[:user][:avatar_url]
@project_name = params[:project_name]
@@ -24,16 +25,15 @@ module ChatMessage
@target_branch = obj_attr[:target_branch]
@state = obj_attr[:state]
@title = format_title(obj_attr[:title])
- @markdown_format = params[:format]
end
def activity
- {
- title: "Merge Request #{state} by #{user_name}",
- subtitle: "to: #{project_link}",
- text: merge_request_link,
- image: user_avatar
- }
+ MicrosoftTeams::Activity.new(
+ "Merge Request #{state} by #{user_name}",
+ "to: #{project_link}",
+ merge_request_link,
+ user_avatar
+ ).to_json
end
def attachments
diff --git a/app/models/project_services/chat_message/note_message.rb b/app/models/project_services/chat_message/note_message.rb
index da03e4d946e..26d944007a6 100644
--- a/app/models/project_services/chat_message/note_message.rb
+++ b/app/models/project_services/chat_message/note_message.rb
@@ -7,30 +7,30 @@ module ChatMessage
attr_reader :note
attr_reader :note_url
attr_reader :comment_attrs
- attr_reader :markdown_format
def initialize(params)
params = HashWithIndifferentAccess.new(params)
+
+ super(params)
+
@user_name = params[:user][:name]
@user_avatar = params[:user][:avatar_url]
@project_name = params[:project_name]
@project_url = params[:project_url]
- obj_attr = params[:object_attributes]
- obj_attr = HashWithIndifferentAccess.new(obj_attr)
+ obj_attr = HashWithIndifferentAccess.new(params[:object_attributes])
@note = obj_attr[:note]
@note_url = obj_attr[:url]
@comment_attrs = comment_params(obj_attr[:noteable_type], params)
- @markdown_format = params[:format]
end
def activity
- {
- title: "#{user_name} #{link('commented on ' + comment_attrs[:target], note_url)}",
- subtitle: "to: #{project_link}",
- text: "*#{comment_attrs[:title]}*",
- image: user_avatar
- }
+ MicrosoftTeams::Activity.new(
+ "#{user_name} #{link('commented on ' + comment_attrs[:target], note_url)}",
+ "to: #{project_link}",
+ comment_attrs[:title],
+ user_avatar
+ ).to_json
end
def attachments
@@ -40,19 +40,21 @@ module ChatMessage
private
def message
- commented_on_message(comment_attrs)
+ "#{user_name} #{link('commented on ' + comment_attrs[:target], note_url)} in #{project_link}: *#{comment_attrs[:title]}*"
end
def comment_params(noteable_type, params)
+ params = HashWithIndifferentAccess.new(params)
+
case noteable_type
when "Commit"
- create_commit_note(HashWithIndifferentAccess.new(params[:commit]))
+ create_commit_note(params[:commit])
when "Issue"
- create_issue_note(HashWithIndifferentAccess.new(params[:issue]))
+ create_issue_note(params[:issue])
when "MergeRequest"
- create_merge_note(HashWithIndifferentAccess.new(params[:merge_request]))
+ create_merge_note(params[:merge_request])
when "Snippet"
- create_snippet_note(HashWithIndifferentAccess.new(params[:snippet]))
+ create_snippet_note(params[:snippet])
end
end
@@ -65,8 +67,7 @@ module ChatMessage
end
def create_commit_note(commit)
- commit_sha = commit[:id]
- commit_sha = Commit.truncate_sha(commit_sha)
+ commit_sha = Commit.truncate_sha(commit[:id])
{ target: "commit #{commit_sha}", title: format_title(commit[:message]) }
end
@@ -86,9 +87,5 @@ module ChatMessage
def project_link
link(project_name, project_url)
end
-
- def commented_on_message(target:, title:)
- "#{user_name} #{link('commented on ' + target, note_url)} in #{project_link}: *#{title}*"
- end
end
end
diff --git a/app/models/project_services/chat_message/pipeline_message.rb b/app/models/project_services/chat_message/pipeline_message.rb
index 4c1cf120614..8f4fcf09f64 100644
--- a/app/models/project_services/chat_message/pipeline_message.rb
+++ b/app/models/project_services/chat_message/pipeline_message.rb
@@ -9,7 +9,6 @@ module ChatMessage
attr_reader :duration
attr_reader :pipeline_id
attr_reader :user_avatar
- attr_reader :markdown_format
def initialize(data)
pipeline_attributes = data[:object_attributes]
@@ -19,12 +18,12 @@ module ChatMessage
@duration = pipeline_attributes[:duration]
@pipeline_id = pipeline_attributes[:id]
+ super(data)
+
@project_name = data[:project][:path_with_namespace]
@project_url = data[:project][:web_url]
@user_name = (data[:user] && data[:user][:name]) || 'API'
@user_avatar = data[:user][:avatar_url] || ''
-
- @markdown_format = params[:format]
end
def pretext
@@ -36,12 +35,12 @@ module ChatMessage
end
def activity
- {
- title: "Pipeline #{pipeline_link} of #{branch_link} #{ref_type} by #{user_name} #{humanized_status}",
- subtitle: "to: #{project_link}",
- text: "in #{duration} #{'second'.pluralize(duration)}",
- image: user_avatar
- }
+ MicrosoftTeams::Activity.new(
+ "Pipeline #{pipeline_link} of #{branch_link} #{ref_type} by #{user_name} #{humanized_status}",
+ "to: #{project_link}",
+ "in #{duration} #{time_measure}",
+ user_avatar
+ ).to_json
end
def attachments
@@ -51,7 +50,7 @@ module ChatMessage
private
def message
- "#{project_link}: Pipeline #{pipeline_link} of #{branch_link} #{ref_type} by #{user_name} #{humanized_status} in #{duration} #{'second'.pluralize(duration)}"
+ "#{project_link}: Pipeline #{pipeline_link} of #{branch_link} #{ref_type} by #{user_name} #{humanized_status} in #{duration} #{time_measure}"
end
def humanized_status
@@ -90,5 +89,9 @@ module ChatMessage
def pipeline_link
"[##{pipeline_id}](#{pipeline_url})"
end
+
+ def time_measure
+ 'second'.pluralize(duration)
+ end
end
end
diff --git a/app/models/project_services/chat_message/push_message.rb b/app/models/project_services/chat_message/push_message.rb
index 8e11ddba594..71fa77712c0 100644
--- a/app/models/project_services/chat_message/push_message.rb
+++ b/app/models/project_services/chat_message/push_message.rb
@@ -9,9 +9,10 @@ module ChatMessage
attr_reader :ref_type
attr_reader :user_name
attr_reader :user_avatar
- attr_reader :markdown_format
def initialize(params)
+ super(params)
+
@after = params[:after]
@before = params[:before]
@commits = params.fetch(:commits, [])
@@ -21,16 +22,24 @@ module ChatMessage
@ref = Gitlab::Git.ref_name(params[:ref])
@user_name = params[:user_name]
@user_avatar = params[:user_avatar]
- @markdown_format = params[:format]
end
def activity
- {
- title: activity_title,
- subtitle: "to: #{project_link}",
- text: compare_link,
- image: user_avatar
- }
+ action =
+ if new_branch?
+ "created"
+ elsif removed_branch?
+ "removed"
+ else
+ "pushed to"
+ end
+
+ MicrosoftTeams::Activity.new(
+ "#{user_name} #{action} #{ref_type}",
+ "to: #{project_link}",
+ compare_link,
+ user_avatar
+ ).to_json
end
def attachments
@@ -112,19 +121,6 @@ module ChatMessage
"[Compare changes](#{compare_url})"
end
- def activity_title
- action =
- if new_branch?
- "created"
- elsif removed_branch?
- "removed"
- else
- "pushed to"
- end
-
- "#{user_name} #{action} #{ref_type}"
- end
-
def attachment_color
'#345'
end
diff --git a/app/models/project_services/chat_message/wiki_page_message.rb b/app/models/project_services/chat_message/wiki_page_message.rb
index 4f5c2e719c9..85c2efd75bc 100644
--- a/app/models/project_services/chat_message/wiki_page_message.rb
+++ b/app/models/project_services/chat_message/wiki_page_message.rb
@@ -7,9 +7,10 @@ module ChatMessage
attr_reader :wiki_page_url
attr_reader :action
attr_reader :description
- attr_reader :markdown_format
def initialize(params)
+ super(params)
+
@user_name = params[:user][:username]
@user_avatar = params[:user][:avatar_url]
@project_name = params[:project_name]
@@ -28,17 +29,15 @@ module ChatMessage
when "update"
"edited"
end
-
- @markdown_format = params[:format]
end
def activity
- {
- title: "#{user_name} #{action} #{wiki_page_link}",
- subtitle: "in: #{project_link}",
- text: title,
- image: user_avatar
- }
+ MicrosoftTeams::Activity.new(
+ "#{user_name} #{action} #{wiki_page_link}",
+ "in: #{project_link}",
+ title,
+ user_avatar
+ ).to_json
end
def attachments
diff --git a/app/models/project_services/chat_notification_service.rb b/app/models/project_services/chat_notification_service.rb
index 9a23038b7f2..75834103db5 100644
--- a/app/models/project_services/chat_notification_service.rb
+++ b/app/models/project_services/chat_notification_service.rb
@@ -51,8 +51,7 @@ class ChatNotificationService < Service
data = data.merge(
project_url: project_url,
- project_name: project_name,
- format: false
+ project_name: project_name
)
# WebHook events often have an 'update' event that follows a 'open' or
diff --git a/app/models/project_services/microsoft_teams_service.rb b/app/models/project_services/microsoft_teams_service.rb
index 08eaeb06228..2a8ea3f7e21 100644
--- a/app/models/project_services/microsoft_teams_service.rb
+++ b/app/models/project_services/microsoft_teams_service.rb
@@ -50,7 +50,7 @@ class MicrosoftTeamsService < ChatNotificationService
data = data.merge(
project_url: project_url,
project_name: project_name,
- format: true
+ markdown_format: true
)
message = get_message(object_kind, data)
@@ -59,8 +59,9 @@ class MicrosoftTeamsService < ChatNotificationService
MicrosoftTeams::Notifier.new(webhook).ping({
title: message.project_name,
+ pretext: message.pretext,
activity: message.activity,
- attachments: message.attachments,
+ attachments: message.attachments
})
end
end
diff --git a/lib/microsoft_teams/activity.rb b/lib/microsoft_teams/activity.rb
new file mode 100644
index 00000000000..e25ce262cbf
--- /dev/null
+++ b/lib/microsoft_teams/activity.rb
@@ -0,0 +1,19 @@
+module MicrosoftTeams
+ class Activity
+ def initialize(title, subtitle, text, image)
+ @title = title
+ @subtitle = subtitle
+ @text = text
+ @image = image
+ end
+
+ def to_json
+ {
+ 'activityTitle' => @title,
+ 'activitySubtitle' => @subtitle,
+ 'activityText' => @text,
+ 'activityImage' => @image
+ }.to_json
+ end
+ end
+end
diff --git a/lib/microsoft_teams/notifier.rb b/lib/microsoft_teams/notifier.rb
index 8e422575636..a5d2fe15ab6 100644
--- a/lib/microsoft_teams/notifier.rb
+++ b/lib/microsoft_teams/notifier.rb
@@ -15,26 +15,19 @@ module MicrosoftTeams
private
def body(options = {})
+ attachments = options[:attachments]
result = { 'sections' => [] }
- result['title'] = options[:title] if options[:title]
- result['summary'] = options[:activity][:title]
- result['sections'] << {
- 'activityTitle' => options[:activity][:title],
- 'activitySubtitle' => options[:activity][:subtitle],
- 'activityText' => options[:activity][:text],
- 'activityImage' => options[:activity][:image]
- }
+ result['title'] = options[:title]
+ result['summary'] = options[:pretext]
+ result['sections'] << options[:activity]
- if options[:attachments].present? && !options[:attachments].empty?
- result['sections'] << { 'title' => 'Details', 'facts' => attachments(options[:attachments]) }
- end
+ result['sections'] << {
+ 'title' => 'Details',
+ 'facts' => [{ 'name' => 'Attachments', 'value' => attachments }]
+ } if attachments.present? && attachments.empty?
result.to_json
end
-
- def attachments(content)
- [{ 'name' => 'Attachments', 'value' => content }]
- end
end
end