Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

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
12 actionmailer/lib/action_mailer/base.rb
View
@@ -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
19 actionmailer/test/base_test.rb
View
@@ -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.