summaryrefslogtreecommitdiff
path: root/lib/gitlab/hook_data/issuable_builder.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/hook_data/issuable_builder.rb')
-rw-r--r--lib/gitlab/hook_data/issuable_builder.rb24
1 files changed, 22 insertions, 2 deletions
diff --git a/lib/gitlab/hook_data/issuable_builder.rb b/lib/gitlab/hook_data/issuable_builder.rb
index e817c6af94a..4febb0ab430 100644
--- a/lib/gitlab/hook_data/issuable_builder.rb
+++ b/lib/gitlab/hook_data/issuable_builder.rb
@@ -1,6 +1,8 @@
module Gitlab
module HookData
class IssuableBuilder
+ CHANGES_KEYS = %i[previous current].freeze
+
attr_accessor :issuable
def initialize(issuable)
@@ -14,7 +16,7 @@ module Gitlab
project: issuable.project.hook_attrs,
object_attributes: issuable.hook_attrs,
labels: issuable.labels.map(&:hook_attrs),
- changes: changes.slice(*safe_keys),
+ changes: final_changes(changes.slice(*safe_keys)),
# DEPRECATED
repository: issuable.project.hook_attrs.slice(:name, :url, :description, :homepage)
}
@@ -29,7 +31,25 @@ module Gitlab
end
def safe_keys
- issuable.class.safe_hook_attributes + issuable.class.safe_hook_relations
+ issuable_builder::SAFE_HOOK_ATTRIBUTES + issuable_builder::SAFE_HOOK_RELATIONS
+ end
+
+ private
+
+ def issuable_builder
+ case issuable
+ when Issue
+ Gitlab::HookData::IssueBuilder
+ when MergeRequest
+ Gitlab::HookData::MergeRequestBuilder
+ end
+ end
+
+ def final_changes(changes_hash)
+ changes_hash.reduce({}) do |hash, (key, changes_array)|
+ hash[key] = Hash[CHANGES_KEYS.zip(changes_array)]
+ hash
+ end
end
end
end