0

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) 

rupeshj
  • 139
  • 1
  • 8

0 Answers0