提交 6003dafc 编写于 作者: R Ryuta Kamizono

Merge pull request #30391 from jbourassa/fix-actionmailer-lambda-default

Fix actionmailer lambda default
* Bring back proc with arity of 1 in `ActionMailer::Base.default` proc
since it was supported in Rails 5.0 but not deprecated.
*Jimmy Bourassa*
## Rails 5.2.0.beta2 (November 28, 2017) ##
* No changes.
......
......@@ -889,7 +889,7 @@ def apply_defaults(headers)
default_values = self.class.default.map do |key, value|
[
key,
value.is_a?(Proc) ? instance_exec(&value) : value
compute_default(value)
]
end.to_h
......@@ -898,6 +898,16 @@ def apply_defaults(headers)
headers_with_defaults
end
def compute_default(value)
return value unless value.is_a?(Proc)
if value.arity == 1
instance_exec(self, &value)
else
instance_exec(&value)
end
end
def assign_headers_to_message(message, headers)
assignable = headers.except(:parts_order, :content_type, :body, :template_name,
:template_path, :delivery_method, :delivery_method_options)
......
......@@ -725,6 +725,15 @@ def self.previewing_email(mail); end
assert(ProcMailer.welcome["x-has-to-proc"].to_s == "symbol")
end
test "proc default values can have arity of 1 where arg is a mailer instance" do
assert_equal(ProcMailer.welcome["X-Lambda-Arity-1-arg"].to_s, "complex_value")
assert_equal(ProcMailer.welcome["X-Lambda-Arity-1-self"].to_s, "complex_value")
end
test "proc default values with fixed arity of 0 can be called" do
assert_equal("0", ProcMailer.welcome["X-Lambda-Arity-0"].to_s)
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)
......
......@@ -4,12 +4,19 @@ class ProcMailer < ActionMailer::Base
default to: "system@test.lindsaar.net",
"X-Proc-Method" => Proc.new { Time.now.to_i.to_s },
subject: Proc.new { give_a_greeting },
"x-has-to-proc" => :symbol
"x-has-to-proc" => :symbol,
"X-Lambda-Arity-0" => ->() { "0" },
"X-Lambda-Arity-1-arg" => ->(arg) { arg.computed_value },
"X-Lambda-Arity-1-self" => ->(_) { self.computed_value }
def welcome
mail
end
def computed_value
"complex_value"
end
private
def give_a_greeting
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册