Class: IncomingEmailDetailsSerializer

Inherits:
ApplicationSerializer show all
Defined in:
app/serializers/incoming_email_details_serializer.rb

Constant Summary collapse

EMAIL_RECEIVER_ERROR_PREFIX =
"Email::Receiver::"

Instance Method Summary collapse

Methods inherited from ApplicationSerializer

expire_cache_fragment!, fragment_cache

Methods inherited from ActiveModel::Serializer

#include!

Constructor Details

#initialize(incoming_email, opts) ⇒ IncomingEmailDetailsSerializer

Returns a new instance of IncomingEmailDetailsSerializer.



6
7
8
9
10
# File 'app/serializers/incoming_email_details_serializer.rb', line 6

def initialize(incoming_email, opts)
  super
  @error_string = incoming_email.error
  @mail = Mail.new(incoming_email.raw)
end

Instance Method Details

#bodyObject



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'app/serializers/incoming_email_details_serializer.rb', line 35

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

#errorObject



14
15
16
# File 'app/serializers/incoming_email_details_serializer.rb', line 14

def error
  @error_string.presence || I18n.t("emails.incoming.unrecognized_error")
end

#error_descriptionObject



18
19
20
21
# File 'app/serializers/incoming_email_details_serializer.rb', line 18

def error_description
  error_name = @error_string.sub(EMAIL_RECEIVER_ERROR_PREFIX, "").underscore
  I18n.t("emails.incoming.errors.#{error_name}")
end

#headersObject



27
28
29
# File 'app/serializers/incoming_email_details_serializer.rb', line 27

def headers
  @mail.header.to_s
end

#include_error_description?Boolean

Returns:

  • (Boolean)


23
24
25
# File 'app/serializers/incoming_email_details_serializer.rb', line 23

def include_error_description?
  @error_string && @error_string[EMAIL_RECEIVER_ERROR_PREFIX]
end

#subjectObject



31
32
33
# File 'app/serializers/incoming_email_details_serializer.rb', line 31

def subject
  @mail.subject.presence || I18n.t("emails.incoming.no_subject")
end