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 'lib/gitlab/github_import/representation/note_text.rb')
-rw-r--r--lib/gitlab/github_import/representation/note_text.rb61
1 files changed, 61 insertions, 0 deletions
diff --git a/lib/gitlab/github_import/representation/note_text.rb b/lib/gitlab/github_import/representation/note_text.rb
new file mode 100644
index 00000000000..505d7d805d3
--- /dev/null
+++ b/lib/gitlab/github_import/representation/note_text.rb
@@ -0,0 +1,61 @@
+# frozen_string_literal: true
+
+# This class only partly represents MODELS_ALLOWLIST records from DB and
+# is used to connect ReleasesAttachmentsImporter, NotesAttachmentsImporter etc.
+# with NoteAttachmentsImporter without modifying ObjectImporter a lot.
+# Attachments are inside release's `description`.
+module Gitlab
+ module GithubImport
+ module Representation
+ class NoteText
+ include ToHash
+ include ExposeAttribute
+
+ MODELS_ALLOWLIST = [::Release, ::Note, ::Issue, ::MergeRequest].freeze
+ ModelNotSupported = Class.new(StandardError)
+
+ attr_reader :attributes
+
+ expose_attribute :record_db_id, :record_type, :text
+
+ class << self
+ # Builds a note text representation from DB record of Note or Release.
+ #
+ # record - An instance of `Note`, `Release`, `Issue`, `MergeRequest` model
+ def from_db_record(record)
+ check_record_class!(record)
+
+ record_type = record.class.name
+ # only column for note is different along MODELS_ALLOWLIST
+ text = record.is_a?(::Note) ? record.note : record.description
+ new(
+ record_db_id: record.id,
+ record_type: record_type,
+ text: text
+ )
+ end
+
+ def from_json_hash(raw_hash)
+ new Representation.symbolize_hash(raw_hash)
+ end
+
+ private
+
+ def check_record_class!(record)
+ raise ModelNotSupported, record.class.name if MODELS_ALLOWLIST.exclude?(record.class)
+ end
+ end
+
+ # attributes - A Hash containing the event details. The keys of this
+ # Hash (and any nested hashes) must be symbols.
+ def initialize(attributes)
+ @attributes = attributes
+ end
+
+ def github_identifiers
+ { db_id: record_db_id }
+ end
+ end
+ end
+ end
+end