I have a class in the core application,
<!-- language: lang-rb -->
class Mailer < ActionMailer::Base
.
.
def mail(headers={}, &block)
headers.merge! 'Auto-Submitted' => 'auto-generated',
'From' => Setting.mail_from,
'List-Id' => "<#{Setting.mail_from.to_s.gsub('@', '.')}>"
.
.
m
end
end
I need to patch this class, (As a plugin), So that the 'From' is configurable. Here is the plugin patch I tried and failed to get the expected result.
<!-- language: lang-rb -->
module Patches
module MailerPatch
def self.included(base) # :nodoc:
base.send(:include, InstanceMethods)
base.class_eval do
unloadable
alias_method_chain :mail, :patch
end
end
end
module InstanceMethods
def mail_with_patch(headers={}, &block)
m = mail_without_patch(headers, &block)
m.from = User.current.mail
m
end
end
end
Mailer.send(:include, Patches::MailerPatch)
Am I doing something wrong here, Please help me. Thank You.
SOLUTION : The following approach solved me the problem.
<!-- language: lang-rb -->
module Patches
module MailerPatch
def self.included(base) # :nodoc:
base.send(:include, InstanceMethods)
base.class_eval do
unloadable
alias_method :old_mail, :mail
define_method(:mail) do |headers={}, &block|
headers.merge! 'X-Mailer' => 'User',
'From' => User.current.mail
..........
end
end
end
end
end
Mailer.send(:include, Patches::MailerPatch)