Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-05-02 18:10:10 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2022-05-02 18:10:10 +0300
commitf62efc386492a3e7ee2243202389d29ab62b5978 (patch)
treedad7ba9a804344ed166b20cc3613de97962eea55 /lib/gitlab/data_builder
parent610d783b61f3c3c7d19e6167df26368a7e8a0075 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/gitlab/data_builder')
-rw-r--r--lib/gitlab/data_builder/issuable.rb64
1 files changed, 64 insertions, 0 deletions
diff --git a/lib/gitlab/data_builder/issuable.rb b/lib/gitlab/data_builder/issuable.rb
new file mode 100644
index 00000000000..9a0b964915c
--- /dev/null
+++ b/lib/gitlab/data_builder/issuable.rb
@@ -0,0 +1,64 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module DataBuilder
+ class Issuable
+ CHANGES_KEYS = %i[previous current].freeze
+
+ attr_reader :issuable
+
+ def initialize(issuable)
+ @issuable = issuable
+ end
+
+ def build(user: nil, changes: {})
+ hook_data = {
+ object_kind: object_kind,
+ event_type: event_type,
+ user: user.hook_attrs,
+ project: issuable.project.hook_attrs,
+ object_attributes: issuable_builder.new(issuable).build,
+ labels: issuable.labels.map(&:hook_attrs),
+ changes: final_changes(changes.slice(*safe_keys)),
+ # DEPRECATED
+ repository: issuable.project.hook_attrs.slice(:name, :url, :description, :homepage)
+ }
+
+ hook_data[:assignees] = issuable.assignees.map(&:hook_attrs) if issuable.assignees.any?
+
+ hook_data
+ end
+
+ def safe_keys
+ issuable_builder.safe_hook_attributes + issuable_builder.safe_hook_relations
+ end
+
+ private
+
+ def object_kind
+ issuable.class.name.underscore
+ end
+
+ def event_type
+ if issuable.try(:confidential?)
+ "confidential_#{object_kind}"
+ else
+ object_kind
+ end
+ end
+
+ def issuable_builder
+ case issuable
+ when Issue
+ Gitlab::HookData::IssueBuilder
+ when MergeRequest
+ Gitlab::HookData::MergeRequestBuilder
+ end
+ end
+
+ def final_changes(changes_hash)
+ changes_hash.transform_values { |changes_array| Hash[CHANGES_KEYS.zip(changes_array)] }
+ end
+ end
+ end
+end