summaryrefslogtreecommitdiff
path: root/lib/gitlab/hook_data/issue_builder.rb
blob: e29dd0d5b0e39aecc4ee8040b6f3a1035ea1f218 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
module Gitlab
  module HookData
    class IssueBuilder
      SAFE_HOOK_ATTRIBUTES = %i[
        assignee_id
        author_id
        closed_at
        confidential
        created_at
        deleted_at
        description
        due_date
        id
        iid
        last_edited_at
        last_edited_by_id
        milestone_id
        moved_to_id
        project_id
        relative_position
        state
        time_estimate
        title
        updated_at
        updated_by_id
      ].freeze

      SAFE_HOOK_RELATIONS = %i[
        assignees
        labels
        total_time_spent
      ].freeze

      attr_accessor :issue

      def initialize(issue)
        @issue = issue
      end

      def build
        attrs = {
          url: Gitlab::UrlBuilder.build(issue),
          total_time_spent: issue.total_time_spent,
          human_total_time_spent: issue.human_total_time_spent,
          human_time_estimate: issue.human_time_estimate,
          assignee_ids: issue.assignee_ids,
          assignee_id: issue.assignee_ids.first # This key is deprecated
        }

        issue.attributes.with_indifferent_access.slice(*SAFE_HOOK_ATTRIBUTES)
          .merge!(attrs)
      end
    end
  end
end