summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFederico Ravasio <ravasio.federico@gmail.com>2014-04-06 11:57:48 +0200
committerFederico Ravasio <ravasio.federico@gmail.com>2014-04-06 11:57:48 +0200
commit6a9eb4b231fc7e563b9c3551dafc5d1bfdc959b3 (patch)
treea87fb113d3c3b313fb63505122d42b367d683616
parent2ceef7691795958e657f24d78089eecb0eb4a90d (diff)
downloadgitlab-ce-6a9eb4b231fc7e563b9c3551dafc5d1bfdc959b3.tar.gz
Improved Slack integration with message attachments.
-rw-r--r--app/models/project_services/slack_message.rb25
-rw-r--r--app/models/project_services/slack_service.rb2
-rw-r--r--spec/models/slack_message_spec.rb25
3 files changed, 38 insertions, 14 deletions
diff --git a/app/models/project_services/slack_message.rb b/app/models/project_services/slack_message.rb
index b2b8d6fed7a..28204e5ea60 100644
--- a/app/models/project_services/slack_message.rb
+++ b/app/models/project_services/slack_message.rb
@@ -11,10 +11,16 @@ class SlackMessage
@username = params.fetch(:user_name)
end
- def compose
+ def pretext
format(message)
end
+ def attachments
+ return [] if new_branch? || removed_branch?
+
+ commit_message_attachments
+ end
+
private
attr_reader :after
@@ -31,7 +37,7 @@ class SlackMessage
elsif removed_branch?
removed_branch_message
else
- push_message << commit_messages
+ push_message
end
end
@@ -54,15 +60,20 @@ class SlackMessage
def commit_messages
commits.each_with_object('') do |commit, str|
str << compose_commit_message(commit)
- end
+ end.chomp
+ end
+
+ def commit_message_attachments
+ [{ text: format(commit_messages), color: attachment_color }]
end
def compose_commit_message(commit)
- id = commit.fetch(:id)[0..5]
+ author = commit.fetch(:author).fetch(:name)
+ id = commit.fetch(:id)[0..8]
message = commit.fetch(:message)
url = commit.fetch(:url)
- "\n - #{message} ([#{id}](#{url}))"
+ "[#{id}](#{url}): #{message} - #{author}\n"
end
def new_branch?
@@ -92,4 +103,8 @@ class SlackMessage
def compare_link
"[Compare changes](#{compare_url})"
end
+
+ def attachment_color
+ '#345'
+ end
end
diff --git a/app/models/project_services/slack_service.rb b/app/models/project_services/slack_service.rb
index 410dda22d47..a3697b31352 100644
--- a/app/models/project_services/slack_service.rb
+++ b/app/models/project_services/slack_service.rb
@@ -53,7 +53,7 @@ class SlackService < Service
notifier = Slack::Notifier.new(subdomain, token)
notifier.channel = room
notifier.username = 'GitLab'
- notifier.ping(message.compose)
+ notifier.ping(message.pretext, attachments: message.attachments)
end
private
diff --git a/spec/models/slack_message_spec.rb b/spec/models/slack_message_spec.rb
index b39cd4edf82..1cd58534702 100644
--- a/spec/models/slack_message_spec.rb
+++ b/spec/models/slack_message_spec.rb
@@ -14,20 +14,27 @@ describe SlackMessage do
}
}
+ let(:color) { '#345' }
+
context 'push' do
before do
args[:commits] = [
- { message: 'message1', url: 'url1', id: 'abcdefghi' },
- { message: 'message2', url: 'url2', id: '123456789' },
+ { message: 'message1', url: 'url1', id: 'abcdefghijkl', author: { name: 'author1' } },
+ { message: 'message2', url: 'url2', id: '123456789012', author: { name: 'author2' } },
]
end
it 'returns a message regarding pushes' do
- subject.compose.should ==
+ subject.pretext.should ==
'user_name pushed to branch <url/commits/master|master> of ' <<
- '<url|project_name> (<url/compare/before...after|Compare changes>)' <<
- "\n - message1 (<url1|abcdef>)" <<
- "\n - message2 (<url2|123456>)"
+ '<url|project_name> (<url/compare/before...after|Compare changes>)'
+ subject.attachments.should == [
+ {
+ text: "<url1|abcdefghi>: message1 - author1\n" <<
+ "<url2|123456789>: message2 - author2",
+ color: color,
+ }
+ ]
end
end
@@ -37,9 +44,10 @@ describe SlackMessage do
end
it 'returns a message regarding a new branch' do
- subject.compose.should ==
+ subject.pretext.should ==
'user_name pushed new branch <url/commits/master|master> to ' <<
'<url|project_name>'
+ subject.attachments.should be_empty
end
end
@@ -49,8 +57,9 @@ describe SlackMessage do
end
it 'returns a message regarding a removed branch' do
- subject.compose.should ==
+ subject.pretext.should ==
'user_name removed branch master from <url|project_name>'
+ subject.attachments.should be_empty
end
end
end