mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
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
4 changed files with 26 additions and 3 deletions
|
@ -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 @@ module ActionMailer
|
|||
|
||||
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 @@ module ActionMailer
|
|||
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 @@ class BaseTest < ActiveSupport::TestCase
|
|||
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 @@ class BaseMailer < ActionMailer::Base
|
|||
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 a new issue