mirror of
https://github.com/discourse/discourse.git
synced 2024-11-24 21:35:48 +08:00
d0d5a138c3
We have the `# frozen_string_literal: true` comment on all our files. This means all string literals are frozen. There is no need to call #freeze on any literals. For files with `# frozen_string_literal: true` ``` puts %w{a b}[0].frozen? => true puts "hi".frozen? => true puts "a #{1} b".frozen? => true puts ("a " + "b").frozen? => false puts (-("a " + "b")).frozen? => true ``` For more details see: https://samsaffron.com/archive/2018/02/16/reducing-string-duplication-in-ruby
54 lines
1.3 KiB
Ruby
54 lines
1.3 KiB
Ruby
# 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 = @mail.text_part.decoded rescue nil
|
|
body ||= @mail.html_part.decoded rescue nil
|
|
body ||= @mail.body.decoded rescue nil
|
|
|
|
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
|