ActionMailer should respect content type when choosing layouts
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
This commit is contained in:
parent
84583657f4
commit
1d4554d766
|
@ -549,7 +549,12 @@ module ActionMailer #:nodoc:
|
|||
end
|
||||
|
||||
def render_message(method_name, body)
|
||||
if method_name.respond_to?(:content_type)
|
||||
@current_template_content_type = method_name.content_type
|
||||
end
|
||||
render :file => method_name, :body => body
|
||||
ensure
|
||||
@current_template_content_type = nil
|
||||
end
|
||||
|
||||
def render(opts)
|
||||
|
@ -568,7 +573,11 @@ module ActionMailer #:nodoc:
|
|||
end
|
||||
|
||||
def default_template_format
|
||||
:html
|
||||
if @current_template_content_type
|
||||
Mime::Type.lookup(@current_template_content_type).to_sym
|
||||
else
|
||||
:html
|
||||
end
|
||||
end
|
||||
|
||||
def candidate_for_layout?(options)
|
||||
|
@ -588,7 +597,9 @@ module ActionMailer #:nodoc:
|
|||
end
|
||||
|
||||
def initialize_template_class(assigns)
|
||||
ActionView::Base.new(view_paths, assigns, self)
|
||||
template = ActionView::Base.new(view_paths, assigns, self)
|
||||
template.template_format = default_template_format
|
||||
template
|
||||
end
|
||||
|
||||
def sort_parts(parts, order = [])
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
text/html multipart
|
|
@ -0,0 +1 @@
|
|||
text/plain multipart
|
|
@ -0,0 +1 @@
|
|||
text/plain layout - <%= yield %>
|
|
@ -20,6 +20,12 @@ class AutoLayoutMailer < ActionMailer::Base
|
|||
from "tester@example.com"
|
||||
body render(:inline => "Hello, <%= @world %>", :layout => false, :body => { :world => "Earth" })
|
||||
end
|
||||
|
||||
def multipart(recipient)
|
||||
recipients recipient
|
||||
subject "You have a mail"
|
||||
from "tester@example.com"
|
||||
end
|
||||
end
|
||||
|
||||
class ExplicitLayoutMailer < ActionMailer::Base
|
||||
|
@ -56,6 +62,17 @@ class LayoutMailerTest < Test::Unit::TestCase
|
|||
assert_equal "Hello from layout Inside", mail.body.strip
|
||||
end
|
||||
|
||||
def test_should_pickup_multipart_layout
|
||||
mail = AutoLayoutMailer.create_multipart(@recipient)
|
||||
assert_equal 2, mail.parts.size
|
||||
|
||||
assert_equal 'text/plain', mail.parts.first.content_type
|
||||
assert_equal "text/plain layout - text/plain multipart", mail.parts.first.body
|
||||
|
||||
assert_equal 'text/html', mail.parts.last.content_type
|
||||
assert_equal "Hello from layout text/html multipart", mail.parts.last.body
|
||||
end
|
||||
|
||||
def test_should_pickup_layout_given_to_render
|
||||
mail = AutoLayoutMailer.create_spam(@recipient)
|
||||
assert_equal "Spammer layout Hello, Earth", mail.body.strip
|
||||
|
|
Loading…
Reference in New Issue