Module: Gitlab::DataBuilder::Note

Extended by:
Note
Included in:
Note
Defined in:
lib/gitlab/data_builder/note.rb

Constant Summary collapse

VALID_ACTIONS =
%i[create update].freeze

Instance Method Summary collapse

Instance Method Details

#build(note, user, action) ⇒ Object

Produce a hash of post-receive data

For all notes:

data = { object_kind: "note", event_type: "confidential_note", user: { name: String, username: String, avatar_url: String } project_id: Integer, repository: { name: String, url: String, description: String, homepage: String, } object_attributes: { } : { } note-specific data is a hash with one of the following keys and contains the hook data for that type.

  • commit
  • issue
  • merge_request
  • snippet

Raises:

  • (ArgumentError)


41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/gitlab/data_builder/note.rb', line 41

def build(note, user, action)
  raise ArgumentError, 'invalid action' unless action.in?(VALID_ACTIONS)

  project = note.project
  data = build_base_data(project, user, note, action)

  if note.for_commit?
    data[:commit] = build_data_for_commit(project, user, note)
  elsif note.for_issue?
    data[:issue] = Gitlab::HookData::IssueBuilder.new(note.noteable).build
  elsif note.for_merge_request?
    data[:merge_request] = Gitlab::HookData::MergeRequestBuilder.new(note.noteable).build
  elsif note.for_snippet?
    data[:snippet] = note.noteable.hook_attrs
  end

  data
end

#build_base_data(project, user, note, action) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/gitlab/data_builder/note.rb', line 60

def build_base_data(project, user, note, action)
  event_type = note.confidential?(include_noteable: true) ? 'confidential_note' : 'note'

  {
    object_kind: "note",
    event_type: event_type,
    user: user.hook_attrs,
    project_id: project.id,
    project: project.hook_attrs,
    object_attributes: note.hook_attrs.merge(
      action: action.to_s,
      url: Gitlab::UrlBuilder.build(note)
    ),
    # DEPRECATED
    repository: project.hook_attrs.slice(:name, :url, :description, :homepage)
  }
end

#build_data_for_commit(project, user, note) ⇒ Object



78
79
80
81
82
# File 'lib/gitlab/data_builder/note.rb', line 78

def build_data_for_commit(project, user, note)
  # commit_id is the SHA hash
  commit = project.commit(note.commit_id)
  commit.hook_attrs
end