diff options
Diffstat (limited to 'lib/gitlab/hook_data/issuable_builder.rb')
-rw-r--r-- | lib/gitlab/hook_data/issuable_builder.rb | 24 |
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 |