ActionMailer: support overriding template name in multipart
Implicit rendering in multipart blocks now also uses the template name from the options hash instead of always using the action name. So you can now write mail(template_name: template_name) do |format| format.text format.html end
This commit is contained in:
parent
a61e4ae58d
commit
5c54db290f
@ -1,3 +1,8 @@
|
||||
* Mails with multipart `format` blocks with implicit render now also check for
|
||||
a template name in options hash instead of only using the action name.
|
||||
|
||||
*Marcus Ilgner*
|
||||
|
||||
* `config.force_ssl = true` will set
|
||||
`config.action_mailer.default_url_options = { protocol: 'https' }`
|
||||
|
||||
|
@ -893,9 +893,7 @@ def assign_headers_to_message(message, headers)
|
||||
|
||||
def collect_responses(headers)
|
||||
if block_given?
|
||||
collector = ActionMailer::Collector.new(lookup_context) { render(action_name) }
|
||||
yield(collector)
|
||||
collector.responses
|
||||
collect_responses_from_block(headers, &Proc.new)
|
||||
elsif headers[:body]
|
||||
[{
|
||||
body: headers.delete(:body),
|
||||
@ -906,6 +904,13 @@ def collect_responses(headers)
|
||||
end
|
||||
end
|
||||
|
||||
def collect_responses_from_block(headers)
|
||||
templates_name = headers[:template_name] || action_name
|
||||
collector = ActionMailer::Collector.new(lookup_context) { render(templates_name) }
|
||||
yield(collector)
|
||||
collector.responses
|
||||
end
|
||||
|
||||
def collect_responses_from_templates(headers)
|
||||
templates_path = headers[:template_path] || self.class.mailer_name
|
||||
templates_name = headers[:template_name] || action_name
|
||||
|
@ -539,6 +539,12 @@ def welcome
|
||||
assert_equal("TEXT Implicit Multipart", mail.text_part.body.decoded)
|
||||
end
|
||||
|
||||
test "you can specify a different template for multipart render" do
|
||||
mail = BaseMailer.implicit_different_template_with_block('explicit_multipart_templates').deliver
|
||||
assert_equal("HTML Explicit Multipart Templates", mail.html_part.body.decoded)
|
||||
assert_equal("TEXT Explicit Multipart Templates", mail.text_part.body.decoded)
|
||||
end
|
||||
|
||||
test "should raise if missing template in implicit render" do
|
||||
assert_raises ActionView::MissingTemplate do
|
||||
BaseMailer.implicit_different_template('missing_template').deliver_now
|
||||
|
@ -104,6 +104,13 @@ def implicit_different_template(template_name='')
|
||||
mail(template_name: template_name)
|
||||
end
|
||||
|
||||
def implicit_different_template_with_block(template_name='')
|
||||
mail(template_name: template_name) do |format|
|
||||
format.text
|
||||
format.html
|
||||
end
|
||||
end
|
||||
|
||||
def explicit_different_template(template_name='')
|
||||
mail do |format|
|
||||
format.text { render template: "#{mailer_name}/#{template_name}" }
|
||||
|
Loading…
Reference in New Issue
Block a user