Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

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

  • Loading branch information...
commit e7e4ed48df3048f32d94e398e99d0048a66ba67e 1 parent c985a0e
José Valim and Mikel Lindsaar authored
View
12 actionmailer/lib/action_mailer/base.rb
@@ -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
View
19 actionmailer/test/base_test.rb
@@ -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
Please sign in to comment.
Something went wrong with that request. Please try again.