summaryrefslogtreecommitdiff
path: root/lib/gitlab/data_builder/note.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/data_builder/note.rb')
-rw-r--r--lib/gitlab/data_builder/note.rb75
1 files changed, 75 insertions, 0 deletions
diff --git a/lib/gitlab/data_builder/note.rb b/lib/gitlab/data_builder/note.rb
new file mode 100644
index 00000000000..50fea1232af
--- /dev/null
+++ b/lib/gitlab/data_builder/note.rb
@@ -0,0 +1,75 @@
+module Gitlab
+ module DataBuilder
+ module Note
+ extend self
+
+ # Produce a hash of post-receive data
+ #
+ # For all notes:
+ #
+ # data = {
+ # object_kind: "note",
+ # user: {
+ # name: String,
+ # username: String,
+ # avatar_url: String
+ # }
+ # project_id: Integer,
+ # repository: {
+ # name: String,
+ # url: String,
+ # description: String,
+ # homepage: String,
+ # }
+ # object_attributes: {
+ # <hook data for note>
+ # }
+ # <note-specific data>: {
+ # }
+ # note-specific data is a hash with one of the following keys and contains
+ # the hook data for that type.
+ # - commit
+ # - issue
+ # - merge_request
+ # - snippet
+ #
+ def build(note, user)
+ project = note.project
+ data = build_base_data(project, user, note)
+
+ if note.for_commit?
+ data[:commit] = build_data_for_commit(project, user, note)
+ elsif note.for_issue?
+ data[:issue] = note.noteable.hook_attrs
+ elsif note.for_merge_request?
+ data[:merge_request] = note.noteable.hook_attrs
+ elsif note.for_snippet?
+ data[:snippet] = note.noteable.hook_attrs
+ end
+
+ data
+ end
+
+ def build_base_data(project, user, note)
+ base_data = {
+ object_kind: "note",
+ user: user.hook_attrs,
+ project_id: project.id,
+ project: project.hook_attrs,
+ object_attributes: note.hook_attrs,
+ # DEPRECATED
+ repository: project.hook_attrs.slice(:name, :url, :description, :homepage)
+ }
+
+ base_data[:object_attributes][:url] = Gitlab::UrlBuilder.build(note)
+ base_data
+ end
+
+ def build_data_for_commit(project, user, note)
+ # commit_id is the SHA hash
+ commit = project.commit(note.commit_id)
+ commit.hook_attrs
+ end
+ end
+ end
+end