module MailRotator::Switcher

Public Instance Methods

active_mailer() click to toggle source
# File lib/mail_rotator/switcher.rb, line 46
def active_mailer
  MailerStore.where(active: true).first
end
assign_mailer(klass, mailer) click to toggle source
# File lib/mail_rotator/switcher.rb, line 33
def assign_mailer(klass, mailer)
  hash = SMTP_SETTINGS[mailer.name]
  klass.smtp_settings = hash[:settings] || hash['settings']
end
current_mailer() click to toggle source
# File lib/mail_rotator/switcher.rb, line 38
def current_mailer
  mailer = active_mailer
  return mailer if mailer
  mailer = first_mailer
  first_mailer.activate
  first_mailer
end
first_mailer() click to toggle source
# File lib/mail_rotator/switcher.rb, line 50
def first_mailer
  MailerStore.first
end
treat(klass) click to toggle source
# File lib/mail_rotator/switcher.rb, line 7
def treat(klass)
  validate_constant
  validate_rows

  mailer = current_mailer
  mailer.public_send(mailer.over_limit? ? :reset : :increment)

  assign_mailer(klass, current_mailer)
end
validate_constant() click to toggle source
# File lib/mail_rotator/switcher.rb, line 17
def validate_constant
  return if Switcher.const_defined?("SMTP_SETTINGS")
  raise "MailRotator: MailRotator::Switcher::SMTP_SETTINGS is not defined. Refer to the README."
end
validate_rows() click to toggle source
# File lib/mail_rotator/switcher.rb, line 25
def validate_rows
  config_mailer_names = SMTP_SETTINGS.keys.sort
  db_mailer_names = MailerStore.pluck(:name).sort

  return if (config_mailer_names == db_mailer_names)
  raise "Please run 'rake db:migrate mail_rotator:update_rows' for RAILS_ENV=#{ENV['RAILS_ENV']}."
end