# frozen_string_literal: true class IncomingEmailDetailsSerializer < ApplicationSerializer attributes :error, :error_description, :rejection_message, :headers, :subject, :body def initialize(incoming_email, opts) super @error_string = incoming_email.error @mail = Mail.new(incoming_email.raw) end EMAIL_RECEIVER_ERROR_PREFIX = "Email::Receiver::" def error @error_string.presence || I18n.t("emails.incoming.unrecognized_error") end def error_description error_name = @error_string.sub(EMAIL_RECEIVER_ERROR_PREFIX, "").underscore I18n.t("emails.incoming.errors.#{error_name}") end def include_error_description? @error_string && @error_string[EMAIL_RECEIVER_ERROR_PREFIX] end def headers @mail.header.to_s end def subject @mail.subject.presence || I18n.t("emails.incoming.no_subject") end def body body = begin @mail.text_part.decoded rescue StandardError nil end body ||= begin @mail.html_part.decoded rescue StandardError nil end body ||= begin @mail.body.decoded rescue StandardError nil end return I18n.t("emails.incoming.no_body") if body.blank? body .encode("utf-8", invalid: :replace, undef: :replace, replace: "") .strip .truncate_words(100, escape: false) end end