Adding ability for the procs to be called within the instance, allows you to pass results from instance methods to the mail header

Signed-off-by: José Valim <jose.valim@gmail.com>
This commit is contained in:
Mikel Lindsaar 2010-05-02 13:16:28 +10:00 committed by José Valim
parent 08b07b60b6
commit ceaa100e59
2 changed files with 15 additions and 2 deletions

View File

@ -530,7 +530,7 @@ module ActionMailer #:nodoc:
# Call all the procs (if any)
default_values = self.class.default.merge(self.class.default) do |k,v|
v.respond_to?(:call) ? v.call : v
v.respond_to?(:call) ? v.bind(self).call : v
end
# Handle defaults

View File

@ -116,11 +116,19 @@ class BaseTest < ActiveSupport::TestCase
class ProcMailer < ActionMailer::Base
default :to => 'system@test.lindsaar.net',
'X-Proc-Method' => Proc.new { Time.now.to_i.to_s }
'X-Proc-Method' => Proc.new { Time.now.to_i.to_s },
:subject => Proc.new { give_a_greeting }
def welcome
mail
end
private
def give_a_greeting
"Thanks for signing up this afternoon"
end
end
test "method call to mail does not raise error" do
@ -577,6 +585,11 @@ class BaseTest < ActiveSupport::TestCase
mail2 = ProcMailer.welcome
assert(mail1['X-Proc-Method'].to_s.to_i > mail2['X-Proc-Method'].to_s.to_i)
end
test "we can call other defined methods on the class as needed" do
mail = ProcMailer.welcome
assert_equal("Thanks for signing up this afternoon", mail.subject)
end
protected