Module: SystemNoteService

Extended by:
SystemNoteService
Included in:
SystemNoteService
Defined in:
app/services/system_note_service.rb

Overview

SystemNoteService

Used for creating system notes (e.g., when a user references a merge request from an issue, an issue’s assignee changes, an issue is closed, etc.)

Instance Method Summary collapse

Instance Method Details

#abort_merge_when_pipeline_succeeds(noteable, project, author, reason) ⇒ Object

Called when ‘merge when pipeline succeeds’ is aborted



170
171
172
# File 'app/services/system_note_service.rb', line 170

def abort_merge_when_pipeline_succeeds(noteable, project, author, reason)
  ::SystemNotes::MergeRequestsService.new(noteable: noteable, project: project, author: author).abort_merge_when_pipeline_succeeds(reason)
end

#add_commits(noteable, project, author, new_commits, existing_commits = [], oldrev = nil) ⇒ Object

Called when commits are added to a merge request

noteable - Noteable object project - Project owning noteable author - User performing the change new_commits - Array of Commits added since last push existing_commits - Array of Commits added in a previous push oldrev - Optional String SHA of a previous Commit

Returns the created Note object



20
21
22
# File 'app/services/system_note_service.rb', line 20

def add_commits(noteable, project, author, new_commits, existing_commits = [], oldrev = nil)
  ::SystemNotes::CommitService.new(noteable: noteable, project: project, author: author).add_commits(new_commits, existing_commits, oldrev)
end

#add_email_participants(noteable, project, author, body) ⇒ Object



285
286
287
# File 'app/services/system_note_service.rb', line 285

def add_email_participants(noteable, project, author, body)
  ::SystemNotes::IssuablesService.new(noteable: noteable, project: project, author: author).add_email_participants(body)
end

#add_merge_request_draft_from_commit(noteable, project, author, commit) ⇒ Object



178
179
180
# File 'app/services/system_note_service.rb', line 178

def add_merge_request_draft_from_commit(noteable, project, author, commit)
  ::SystemNotes::MergeRequestsService.new(noteable: noteable, project: project, author: author).add_merge_request_draft_from_commit(commit)
end

#add_timeline_event(timeline_event) ⇒ Object



395
396
397
# File 'app/services/system_note_service.rb', line 395

def add_timeline_event(timeline_event)
  incidents_service(timeline_event.incident).add_timeline_event(timeline_event)
end

#approve_mr(noteable, user) ⇒ Object

Called when the merge request is approved by user

noteable - Noteable object user - User performing approve

Example Note text:

"approved this merge request"

Returns the created Note object



359
360
361
# File 'app/services/system_note_service.rb', line 359

def approve_mr(noteable, user)
  merge_requests_service(noteable, noteable.project, user).approve_mr
end

#auto_resolve_prometheus_alert(noteable, project, author) ⇒ Object



317
318
319
# File 'app/services/system_note_service.rb', line 317

def auto_resolve_prometheus_alert(noteable, project, author)
  ::SystemNotes::IssuablesService.new(noteable: noteable, project: project, author: author).auto_resolve_prometheus_alert
end

#cancel_merge_when_pipeline_succeeds(noteable, project, author) ⇒ Object

Called when ‘merge when pipeline succeeds’ is canceled



165
166
167
# File 'app/services/system_note_service.rb', line 165

def cancel_merge_when_pipeline_succeeds(noteable, project, author)
  ::SystemNotes::MergeRequestsService.new(noteable: noteable, project: project, author: author).cancel_merge_when_pipeline_succeeds
end

#change_alert_status(alert, author, reason = nil) ⇒ Object



367
368
369
# File 'app/services/system_note_service.rb', line 367

def change_alert_status(alert, author, reason = nil)
  ::SystemNotes::AlertManagementService.new(noteable: alert, project: alert.project, author: author).change_alert_status(reason)
end

#change_assignee(noteable, project, author, assignee) ⇒ Object



36
37
38
# File 'app/services/system_note_service.rb', line 36

def change_assignee(noteable, project, author, assignee)
  ::SystemNotes::IssuablesService.new(noteable: noteable, project: project, author: author).change_assignee(assignee)
end

#change_branch(noteable, project, author, branch_type, event_type, old_branch, new_branch) ⇒ Object

Called when a branch in Noteable is changed

noteable - Noteable object project - Project owning noteable author - User performing the change branch_type - ‘source’ or ‘target’ event_type - the source of event: ‘update’ or ‘delete’ old_branch - old branch name new_branch - new branch name

Example Note text is based on event_type:

update: "changed target branch from `Old` to `New`"
delete: "deleted the `Old` branch. This merge request now targets the `New` branch"

Returns the created Note object



222
223
224
225
# File 'app/services/system_note_service.rb', line 222

def change_branch(noteable, project, author, branch_type, event_type, old_branch, new_branch)
  ::SystemNotes::MergeRequestsService.new(noteable: noteable, project: project, author: author)
    .change_branch(branch_type, event_type, old_branch, new_branch)
end

#change_branch_presence(noteable, project, author, branch_type, branch, presence) ⇒ Object

Called when a branch in Noteable is added or deleted

noteable - Noteable object project - Project owning noteable author - User performing the change branch_type - :source or :target branch - branch name presence - :add or :delete

Example Note text:

"restored target branch `feature`"

Returns the created Note object



241
242
243
# File 'app/services/system_note_service.rb', line 241

def change_branch_presence(noteable, project, author, branch_type, branch, presence)
  ::SystemNotes::MergeRequestsService.new(noteable: noteable, project: project, author: author).change_branch_presence(branch_type, branch, presence)
end

#change_description(noteable, project, author) ⇒ Object



198
199
200
# File 'app/services/system_note_service.rb', line 198

def change_description(noteable, project, author)
  ::SystemNotes::IssuablesService.new(noteable: noteable, project: project, author: author).change_description
end

#change_incident_severity(incident, author) ⇒ Object



379
380
381
# File 'app/services/system_note_service.rb', line 379

def change_incident_severity(incident, author)
  ::SystemNotes::IncidentService.new(noteable: incident, project: incident.project, author: author).change_incident_severity
end

#change_incident_status(incident, author, reason = nil) ⇒ Object



383
384
385
# File 'app/services/system_note_service.rb', line 383

def change_incident_status(incident, author, reason = nil)
  ::SystemNotes::IncidentService.new(noteable: incident, project: incident.project, author: author).change_incident_status(reason)
end

#change_issuable_assignees(issuable, project, author, old_assignees) ⇒ Object



40
41
42
# File 'app/services/system_note_service.rb', line 40

def change_issuable_assignees(issuable, project, author, old_assignees)
  ::SystemNotes::IssuablesService.new(noteable: issuable, project: project, author: author).change_issuable_assignees(old_assignees)
end

#change_issuable_contacts(issuable, project, author, added_count, removed_count) ⇒ Object



48
49
50
# File 'app/services/system_note_service.rb', line 48

def change_issuable_contacts(issuable, project, author, added_count, removed_count)
  ::SystemNotes::IssuablesService.new(noteable: issuable, project: project, author: author).change_issuable_contacts(added_count, removed_count)
end

#change_issuable_reviewers(issuable, project, author, old_reviewers) ⇒ Object



44
45
46
# File 'app/services/system_note_service.rb', line 44

def change_issuable_reviewers(issuable, project, author, old_reviewers)
  ::SystemNotes::IssuablesService.new(noteable: issuable, project: project, author: author).change_issuable_reviewers(old_reviewers)
end

#change_issue_confidentiality(issue, project, author) ⇒ Object



202
203
204
# File 'app/services/system_note_service.rb', line 202

def change_issue_confidentiality(issue, project, author)
  ::SystemNotes::IssuablesService.new(noteable: issue, project: project, author: author).change_issue_confidentiality
end

#change_issue_type(issue, author, previous_type) ⇒ Object



391
392
393
# File 'app/services/system_note_service.rb', line 391

def change_issue_type(issue, author, previous_type)
  ::SystemNotes::IssuablesService.new(noteable: issue, project: issue.project, author: author).change_issue_type(previous_type)
end

#change_start_date_or_due_date(noteable, project, author, changed_dates) ⇒ Object

Called when the due_date or start_date of a Noteable is changed

noteable - Noteable object project - Project owning noteable author - User performing the change due_date - Due date being assigned, or nil

Example Note text:

"removed due date"

"changed due date to September 20, 2018 and changed start date to September 25, 2018"

Returns the created Note object



74
75
76
77
78
79
80
# File 'app/services/system_note_service.rb', line 74

def change_start_date_or_due_date(noteable, project, author, changed_dates)
  ::SystemNotes::TimeTrackingService.new(
    noteable: noteable,
    project: project,
    author: author
  ).change_start_date_or_due_date(changed_dates)
end

#change_status(noteable, project, author, status, source = nil) ⇒ Object



155
156
157
# File 'app/services/system_note_service.rb', line 155

def change_status(noteable, project, author, status, source = nil)
  ::SystemNotes::IssuablesService.new(noteable: noteable, project: project, author: author).change_status(status, source)
end

#change_task_status(noteable, project, author, new_task) ⇒ Object



265
266
267
# File 'app/services/system_note_service.rb', line 265

def change_task_status(noteable, project, author, new_task)
  ::SystemNotes::IssuablesService.new(noteable: noteable, project: project, author: author).change_task_status(new_task)
end

#change_time_estimate(noteable, project, author) ⇒ Object

Called when the estimated time of a Noteable is changed

noteable - Noteable object project - Project owning noteable author - User performing the change time_estimate - Estimated time

Example Note text:

"removed time estimate"

"changed time estimate to 3d 5h"

Returns the created Note object



96
97
98
# File 'app/services/system_note_service.rb', line 96

def change_time_estimate(noteable, project, author)
  ::SystemNotes::TimeTrackingService.new(noteable: noteable, project: project, author: author).change_time_estimate
end

#change_time_spent(noteable, project, author) ⇒ Object

Called when the spent time of a Noteable is changed

noteable - Noteable object project - Project owning noteable author - User performing the change time_spent - Spent time

Example Note text:

"removed time spent"

"added 2h 30m of time spent"

Returns the created Note object



114
115
116
# File 'app/services/system_note_service.rb', line 114

def change_time_spent(noteable, project, author)
  ::SystemNotes::TimeTrackingService.new(noteable: noteable, project: project, author: author).change_time_spent
end

#change_title(noteable, project, author, old_title) ⇒ Object



194
195
196
# File 'app/services/system_note_service.rb', line 194

def change_title(noteable, project, author, old_title)
  ::SystemNotes::IssuablesService.new(noteable: noteable, project: project, author: author).change_title(old_title)
end

#close_after_error_tracking_resolve(issue, project, author) ⇒ Object



151
152
153
# File 'app/services/system_note_service.rb', line 151

def close_after_error_tracking_resolve(issue, project, author)
  ::SystemNotes::IssuablesService.new(noteable: issue, project: project, author: author).close_after_error_tracking_resolve
end

#create_new_alert(alert, monitoring_tool) ⇒ Object



375
376
377
# File 'app/services/system_note_service.rb', line 375

def create_new_alert(alert, monitoring_tool)
  ::SystemNotes::AlertManagementService.new(noteable: alert, project: alert.project).create_new_alert(monitoring_tool)
end

#created_timelog(issuable, project, author, timelog) ⇒ Object

Called when a timelog is added to an issuable

issuable - Issuable object (Issue, WorkItem or MergeRequest) project - Project owning the issuable author - User performing the change timelog - Created timelog

Example Note text:

"subtracted 1h 15m of time spent"

"added 2h 30m of time spent"

Returns the created Note object



132
133
134
# File 'app/services/system_note_service.rb', line 132

def created_timelog(issuable, project, author, timelog)
  ::SystemNotes::TimeTrackingService.new(noteable: issuable, project: project, author: author).created_timelog(timelog)
end

#cross_reference(mentioned, mentioned_in, author) ⇒ Object



257
258
259
# File 'app/services/system_note_service.rb', line 257

def cross_reference(mentioned, mentioned_in, author)
  ::SystemNotes::IssuablesService.new(noteable: mentioned, author: author).cross_reference(mentioned_in)
end

#cross_reference_disallowed?(mentioned, mentioned_in) ⇒ Boolean

Returns:

  • (Boolean)


293
294
295
# File 'app/services/system_note_service.rb', line 293

def cross_reference_disallowed?(mentioned, mentioned_in)
  ::SystemNotes::IssuablesService.new(noteable: mentioned).cross_reference_disallowed?(mentioned_in)
end

#cross_reference_exists?(mentioned, mentioned_in) ⇒ Boolean

Returns:

  • (Boolean)


261
262
263
# File 'app/services/system_note_service.rb', line 261

def cross_reference_exists?(mentioned, mentioned_in)
  ::SystemNotes::IssuablesService.new(noteable: mentioned).cross_reference_exists?(mentioned_in)
end

#delete_timeline_event(noteable, author) ⇒ Object



403
404
405
# File 'app/services/system_note_service.rb', line 403

def delete_timeline_event(noteable, author)
  incidents_service(noteable).delete_timeline_event(author)
end

#design_discussion_added(discussion_note) ⇒ Object

Called when a new discussion is created on a design

discussion_note - DiscussionNote

Example Note text:

"started a discussion on screen.png"

Returns the created Note object



343
344
345
346
347
# File 'app/services/system_note_service.rb', line 343

def design_discussion_added(discussion_note)
  design = discussion_note.noteable

  ::SystemNotes::DesignManagementService.new(noteable: design.issue, project: design.project, author: discussion_note.author).design_discussion_added(discussion_note)
end

#design_version_added(version) ⇒ Object

Parameters:

- version [DesignManagement::Version]

Example Note text:

"added [1 designs](link-to-version)"
"changed [2 designs](link-to-version)"

Returns [Array<Note>]: the created Note objects



330
331
332
# File 'app/services/system_note_service.rb', line 330

def design_version_added(version)
  ::SystemNotes::DesignManagementService.new(noteable: version.issue, project: version.issue.project, author: version.author).design_version_added(version)
end

#diff_discussion_outdated(discussion, project, author, change_position) ⇒ Object



190
191
192
# File 'app/services/system_note_service.rb', line 190

def diff_discussion_outdated(discussion, project, author, change_position)
  ::SystemNotes::MergeRequestsService.new(project: project, author: author).diff_discussion_outdated(discussion, change_position)
end

#discussion_continued_in_issue(discussion, project, author, issue) ⇒ Object



186
187
188
# File 'app/services/system_note_service.rb', line 186

def discussion_continued_in_issue(discussion, project, author, issue)
  ::SystemNotes::MergeRequestsService.new(project: project, author: author).discussion_continued_in_issue(discussion, issue)
end

#discussion_lock(issuable, author) ⇒ Object



289
290
291
# File 'app/services/system_note_service.rb', line 289

def discussion_lock(issuable, author)
  ::SystemNotes::IssuablesService.new(noteable: issuable, project: issuable.project, author: author).discussion_lock
end

#edit_timeline_event(timeline_event, author, was_changed:) ⇒ Object



399
400
401
# File 'app/services/system_note_service.rb', line 399

def edit_timeline_event(timeline_event, author, was_changed:)
  incidents_service(timeline_event.incident).edit_timeline_event(timeline_event, author, was_changed: was_changed)
end

#handle_merge_request_draft(noteable, project, author) ⇒ Object



174
175
176
# File 'app/services/system_note_service.rb', line 174

def handle_merge_request_draft(noteable, project, author)
  ::SystemNotes::MergeRequestsService.new(noteable: noteable, project: project, author: author).handle_merge_request_draft
end

#log_resolving_alert(alert, monitoring_tool) ⇒ Object



387
388
389
# File 'app/services/system_note_service.rb', line 387

def log_resolving_alert(alert, monitoring_tool)
  ::SystemNotes::AlertManagementService.new(noteable: alert, project: alert.project).log_resolving_alert(monitoring_tool)
end

#mark_canonical_issue_of_duplicate(noteable, project, author, duplicate_issue) ⇒ Object



281
282
283
# File 'app/services/system_note_service.rb', line 281

def mark_canonical_issue_of_duplicate(noteable, project, author, duplicate_issue)
  ::SystemNotes::IssuablesService.new(noteable: noteable, project: project, author: author).mark_canonical_issue_of_duplicate(duplicate_issue)
end

#mark_duplicate_issue(noteable, project, author, canonical_issue) ⇒ Object



277
278
279
# File 'app/services/system_note_service.rb', line 277

def mark_duplicate_issue(noteable, project, author, canonical_issue)
  ::SystemNotes::IssuablesService.new(noteable: noteable, project: project, author: author).mark_duplicate_issue(canonical_issue)
end

#merge_when_pipeline_succeeds(noteable, project, author, sha) ⇒ Object

Called when ‘merge when pipeline succeeds’ is executed



160
161
162
# File 'app/services/system_note_service.rb', line 160

def merge_when_pipeline_succeeds(noteable, project, author, sha)
  ::SystemNotes::MergeRequestsService.new(noteable: noteable, project: project, author: author).merge_when_pipeline_succeeds(sha)
end

#new_alert_issue(alert, issue, author) ⇒ Object



371
372
373
# File 'app/services/system_note_service.rb', line 371

def new_alert_issue(alert, issue, author)
  ::SystemNotes::AlertManagementService.new(noteable: alert, project: alert.project, author: author).new_alert_issue(issue)
end

#new_issue_branch(issue, project, author, branch, branch_project: nil) ⇒ Object

Called when a branch is created from the ‘new branch’ button on a issue Example note text:

"created branch `201-issue-branch-button`"


249
250
251
# File 'app/services/system_note_service.rb', line 249

def new_issue_branch(issue, project, author, branch, branch_project: nil)
  ::SystemNotes::MergeRequestsService.new(noteable: issue, project: project, author: author).new_issue_branch(branch, branch_project: branch_project)
end

#new_merge_request(issue, project, author, merge_request) ⇒ Object



253
254
255
# File 'app/services/system_note_service.rb', line 253

def new_merge_request(issue, project, author, merge_request)
  ::SystemNotes::MergeRequestsService.new(noteable: issue, project: project, author: author).new_merge_request(merge_request)
end

#noteable_cloned(noteable, project, noteable_ref, author, direction:, created_at: nil) ⇒ Object



273
274
275
# File 'app/services/system_note_service.rb', line 273

def noteable_cloned(noteable, project, noteable_ref, author, direction:, created_at: nil)
  ::SystemNotes::IssuablesService.new(noteable: noteable, project: project, author: author).noteable_cloned(noteable_ref, direction, created_at: created_at)
end

#noteable_moved(noteable, project, noteable_ref, author, direction:) ⇒ Object



269
270
271
# File 'app/services/system_note_service.rb', line 269

def noteable_moved(noteable, project, noteable_ref, author, direction:)
  ::SystemNotes::IssuablesService.new(noteable: noteable, project: project, author: author).noteable_moved(noteable_ref, direction)
end

#relate_issuable(noteable, noteable_ref, user) ⇒ Object



52
53
54
# File 'app/services/system_note_service.rb', line 52

def relate_issuable(noteable, noteable_ref, user)
  ::SystemNotes::IssuablesService.new(noteable: noteable, project: noteable.project, author: user).relate_issuable(noteable_ref)
end

#relate_work_item(noteable, work_item, user) ⇒ Object



297
298
299
300
301
# File 'app/services/system_note_service.rb', line 297

def relate_work_item(noteable, work_item, user)
  ::SystemNotes::IssuablesService
    .new(noteable: noteable, project: noteable.project, author: user)
    .hierarchy_changed(work_item, 'relate')
end

#remove_timelog(noteable, project, author, timelog) ⇒ Object

Called when a timelog is removed from a Noteable

noteable - Noteable object project - Project owning the noteable author - User performing the change timelog - The removed timelog

Example Note text:

"deleted 2h 30m of time spent from 22-03-2022"

Returns the created Note object



147
148
149
# File 'app/services/system_note_service.rb', line 147

def remove_timelog(noteable, project, author, timelog)
  ::SystemNotes::TimeTrackingService.new(noteable: noteable, project: project, author: author).remove_timelog(timelog)
end

#resolve_all_discussions(merge_request, project, author) ⇒ Object



182
183
184
# File 'app/services/system_note_service.rb', line 182

def resolve_all_discussions(merge_request, project, author)
  ::SystemNotes::MergeRequestsService.new(noteable: merge_request, project: project, author: author).resolve_all_discussions
end

#tag_commit(noteable, project, author, tag_name) ⇒ Object

Called when a commit was tagged

noteable - Noteable object project - Project owning noteable author - User performing the tag tag_name - The created tag name

Returns the created Note object



32
33
34
# File 'app/services/system_note_service.rb', line 32

def tag_commit(noteable, project, author, tag_name)
  ::SystemNotes::CommitService.new(noteable: noteable, project: project, author: author).tag_commit(tag_name)
end

#unapprove_mr(noteable, user) ⇒ Object



363
364
365
# File 'app/services/system_note_service.rb', line 363

def unapprove_mr(noteable, user)
  merge_requests_service(noteable, noteable.project, user).unapprove_mr
end

#unrelate_issuable(noteable, noteable_ref, user) ⇒ Object



56
57
58
# File 'app/services/system_note_service.rb', line 56

def unrelate_issuable(noteable, noteable_ref, user)
  ::SystemNotes::IssuablesService.new(noteable: noteable, project: noteable.project, author: user).unrelate_issuable(noteable_ref)
end

#unrelate_work_item(noteable, work_item, user) ⇒ Object



303
304
305
306
307
# File 'app/services/system_note_service.rb', line 303

def unrelate_work_item(noteable, work_item, user)
  ::SystemNotes::IssuablesService
    .new(noteable: noteable, project: noteable.project, author: user)
    .hierarchy_changed(work_item, 'unrelate')
end


309
310
311
# File 'app/services/system_note_service.rb', line 309

def zoom_link_added(issue, project, author)
  ::SystemNotes::ZoomService.new(noteable: issue, project: project, author: author).zoom_link_added
end


313
314
315
# File 'app/services/system_note_service.rb', line 313

def zoom_link_removed(issue, project, author)
  ::SystemNotes::ZoomService.new(noteable: issue, project: project, author: author).zoom_link_removed
end