421dbb1746
Updates from MR discussion 1. Added test for ReplyParser 2. Changed param to trim_reply with default set as true Removed keyword param in favor of normal options param updates for MR discussion Resolutions for code review comments more code review fixes
62 lines
1.6 KiB
Ruby
62 lines
1.6 KiB
Ruby
module Gitlab
|
|
module Email
|
|
module Handler
|
|
module ReplyProcessing
|
|
private
|
|
|
|
def author
|
|
raise NotImplementedError
|
|
end
|
|
|
|
def project
|
|
raise NotImplementedError
|
|
end
|
|
|
|
def message
|
|
@message ||= process_message
|
|
end
|
|
|
|
def message_including_reply
|
|
@message_with_reply ||= process_message(trim_reply: false)
|
|
end
|
|
|
|
def process_message(**kwargs)
|
|
message = ReplyParser.new(mail, **kwargs).execute.strip
|
|
add_attachments(message)
|
|
end
|
|
|
|
def add_attachments(reply)
|
|
attachments = Email::AttachmentUploader.new(mail).execute(project)
|
|
|
|
reply + attachments.map do |link|
|
|
"\n\n#{link[:markdown]}"
|
|
end.join
|
|
end
|
|
|
|
def validate_permission!(permission)
|
|
raise UserNotFoundError unless author
|
|
raise UserBlockedError if author.blocked?
|
|
|
|
if project
|
|
raise ProjectNotFound unless author.can?(:read_project, project)
|
|
end
|
|
|
|
raise UserNotAuthorizedError unless author.can?(permission, project || noteable)
|
|
end
|
|
|
|
def verify_record!(record:, invalid_exception:, record_name:)
|
|
return if record.persisted?
|
|
return if record.errors.key?(:commands_only)
|
|
|
|
error_title = "The #{record_name} could not be created for the following reasons:"
|
|
|
|
msg = error_title + record.errors.full_messages.map do |error|
|
|
"\n\n- #{error}"
|
|
end.join
|
|
|
|
raise invalid_exception, msg
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|