Class: MailDude::MessagePresenter

Inherits:
Object
  • Object
show all
Defined in:
lib/mail_dude/message_presenter.rb

Constant Summary collapse

FALLBACK_DECODE_ERROR =
'Unable to decode this message part.'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(record) ⇒ MessagePresenter

Returns a new instance of MessagePresenter.



11
12
13
# File 'lib/mail_dude/message_presenter.rb', line 11

def initialize(record)
  @record = record
end

Instance Attribute Details

#recordObject (readonly)

Returns the value of attribute record.



7
8
9
# File 'lib/mail_dude/message_presenter.rb', line 7

def record
  @record
end

Instance Method Details

#attachment_count_labelObject



87
88
89
90
# File 'lib/mail_dude/message_presenter.rb', line 87

def attachment_count_label
  count = attachments.length
  "#{count} #{'attachment'.pluralize(count)}"
end

#attachmentsObject



45
# File 'lib/mail_dude/message_presenter.rb', line 45

def attachments = ('attachments')

#bccObject



37
# File 'lib/mail_dude/message_presenter.rb', line 37

def bcc = ('bcc')

#captured_atObject



23
24
25
26
27
# File 'lib/mail_dude/message_presenter.rb', line 23

def captured_at
  Time.iso8601(('captured_at').to_s)
rescue ArgumentError, TypeError
  nil
end

#captured_at_labelObject



29
30
31
# File 'lib/mail_dude/message_presenter.rb', line 29

def captured_at_label
  captured_at ? captured_at.strftime('%Y-%m-%d %H:%M:%S UTC') : '(unknown time)'
end

#ccObject



36
# File 'lib/mail_dude/message_presenter.rb', line 36

def cc = ('cc')

#content_typeObject



42
# File 'lib/mail_dude/message_presenter.rb', line 42

def content_type = ('content_type')

#fromObject



33
# File 'lib/mail_dude/message_presenter.rb', line 33

def from = ('from')

#has_attachments?Boolean

Returns:

  • (Boolean)


83
84
85
# File 'lib/mail_dude/message_presenter.rb', line 83

def has_attachments?
  attachments.any?
end

#html_bodyObject



69
70
71
# File 'lib/mail_dude/message_presenter.rb', line 69

def html_body
  decoded_body_for('text/html')
end

#list_previewObject



100
101
102
103
# File 'lib/mail_dude/message_presenter.rb', line 100

def list_preview
  preview = text_body.presence || ActionView::Base.full_sanitizer.sanitize(html_body.to_s)
  preview.to_s.squish.truncate(140)
end

#mailObject



63
64
65
66
67
# File 'lib/mail_dude/message_presenter.rb', line 63

def mail
  @mail ||= raw_source.present? ? Mail.read_from_string(raw_source) : nil
rescue StandardError
  nil
end

#mailerObject



40
# File 'lib/mail_dude/message_presenter.rb', line 40

def mailer = ('mailer')

#mailer_actionObject



41
# File 'lib/mail_dude/message_presenter.rb', line 41

def mailer_action = ('mailer_action')

#mailer_labelObject



47
48
49
50
51
52
53
# File 'lib/mail_dude/message_presenter.rb', line 47

def mailer_label
  return '(unknown mailer)' if mailer.blank? && mailer_action.blank?
  return mailer if mailer_action.blank?
  return "##{mailer_action}" if mailer.blank?

  "#{mailer}##{mailer_action}"
end

#message_idObject



39
# File 'lib/mail_dude/message_presenter.rb', line 39

def message_id = ('message_id')

#raw_headersObject



77
78
79
80
81
# File 'lib/mail_dude/message_presenter.rb', line 77

def raw_headers
  return '' if raw_source.blank?

  raw_source.split(/\r?\n\r?\n/, 2).first.to_s
end

#raw_sourceObject



44
# File 'lib/mail_dude/message_presenter.rb', line 44

def raw_source = record.raw_source.to_s

#recipient_summaryObject



92
93
94
# File 'lib/mail_dude/message_presenter.rb', line 92

def recipient_summary
  to.first.presence || cc.first.presence || bcc.first.presence || '(no recipients)'
end

#reply_toObject



38
# File 'lib/mail_dude/message_presenter.rb', line 38

def reply_to = ('reply_to')

#senderObject



34
# File 'lib/mail_dude/message_presenter.rb', line 34

def sender = ('sender')

#sender_summaryObject



96
97
98
# File 'lib/mail_dude/message_presenter.rb', line 96

def sender_summary
  from.first.presence || sender.first.presence || '(unknown sender)'
end

#size_bytesObject



43
# File 'lib/mail_dude/message_presenter.rb', line 43

def size_bytes = ('size_bytes').to_i

#size_labelObject



55
56
57
58
59
60
61
# File 'lib/mail_dude/message_presenter.rb', line 55

def size_label
  bytes = size_bytes
  return "#{bytes} B" if bytes < 1.kilobyte
  return "#{format('%.1f', bytes / 1.kilobyte.to_f)} KB" if bytes < 1.megabyte

  "#{format('%.1f', bytes / 1.megabyte.to_f)} MB"
end

#subjectObject



15
16
17
# File 'lib/mail_dude/message_presenter.rb', line 15

def subject
  ('subject').to_s
end

#subject_labelObject



19
20
21
# File 'lib/mail_dude/message_presenter.rb', line 19

def subject_label
  subject.strip.presence || '(no subject)'
end

#text_bodyObject



73
74
75
# File 'lib/mail_dude/message_presenter.rb', line 73

def text_body
  decoded_body_for('text/plain')
end

#toObject



35
# File 'lib/mail_dude/message_presenter.rb', line 35

def to = ('to')