67 lines
1.5 KiB
Ruby
67 lines
1.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class Email
|
|
include ActiveModel::Model
|
|
include ActiveModel::Attributes
|
|
include ActiveModel::Conversion
|
|
include ActiveModel::Dirty
|
|
include GlobalID::Identification
|
|
|
|
attribute :id
|
|
attribute :message_id
|
|
attribute :subject
|
|
attribute :date, :datetime
|
|
attribute :to
|
|
attribute :delivered_to
|
|
attribute :from
|
|
attribute :headers, default: []
|
|
attribute :plain_body
|
|
attribute :cron, :boolean, default: false
|
|
attribute :mailing_list, :boolean, default: false
|
|
attribute :organisations, default: []
|
|
attribute :servers, default: []
|
|
attribute :issues, default: []
|
|
attribute :postponed_until, :datetime
|
|
attribute :created_at, :datetime, default: DateTime.now
|
|
attribute :updated_at, :datetime, default: DateTime.now
|
|
|
|
validates :message_id, presence: true
|
|
validates :subject, presence: true
|
|
validates :date, presence: true
|
|
validates :delivered_to, presence: true
|
|
validates :from, presence: true
|
|
validates :headers, presence: true
|
|
|
|
def to_hash
|
|
attributes
|
|
end
|
|
|
|
def persisted?
|
|
id.present?
|
|
end
|
|
|
|
def cron?
|
|
cron
|
|
end
|
|
|
|
def mailing_list?
|
|
mailing_list
|
|
end
|
|
|
|
def postponed?
|
|
postponed_until.present? && postponed_until > DateTime.now
|
|
end
|
|
|
|
def header_values(header_name)
|
|
headers.select { |header|
|
|
header["name"] == header_name
|
|
}.filter_map { |header|
|
|
header["value"]
|
|
}
|
|
end
|
|
|
|
def self.find(id)
|
|
EmailRepository.new.find(id)
|
|
end
|
|
end
|