Class: SystemNotes::DesignManagementService

Inherits:
BaseService
  • Object
show all
Includes:
ActionView::RecordIdentifier
Defined in:
app/services/system_notes/design_management_service.rb

Instance Attribute Summary

Attributes inherited from BaseService

#author, #noteable, #project

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from BaseService

#initialize

Constructor Details

This class inherits a constructor from SystemNotes::BaseService

Class Method Details

.design_event_note_data(event) ⇒ Object

Take one of the ‘DesignManagement::Action.events` and return:

* an English past-tense verb.
* the name of an icon used in renderin a system note

We do not currently internationalize our system notes, instead we just produce English-language descriptions. See: gitlab.com/gitlab-org/gitlab/issues/30408 See: gitlab.com/gitlab-org/gitlab/issues/14056



64
65
66
67
68
69
70
71
72
73
74
75
# File 'app/services/system_notes/design_management_service.rb', line 64

def self.design_event_note_data(event)
  case event
  when DesignManagement::Action.events[:creation]
    { icon: 'designs_added', past_tense: 'added' }
  when DesignManagement::Action.events[:modification]
    { icon: 'designs_modified', past_tense: 'updated' }
  when DesignManagement::Action.events[:deletion]
    { icon: 'designs_removed', past_tense: 'removed' }
  else
    raise "Unknown event: #{event}"
  end
end

Instance Method Details

#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



40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'app/services/system_notes/design_management_service.rb', line 40

def design_discussion_added(discussion_note)
  design = discussion_note.noteable

  body = _('started a discussion on %{design_link}') % {
    design_link: '[%s](%s)' % [
      design.filename,
      designs_path(vueroute: design.filename, anchor: dom_id(discussion_note))
    ]
  }

  action = :designs_discussion_added

  create_note(NoteSummary.new(noteable, project, author, body, action: action))
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



16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'app/services/system_notes/design_management_service.rb', line 16

def design_version_added(version)
  events = DesignManagement::Action.events
  link_href = designs_path(version: version.id)

  version.designs_by_event.map do |(event_name, designs)|
    note_data = self.class.design_event_note_data(events[event_name])
    icon_name = note_data[:icon]
    n = designs.size

    body = "%s [%d %s](%s)" % [note_data[:past_tense], n, 'design'.pluralize(n), link_href]

    create_note(NoteSummary.new(noteable, project, author, body, action: icon_name))
  end
end