Class: Gitlab::HookData::IssueBuilder

Inherits:
BaseBuilder show all
Defined in:
lib/gitlab/hook_data/issue_builder.rb

Overview

Used for legacy issues, Service Desk issues and all work item types See gitlab.com/groups/gitlab-org/-/epics/10150

Constant Summary

Constants inherited from BaseBuilder

BaseBuilder::MARKDOWN_SIMPLE_IMAGE

Instance Attribute Summary

Attributes inherited from BaseBuilder

#object

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from BaseBuilder

#initialize

Constructor Details

This class inherits a constructor from Gitlab::HookData::BaseBuilder

Class Method Details

.safe_hook_attributesObject



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
# File 'lib/gitlab/hook_data/issue_builder.rb', line 20

def self.safe_hook_attributes
  %i[
    assignee_id
    author_id
    closed_at
    confidential
    created_at
    description
    discussion_locked
    due_date
    id
    iid
    last_edited_at
    last_edited_by_id
    milestone_id
    moved_to_id
    duplicated_to_id
    project_id
    relative_position
    state_id
    time_estimate
    title
    updated_at
    updated_by_id
  ].freeze
end

.safe_hook_relationsObject



8
9
10
11
12
13
14
15
16
17
18
# File 'lib/gitlab/hook_data/issue_builder.rb', line 8

def self.safe_hook_relations
  %i[
    assignees
    labels
    total_time_spent
    time_change
    severity
    escalation_status
    customer_relations_contacts
  ].freeze
end

Instance Method Details

#buildObject



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/gitlab/hook_data/issue_builder.rb', line 49

def build
  attrs = {
    type: issue.work_item_type.name,
    description: absolute_image_urls(issue.description),
    url: Gitlab::UrlBuilder.build(issue),
    total_time_spent: issue.total_time_spent,
    time_change: issue.time_change,
    human_total_time_spent: issue.human_total_time_spent,
    human_time_change: issue.human_time_change,
    human_time_estimate: issue.human_time_estimate,
    assignee_ids: issue.assignee_ids,
    assignee_id: issue.assignee_ids.first, # This key is deprecated
    labels: issue.labels_hook_attrs,
    state: issue.state,
    severity: issue.severity,
    customer_relations_contacts: issue.customer_relations_contacts.map(&:hook_attrs)
  }

  if issue.supports_escalation? && issue.escalation_status
    attrs[:escalation_status] = issue.escalation_status.status_name
  end

  issue.attributes.with_indifferent_access.slice(*self.class.safe_hook_attributes)
    .merge!(attrs)
end