Set sort order for explicit parts from the collector's template sequence

上级 c985a0ee
......@@ -415,7 +415,7 @@ def mail(headers = {})
# 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 @@ def mail(headers = {})
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 @@ def mail(headers = {})
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 @@ def explicit_multipart_with_any(hash = {})
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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册