Class: Gitlab::HookData::IssueBuilder

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

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



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

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



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

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



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

def build
  attrs = {
      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