class Logged::LogSubscriber::ActionMailer

Log subscriber for ActionMailer events

Public Instance Methods

deliver(event) click to toggle source

An email was delivered.

# File lib/logged/log_subscriber/action_mailer.rb, line 12
def deliver(event)
  return if ignore?(event, :debug)

  process_duration = Thread.current[:logged_action_mailer_process_duration] || 0.0

  data = {
    event:    event.name,
    duration: (process_duration + event.duration.to_f).round(2)
  }

  data.merge!(extract_mail_deliver(event.payload))

  Thread.current[:logged_action_mailer_process_duration] = nil

  debug(event, data)
end
process(event) click to toggle source

An email was generated.

# File lib/logged/log_subscriber/action_mailer.rb, line 43
def process(event)
  payload = event.payload

  Thread.current[:logged_action_mailer_process_mailer]   = payload[:mailer]
  Thread.current[:logged_action_mailer_process_action]   = payload[:action]
  Thread.current[:logged_action_mailer_process_duration] = event.duration.to_f
end
receive(event) click to toggle source

An email was received.

# File lib/logged/log_subscriber/action_mailer.rb, line 30
def receive(event)
  return unless logger.debug?
  return if ignore?(event)

  data = {
    event:    event.name,
    duration: event.duration.to_f.round(2)
  }

  debug(event, data)
end

Private Instance Methods

extract_mail_deliver(payload) click to toggle source
# File lib/logged/log_subscriber/action_mailer.rb, line 53
def extract_mail_deliver(payload)
  data = mail_deliver_data(payload)

  Thread.current[:logged_action_mailer_process_mailer] = nil
  Thread.current[:logged_action_mailer_process_action] = nil

  data
end
mail_deliver_data(payload) click to toggle source
# File lib/logged/log_subscriber/action_mailer.rb, line 62
def mail_deliver_data(payload)
  {
    mailer: mail_deliver_data_thread_fallback(payload, :mailer),
    action: mail_deliver_data_thread_fallback(payload, :action),
    from:   mail_deliver_data_array(payload, :from),
    to:     mail_deliver_data_array(payload, :to),
    bcc:    mail_deliver_data_array(payload, :bcc)
  }
end
mail_deliver_data_array(payload, key) click to toggle source
# File lib/logged/log_subscriber/action_mailer.rb, line 76
def mail_deliver_data_array(payload, key)
  Array(payload[key]).join(', ')
end
mail_deliver_data_thread_fallback(payload, key) click to toggle source
# File lib/logged/log_subscriber/action_mailer.rb, line 72
def mail_deliver_data_thread_fallback(payload, key)
  payload[key] || Thread.current["logged_action_mailer_process_#{key}".to_sym]
end