mirror of https://github.com/rails/rails
Set sort order for explicit parts from the collector's template sequence
This commit is contained in:
parent
c985a0ee3d
commit
e7e4ed48df
|
@ -415,7 +415,7 @@ module ActionMailer #:nodoc:
|
|||
# Should be removed when old API is deprecated
|
||||
@mail_was_called = true
|
||||
|
||||
m, sort_parts = @message, true
|
||||
m = @message
|
||||
|
||||
# Give preference to headers and fallback to the ones set in mail
|
||||
content_type = headers[:content_type] || m.content_type
|
||||
|
@ -425,12 +425,16 @@ module ActionMailer #:nodoc:
|
|||
headers[:subject] ||= default_subject
|
||||
quote_fields(m, headers, charset)
|
||||
|
||||
sort_order = headers[:parts_order] || self.class.default_implicit_parts_order.dup
|
||||
|
||||
responses = if headers[:body]
|
||||
[ { :body => headers[:body], :content_type => self.class.default_content_type.dup } ]
|
||||
elsif block_given?
|
||||
sort_parts = false
|
||||
collector = ActionMailer::Collector.new(self) { render(action_name) }
|
||||
yield(collector)
|
||||
# Collect the sort order of the parts from the collector as Mail will always
|
||||
# sort parts on encode into a "sane" sequence.
|
||||
sort_order = collector.responses.map { |r| r[:content_type] }
|
||||
collector.responses
|
||||
else
|
||||
# TODO Ensure that we don't need to pass I18n.locale as detail
|
||||
|
@ -447,8 +451,8 @@ module ActionMailer #:nodoc:
|
|||
m.charset = charset
|
||||
m.mime_version = mime_version
|
||||
|
||||
if sort_parts && m.parts.present?
|
||||
m.body.set_sort_order(headers[:parts_order] || self.class.default_implicit_parts_order.dup)
|
||||
if m.multipart?
|
||||
m.body.set_sort_order(sort_order)
|
||||
m.body.sort_parts!
|
||||
end
|
||||
|
||||
|
|
|
@ -304,16 +304,15 @@ class BaseTest < ActiveSupport::TestCase
|
|||
assert_equal("HTML Explicit Multipart", email.parts[1].parts[1].body.encoded)
|
||||
end
|
||||
|
||||
# TODO Seems Mail is sorting the templates automatically, and not on demand
|
||||
# test "explicit multipart with templates" do
|
||||
# email = BaseMailer.deliver_explicit_multipart_templates
|
||||
# assert_equal(2, email.parts.size)
|
||||
# assert_equal("multipart/alternate", email.mime_type)
|
||||
# assert_equal("text/html", email.parts[0].mime_type)
|
||||
# assert_equal("HTML Explicit Multipart Templates", email.parts[0].body.encoded)
|
||||
# assert_equal("text/plain", email.parts[1].mime_type)
|
||||
# assert_equal("TEXT Explicit Multipart Templates", email.parts[1].body.encoded)
|
||||
# end
|
||||
test "explicit multipart with templates" do
|
||||
email = BaseMailer.deliver_explicit_multipart_templates
|
||||
assert_equal(2, email.parts.size)
|
||||
assert_equal("multipart/alternate", email.mime_type)
|
||||
assert_equal("text/html", email.parts[0].mime_type)
|
||||
assert_equal("HTML Explicit Multipart Templates", email.parts[0].body.encoded)
|
||||
assert_equal("text/plain", email.parts[1].mime_type)
|
||||
assert_equal("TEXT Explicit Multipart Templates", email.parts[1].body.encoded)
|
||||
end
|
||||
|
||||
test "explicit multipart with any" do
|
||||
email = BaseMailer.deliver_explicit_multipart_with_any
|
||||
|
|
Loading…
Reference in New Issue