class Mailtime::MailLogService

Attributes

field[RW]
loggable[RW]

Public Class Methods

new(mail, loggable_class, options) click to toggle source
# File lib/mailtime/processor/mail_log_service.rb, line 5
def initialize(mail, loggable_class, options)
  @mail = mail
  @loggable_class = loggable_class
  @loggable = nil
  @options = options
  @fields = []
end

Public Instance Methods

attribute_is_loggable?(var) click to toggle source
# File lib/mailtime/processor/mail_log_service.rb, line 33
def attribute_is_loggable?(var)
  fields = @options[:fields] || Mailtime.configuration.log_fields || [:to, :cc, :bcc]
  fields.each do |field|
    if @mail.send(field).include?(var.send(@options[:attribute]))
      @fields << field
    end
  end
end
class_is_loggable?(var) click to toggle source
# File lib/mailtime/processor/mail_log_service.rb, line 26
def class_is_loggable?(var)
  if var.class.to_s == @loggable_class
    @loggable = var
  end
  return false
end
create_mail_log() click to toggle source
# File lib/mailtime/processor/mail_log_service.rb, line 42
def create_mail_log
  @fields.each do |field|
    ::Mailtime::MailLog.create(
        :loggable => @loggable,
        :mailtime_mail_template_id => @mail.mailtime_template.try(:id),
        :action => @mail.mailer_action,
        :klass => @mail.mailer_klass,
        :headers => extract_headers,
        :scope => extract_scope,
        :field => field
    )
  end
end
execute() click to toggle source
# File lib/mailtime/processor/mail_log_service.rb, line 13
def execute
  log
end
extract_headers() click to toggle source
# File lib/mailtime/processor/mail_log_service.rb, line 56
def extract_headers
  headers = {}
  @mail.header_fields.map { |k| headers[k.name] = k.value }
  headers
end
extract_scope() click to toggle source
# File lib/mailtime/processor/mail_log_service.rb, line 62
def extract_scope
  @mail.action_variables.as_json.except(*Mailtime.configuration.reject_scope_keys)
end
log() click to toggle source
# File lib/mailtime/processor/mail_log_service.rb, line 17
def log
  return unless loggable?
  create_mail_log
end
loggable?() click to toggle source
# File lib/mailtime/processor/mail_log_service.rb, line 22
def loggable?
  @mail.action_variables.detect { |_, var| class_is_loggable?(var) && attribute_is_loggable?(var) } && @fields.any?
end