2022-11-25 23:54:43 +05:30
|
|
|
# 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
|
|
|
|
|
2023-06-20 00:43:36 +05:30
|
|
|
expose_attribute :record_db_id, :record_type, :text, :iid, :tag, :noteable_type
|
2022-11-25 23:54:43 +05:30
|
|
|
|
2023-06-20 00:43:36 +05:30
|
|
|
# Builds a note text representation from DB record of Note or Release.
|
|
|
|
#
|
|
|
|
# record - An instance of `Note`, `Release`, `Issue`, `MergeRequest` model
|
|
|
|
def self.from_db_record(record)
|
|
|
|
check_record_class!(record)
|
2022-11-25 23:54:43 +05:30
|
|
|
|
2023-06-20 00:43:36 +05:30
|
|
|
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,
|
|
|
|
iid: record.try(:iid),
|
|
|
|
tag: record.try(:tag),
|
|
|
|
noteable_type: record.try(:noteable_type)
|
|
|
|
)
|
|
|
|
end
|
2022-11-25 23:54:43 +05:30
|
|
|
|
2023-06-20 00:43:36 +05:30
|
|
|
def self.from_json_hash(raw_hash)
|
|
|
|
new Representation.symbolize_hash(raw_hash)
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.check_record_class!(record)
|
|
|
|
raise ModelNotSupported, record.class.name if MODELS_ALLOWLIST.exclude?(record.class)
|
2022-11-25 23:54:43 +05:30
|
|
|
end
|
2023-06-20 00:43:36 +05:30
|
|
|
private_class_method :check_record_class!
|
2022-11-25 23:54:43 +05:30
|
|
|
|
|
|
|
# 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
|
2023-06-20 00:43:36 +05:30
|
|
|
{
|
|
|
|
db_id: record_db_id
|
|
|
|
}.merge(record_type_specific_attribute)
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def record_type_specific_attribute
|
|
|
|
case record_type
|
|
|
|
when ::Release.name
|
|
|
|
{ tag: tag }
|
|
|
|
when ::Issue.name, ::MergeRequest.name
|
|
|
|
{ noteable_iid: iid }
|
|
|
|
when ::Note.name
|
|
|
|
{ noteable_type: noteable_type }
|
|
|
|
end
|
2022-11-25 23:54:43 +05:30
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|