module Gitlab module HookData class MergeRequestBuilder SAFE_HOOK_ATTRIBUTES = %i[ assignee_id author_id created_at description head_pipeline_id id iid last_edited_at last_edited_by_id merge_commit_sha merge_error merge_params merge_status merge_user_id merge_when_pipeline_succeeds milestone_id source_branch source_project_id state target_branch target_project_id time_estimate title updated_at updated_by_id ].freeze SAFE_HOOK_RELATIONS = %i[ assignee labels total_time_spent ].freeze attr_accessor :merge_request def initialize(merge_request) @merge_request = merge_request end def build attrs = { url: Gitlab::UrlBuilder.build(merge_request), source: merge_request.source_project.try(:hook_attrs), target: merge_request.target_project.hook_attrs, last_commit: merge_request.diff_head_commit&.hook_attrs, work_in_progress: merge_request.work_in_progress?, total_time_spent: merge_request.total_time_spent, human_total_time_spent: merge_request.human_total_time_spent, human_time_estimate: merge_request.human_time_estimate } merge_request.attributes.with_indifferent_access.slice(*SAFE_HOOK_ATTRIBUTES) .merge!(attrs) end end end end