Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/milestone_note.rb')
-rw-r--r--app/models/milestone_note.rb49
1 files changed, 49 insertions, 0 deletions
diff --git a/app/models/milestone_note.rb b/app/models/milestone_note.rb
new file mode 100644
index 00000000000..8ff0503502f
--- /dev/null
+++ b/app/models/milestone_note.rb
@@ -0,0 +1,49 @@
+# frozen_string_literal: true
+
+class MilestoneNote < ::Note
+ attr_accessor :resource_parent, :event, :milestone
+
+ def self.from_event(event, resource: nil, resource_parent: nil)
+ resource ||= event.resource
+
+ attrs = {
+ system: true,
+ author: event.user,
+ created_at: event.created_at,
+ noteable: resource,
+ milestone: event.milestone,
+ event: event,
+ system_note_metadata: ::SystemNoteMetadata.new(action: 'milestone'),
+ resource_parent: resource_parent
+ }
+
+ if resource_parent.is_a?(Project)
+ attrs[:project_id] = resource_parent.id
+ end
+
+ MilestoneNote.new(attrs)
+ end
+
+ def note
+ @note ||= note_text
+ end
+
+ def note_html
+ @note_html ||= Banzai::Renderer.cacheless_render_field(self, :note, { group: group, project: project })
+ end
+
+ def project
+ resource_parent if resource_parent.is_a?(Project)
+ end
+
+ def group
+ resource_parent if resource_parent.is_a?(Group)
+ end
+
+ private
+
+ def note_text(html: false)
+ format = milestone&.group_milestone? ? :name : :iid
+ milestone.nil? ? 'removed milestone' : "changed milestone to #{milestone.to_reference(project, format: format)}"
+ end
+end