summaryrefslogtreecommitdiff
path: root/app/models/project_services/chat_message/note_message.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/project_services/chat_message/note_message.rb')
-rw-r--r--app/models/project_services/chat_message/note_message.rb83
1 files changed, 83 insertions, 0 deletions
diff --git a/app/models/project_services/chat_message/note_message.rb b/app/models/project_services/chat_message/note_message.rb
new file mode 100644
index 00000000000..ca1d7207034
--- /dev/null
+++ b/app/models/project_services/chat_message/note_message.rb
@@ -0,0 +1,83 @@
+module ChatMessage
+ class NoteMessage < BaseMessage
+ attr_reader :message
+ attr_reader :user_name
+ attr_reader :project_name
+ attr_reader :project_link
+ attr_reader :note
+ attr_reader :note_url
+ attr_reader :title
+
+ def initialize(params)
+ params = HashWithIndifferentAccess.new(params)
+ @user_name = params[:user][:username]
+ @project_name = params[:project_name]
+ @project_url = params[:project_url]
+
+ obj_attr = params[:object_attributes]
+ obj_attr = HashWithIndifferentAccess.new(obj_attr)
+ @note = obj_attr[:note]
+ @note_url = obj_attr[:url]
+ noteable_type = obj_attr[:noteable_type]
+
+ case noteable_type
+ when "Commit"
+ create_commit_note(HashWithIndifferentAccess.new(params[:commit]))
+ when "Issue"
+ create_issue_note(HashWithIndifferentAccess.new(params[:issue]))
+ when "MergeRequest"
+ create_merge_note(HashWithIndifferentAccess.new(params[:merge_request]))
+ when "Snippet"
+ create_snippet_note(HashWithIndifferentAccess.new(params[:snippet]))
+ end
+ end
+
+ def attachments
+ description_message
+ end
+
+ private
+
+ def format_title(title)
+ title.lines.first.chomp
+ end
+
+ def create_commit_note(commit)
+ commit_sha = commit[:id]
+ commit_sha = Commit.truncate_sha(commit_sha)
+ commented_on_message(
+ "commit #{commit_sha}",
+ format_title(commit[:message]))
+ end
+
+ def create_issue_note(issue)
+ commented_on_message(
+ "issue ##{issue[:iid]}",
+ format_title(issue[:title]))
+ end
+
+ def create_merge_note(merge_request)
+ commented_on_message(
+ "merge request !#{merge_request[:iid]}",
+ format_title(merge_request[:title]))
+ end
+
+ def create_snippet_note(snippet)
+ commented_on_message(
+ "snippet ##{snippet[:id]}",
+ format_title(snippet[:title]))
+ end
+
+ def description_message
+ [{ text: format(@note), color: attachment_color }]
+ end
+
+ def project_link
+ "[#{@project_name}](#{@project_url})"
+ end
+
+ def commented_on_message(target, title)
+ @message = "#{@user_name} [commented on #{target}](#{@note_url}) in #{project_link}: *#{title}*"
+ end
+ end
+end