check active ActionMailer
Posted by michael.schaerfer on 10-Nov-08 at 19:01
In the openSteam backend, we wanted to give the admins the possibility to manually activate or deactivate mailer, like order-confirmation or user-signup mails.
We built a model, called SystemMailer, which holds the mailer classname, the mailer method and a boolean.
Migration File:
1 class CreateSystemMailer < ActiveRecord::Migration 2 def self.up 3 create_table :system_mailers do |t| 4 t.string :mailer_method 5 t.string :mailer_class 6 t.boolean :active 7 8 t.timestamps 9 end 10 end 11 12 def self.down 13 drop_table :system_mailers 14 end 15 end
Model:
1 class SystemMailer < ActiveRecord::Base 2 def active? ; self.active ; end# 3 named_scope :active, { :conditions => { :active => true } } 4 end
Then we built an alias method chain for the ActionMailer::Base#deliver! method, to check whether the current mail-method of the current mailer is active:
1 class ActionMailer::Base 2 3 def deliver_with_active_mailer_check!(mail) 4 active_mailer = SystemMailer.find( :all, 5 :conditions => { 6 :mailer_class => self.class.to_s, 7 :mailer_method => @template, 8 :active => true } ) 9 10 return nil if active_mailer.empty? 11 12 deliver_without_active_mailer_check!( mail ) 13 end 14 15 alias_method_chain :deliver!, :active_mailer_check 16 17 end
In this alias-method, we try to fetch an active SystemMailer entry (with the current class and method name). If the results are empty (no active SystemMailer found), we return nil, otherwise we call the original deliver! method. Pretty simple.

Comments
There are 0 comments on this post. Post yours →
Post a comment
Required fields in bold.