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_auto_merge(noteable, project, author, reason) ⇒ Object

Called when ‘auto merge’ is aborted



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

def abort_auto_merge(noteable, project, author, reason)
  ::SystemNotes::MergeRequestsService.new(noteable: noteable, container: project, author: author).abort_auto_merge(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 container - Project or Namespace(Group or ProjectNamespace) 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, container: project, author: author).add_commits(new_commits, existing_commits, oldrev)
end

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



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

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

#add_timeline_event(timeline_event) ⇒ Object



407
408
409
# File 'app/services/system_note_service.rb', line 407

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



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

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

#auto_resolve_prometheus_alert(noteable, project, author) ⇒ Object



321
322
323
# File 'app/services/system_note_service.rb', line 321

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

#cancel_auto_merge(noteable, project, author) ⇒ Object

Called when ‘auto merge’ is canceled



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

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

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



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

def change_alert_status(alert, author, reason = nil)
  ::SystemNotes::AlertManagementService.new(noteable: alert, container: 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, container: 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 container - Project or Namespace(Group or ProjectNamespace) 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



226
227
228
229
# File 'app/services/system_note_service.rb', line 226

def change_branch(noteable, project, author, branch_type, event_type, old_branch, new_branch)
  ::SystemNotes::MergeRequestsService.new(noteable: noteable, container: 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 container - Project or Namespace(Group or ProjectNamespace) 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



245
246
247
# File 'app/services/system_note_service.rb', line 245

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

#change_description(noteable, project, author) ⇒ Object



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

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

#change_incident_severity(incident, author) ⇒ Object



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

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

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



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

def change_incident_status(incident, author, reason = nil)
  ::SystemNotes::IncidentService.new(noteable: incident, container: 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, container: project, author: author).change_issuable_assignees(old_assignees)
end

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



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

def change_issuable_contacts(issuable, project, author, added_count, removed_count)
  ::SystemNotes::IssuablesService.new(noteable: issuable, container: 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, container: project, author: author).change_issuable_reviewers(old_reviewers)
end

#change_issue_confidentiality(issue, project, author) ⇒ Object



206
207
208
# File 'app/services/system_note_service.rb', line 206

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

#change_issue_type(issue, author, previous_type) ⇒ Object



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

def change_issue_type(issue, author, previous_type)
  ::SystemNotes::IssuablesService.new(noteable: issue, container: 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



78
79
80
81
82
83
84
# File 'app/services/system_note_service.rb', line 78

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

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



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

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

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



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

def change_task_status(noteable, project, author, new_task)
  ::SystemNotes::IssuablesService.new(noteable: noteable, container: 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



100
101
102
# File 'app/services/system_note_service.rb', line 100

def change_time_estimate(noteable, project, author)
  ::SystemNotes::TimeTrackingService.new(noteable: noteable, container: 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



118
119
120
# File 'app/services/system_note_service.rb', line 118

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

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



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

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

#close_after_error_tracking_resolve(issue, project, author) ⇒ Object



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

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

#create_new_alert(alert, monitoring_tool) ⇒ Object



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

def create_new_alert(alert, monitoring_tool)
  ::SystemNotes::AlertManagementService.new(noteable: alert, container: 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



136
137
138
# File 'app/services/system_note_service.rb', line 136

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

#cross_reference(mentioned, mentioned_in, author) ⇒ Object



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

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)


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

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)


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

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

#delete_timeline_event(noteable, author) ⇒ Object



415
416
417
# File 'app/services/system_note_service.rb', line 415

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



347
348
349
350
351
# File 'app/services/system_note_service.rb', line 347

def design_discussion_added(discussion_note)
  design = discussion_note.noteable

  ::SystemNotes::DesignManagementService.new(noteable: design.issue, container: 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



334
335
336
# File 'app/services/system_note_service.rb', line 334

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

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



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

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

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



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

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

#discussion_lock(issuable, author) ⇒ Object



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

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

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



411
412
413
# File 'app/services/system_note_service.rb', line 411

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

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



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

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

#handle_merge_request_draft(noteable, project, author) ⇒ Object



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

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

#log_resolving_alert(alert, monitoring_tool) ⇒ Object



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

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

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



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

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

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



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

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

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

Called when ‘merge when checks pass’ is executed



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

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

#new_alert_issue(alert, issue, author) ⇒ Object



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

def new_alert_issue(alert, issue, author)
  ::SystemNotes::AlertManagementService.new(noteable: alert, container: 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`"


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

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

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



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

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

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



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

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

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



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

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

#relate_issuable(noteable, noteable_ref, user) ⇒ Object



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

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

#relate_work_item(noteable, work_item, user) ⇒ Object



301
302
303
304
305
# File 'app/services/system_note_service.rb', line 301

def relate_work_item(noteable, work_item, user)
  ::SystemNotes::IssuablesService
    .new(noteable: noteable, container: 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



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

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

#request_review(issuable, project, author, user, has_unapproved) ⇒ Object



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

def request_review(issuable, project, author, user, has_unapproved)
  ::SystemNotes::IssuablesService.new(noteable: issuable, container: project, author: author).request_review(user, has_unapproved)
end

#requested_changes(noteable, user) ⇒ Object



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

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

#resolve_all_discussions(merge_request, project, author) ⇒ Object



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

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

#reviewed(noteable, user) ⇒ Object



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

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

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

Called when a commit was tagged

noteable - Noteable object container - Project or Namespace(Group or ProjectNamespace) 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, container: project, author: author).tag_commit(tag_name)
end

#unapprove_mr(noteable, user) ⇒ Object



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

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

#unrelate_issuable(noteable, noteable_ref, user) ⇒ Object



60
61
62
# File 'app/services/system_note_service.rb', line 60

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

#unrelate_work_item(noteable, work_item, user) ⇒ Object



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

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


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

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


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

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