Skip to content

Instantly share code, notes, and snippets.

@perryqh
Created June 23, 2010 17:24
Show Gist options
  • Save perryqh/450242 to your computer and use it in GitHub Desktop.
Save perryqh/450242 to your computer and use it in GitHub Desktop.
module DelayedJobExtensions
class EmailJob < Struct.new(:deliver_class_name, :message)
def perform
Object.const_get(deliver_class_name).deliver(message)
end
end
def delay_email_methods(*delay_me)
klass = (class << self; self end)
delay_me.each do |attr|
klass.send(:define_method, "delay_#{attr.to_s}".to_sym) do |*args|
if defined?(DISABLE_DELAYED_JOB) && DISABLE_DELAYED_JOB
self.send("deliver_#{attr.to_s}".to_sym, *args)
else
created_email = self.send("create_#{attr.to_s}".to_sym, *args)
Delayed::Job.enqueue(EmailJob.new(self.class.name, created_email))
end
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment