diff options
author | Yehuda Katz + Carl Lerche <ykatz+clerche@engineyard.com> | 2009-04-22 17:16:28 -0700 |
---|---|---|
committer | Yehuda Katz and Carl Lerche <wycats@gmail.com> | 2009-04-22 17:24:41 -0700 |
commit | 0a132c2fe13fb2b8d5dade9cf6abd70601376287 (patch) | |
tree | cf9194a0a9df3cf36e7a1ffbe8b8e16274c94ee9 /actionmailer | |
parent | b2d6fdae353be4fca41d7ac1839f30d9737162fd (diff) | |
download | rails-0a132c2fe13fb2b8d5dade9cf6abd70601376287.tar.gz rails-0a132c2fe13fb2b8d5dade9cf6abd70601376287.tar.bz2 rails-0a132c2fe13fb2b8d5dade9cf6abd70601376287.zip |
Refactor ActionView::Path
* Decouple from ActionController and ActionMailer
* Bring back localization support.
* Prepare to decouple templates from the filesystem.
* Prepare to decouple localization from ActionView
* Fix ActionMailer to take advantage of ActionView::Path
Diffstat (limited to 'actionmailer')
-rw-r--r-- | actionmailer/lib/action_mailer/base.rb | 49 | ||||
-rw-r--r-- | actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/mail.rb | 1 | ||||
-rw-r--r-- | actionmailer/test/fixtures/auto_layout_mailer/multipart.html.erb (renamed from actionmailer/test/fixtures/auto_layout_mailer/multipart.text.html.erb) | 0 | ||||
-rw-r--r-- | actionmailer/test/fixtures/auto_layout_mailer/multipart.text.erb (renamed from actionmailer/test/fixtures/auto_layout_mailer/multipart.text.plain.erb) | 0 | ||||
-rw-r--r-- | actionmailer/test/fixtures/test_mailer/_subtemplate.text.erb (renamed from actionmailer/test/fixtures/test_mailer/_subtemplate.text.plain.erb) | 0 | ||||
-rw-r--r-- | actionmailer/test/fixtures/test_mailer/custom_templating_extension.html.haml (renamed from actionmailer/test/fixtures/test_mailer/custom_templating_extension.text.html.haml) | 0 | ||||
-rw-r--r-- | actionmailer/test/fixtures/test_mailer/custom_templating_extension.text.haml (renamed from actionmailer/test/fixtures/test_mailer/custom_templating_extension.text.plain.haml) | 0 | ||||
-rw-r--r-- | actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.html.erb (renamed from actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.text.html.erb) | 0 | ||||
-rw-r--r-- | actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.html.erb~ (renamed from actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.text.html.erb~) | 0 | ||||
-rw-r--r-- | actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.text.erb (renamed from actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.text.plain.erb) | 0 | ||||
-rw-r--r-- | actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.yaml.erb (renamed from actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.text.yaml.erb) | 0 | ||||
-rw-r--r-- | actionmailer/test/fixtures/test_mailer/included_subtemplate.text.erb (renamed from actionmailer/test/fixtures/test_mailer/included_subtemplate.text.plain.erb) | 0 | ||||
-rw-r--r-- | actionmailer/test/fixtures/test_mailer/rxml_template.builder | 2 | ||||
-rw-r--r-- | actionmailer/test/mail_service_test.rb | 14 |
14 files changed, 34 insertions, 32 deletions
diff --git a/actionmailer/lib/action_mailer/base.rb b/actionmailer/lib/action_mailer/base.rb index 9eee5783a0..69e77871b0 100644 --- a/actionmailer/lib/action_mailer/base.rb +++ b/actionmailer/lib/action_mailer/base.rb @@ -465,48 +465,48 @@ module ActionMailer #:nodoc: def create!(method_name, *parameters) #:nodoc: initialize_defaults(method_name) __send__(method_name, *parameters) - + # If an explicit, textual body has not been set, we check assumptions. unless String === @body # First, we look to see if there are any likely templates that match, # which include the content-type in their file name (i.e., # "the_template_file.text.html.erb", etc.). Only do this if parts # have not already been specified manually. - if @parts.empty? - Dir.glob("#{template_path}/#{@template}.*").each do |path| - template = template_root.find_by_parts("#{mailer_name}/#{File.basename(path)}") - - # Skip unless template has a multipart format - next unless template && template.multipart? - + # if @parts.empty? + template_root.find_all_by_parts(@template, {}, template_path).each do |template| @parts << Part.new( - :content_type => template.content_type, + :content_type => Mime::Type.lookup_by_extension(template.content_type || "text").to_s, :disposition => "inline", :charset => charset, :body => render_template(template, @body) ) end - unless @parts.empty? + + if @parts.size > 1 @content_type = "multipart/alternative" if @content_type !~ /^multipart/ @parts = sort_parts(@parts, @implicit_parts_order) end - end - + # end + # Then, if there were such templates, we check to see if we ought to # also render a "normal" template (without the content type). If a # normal template exists (or if there were no implicit parts) we render # it. - template_exists = @parts.empty? - template_exists ||= template_root.find_by_parts("#{mailer_name}/#{@template}") - @body = render_message(@template, @body) if template_exists + # ==== + # TODO: Revisit this + # template_exists = @parts.empty? + # template_exists ||= template_root.find_by_parts("#{mailer_name}/#{@template}") + # @body = render_message(@template, @body) if template_exists # Finally, if there are other message parts and a textual body exists, # we shift it onto the front of the parts and set the body to nil (so # that create_mail doesn't try to render it in addition to the parts). - if !@parts.empty? && String === @body - @parts.unshift Part.new(:charset => charset, :body => @body) - @body = nil - end + # ==== + # TODO: Revisit this + # if !@parts.empty? && String === @body + # @parts.unshift Part.new(:charset => charset, :body => @body) + # @body = nil + # end end # If this is a multipart e-mail add the mime_version if it is not @@ -580,7 +580,7 @@ module ActionMailer #:nodoc: if file prefix = mailer_name unless file =~ /\// - template = view_paths.find_by_parts(file, formats, prefix) + template = view_paths.find_by_parts(file, {:formats => formats}, prefix) end layout = _pick_layout(layout, @@ -611,7 +611,7 @@ module ActionMailer #:nodoc: end def template_path - "#{template_root}/#{mailer_name}" + "#{mailer_name}" end def initialize_template_class(assigns) @@ -622,7 +622,7 @@ module ActionMailer #:nodoc: def sort_parts(parts, order = []) order = order.collect { |s| s.downcase } - + parts = parts.sort do |a, b| a_ct = a.content_type.downcase b_ct = b.content_type.downcase @@ -663,10 +663,13 @@ module ActionMailer #:nodoc: headers.each { |k, v| m[k] = v } real_content_type, ctype_attrs = parse_content_type - + if @parts.empty? m.set_content_type(real_content_type, nil, ctype_attrs) m.body = normalize_new_lines(body) + elsif @parts.size == 1 && @parts.first.parts.empty? + m.set_content_type(real_content_type, nil, ctype_attrs) + m.body = normalize_new_lines(@parts.first.body) else if String === body part = TMail::Mail.new diff --git a/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/mail.rb b/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/mail.rb index c3a8803dc4..23a3f75de3 100644 --- a/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/mail.rb +++ b/actionmailer/lib/action_mailer/vendor/tmail-1.2.3/tmail/mail.rb @@ -518,6 +518,7 @@ module TMail def parse_body( f = nil ) return if @body_parsed + if f parse_body_0 f else diff --git a/actionmailer/test/fixtures/auto_layout_mailer/multipart.text.html.erb b/actionmailer/test/fixtures/auto_layout_mailer/multipart.html.erb index 6d73f199c4..6d73f199c4 100644 --- a/actionmailer/test/fixtures/auto_layout_mailer/multipart.text.html.erb +++ b/actionmailer/test/fixtures/auto_layout_mailer/multipart.html.erb diff --git a/actionmailer/test/fixtures/auto_layout_mailer/multipart.text.plain.erb b/actionmailer/test/fixtures/auto_layout_mailer/multipart.text.erb index f4b91e4031..f4b91e4031 100644 --- a/actionmailer/test/fixtures/auto_layout_mailer/multipart.text.plain.erb +++ b/actionmailer/test/fixtures/auto_layout_mailer/multipart.text.erb diff --git a/actionmailer/test/fixtures/test_mailer/_subtemplate.text.plain.erb b/actionmailer/test/fixtures/test_mailer/_subtemplate.text.erb index 3b4ba35f20..3b4ba35f20 100644 --- a/actionmailer/test/fixtures/test_mailer/_subtemplate.text.plain.erb +++ b/actionmailer/test/fixtures/test_mailer/_subtemplate.text.erb diff --git a/actionmailer/test/fixtures/test_mailer/custom_templating_extension.text.html.haml b/actionmailer/test/fixtures/test_mailer/custom_templating_extension.html.haml index 847d065c37..847d065c37 100644 --- a/actionmailer/test/fixtures/test_mailer/custom_templating_extension.text.html.haml +++ b/actionmailer/test/fixtures/test_mailer/custom_templating_extension.html.haml diff --git a/actionmailer/test/fixtures/test_mailer/custom_templating_extension.text.plain.haml b/actionmailer/test/fixtures/test_mailer/custom_templating_extension.text.haml index 847d065c37..847d065c37 100644 --- a/actionmailer/test/fixtures/test_mailer/custom_templating_extension.text.plain.haml +++ b/actionmailer/test/fixtures/test_mailer/custom_templating_extension.text.haml diff --git a/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.text.html.erb b/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.html.erb index 946d99ede5..946d99ede5 100644 --- a/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.text.html.erb +++ b/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.html.erb diff --git a/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.text.html.erb~ b/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.html.erb~ index 946d99ede5..946d99ede5 100644 --- a/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.text.html.erb~ +++ b/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.html.erb~ diff --git a/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.text.plain.erb b/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.text.erb index a6c8d54cf9..a6c8d54cf9 100644 --- a/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.text.plain.erb +++ b/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.text.erb diff --git a/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.text.yaml.erb b/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.yaml.erb index c14348c770..c14348c770 100644 --- a/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.text.yaml.erb +++ b/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.yaml.erb diff --git a/actionmailer/test/fixtures/test_mailer/included_subtemplate.text.plain.erb b/actionmailer/test/fixtures/test_mailer/included_subtemplate.text.erb index a93c30ea1a..a93c30ea1a 100644 --- a/actionmailer/test/fixtures/test_mailer/included_subtemplate.text.plain.erb +++ b/actionmailer/test/fixtures/test_mailer/included_subtemplate.text.erb diff --git a/actionmailer/test/fixtures/test_mailer/rxml_template.builder b/actionmailer/test/fixtures/test_mailer/rxml_template.builder deleted file mode 100644 index d566bd8d7c..0000000000 --- a/actionmailer/test/fixtures/test_mailer/rxml_template.builder +++ /dev/null @@ -1,2 +0,0 @@ -xml.instruct! -xml.test
\ No newline at end of file diff --git a/actionmailer/test/mail_service_test.rb b/actionmailer/test/mail_service_test.rb index b7d5fd5dd3..b27bda49be 100644 --- a/actionmailer/test/mail_service_test.rb +++ b/actionmailer/test/mail_service_test.rb @@ -338,6 +338,7 @@ class ActionMailerTest < Test::Unit::TestCase def test_nested_parts_with_body created = nil + TestMailer.create_nested_multipart_with_body(@recipient) assert_nothing_raised { created = TestMailer.create_nested_multipart_with_body(@recipient)} assert_equal 1,created.parts.size assert_equal 2,created.parts.first.parts.size @@ -351,8 +352,8 @@ class ActionMailerTest < Test::Unit::TestCase def test_attachment_with_custom_header created = nil - assert_nothing_raised { created = TestMailer.create_attachment_with_custom_header(@recipient)} - assert_equal "<test@test.com>", created.parts[1].header['content-id'].to_s + assert_nothing_raised { created = TestMailer.create_attachment_with_custom_header(@recipient) } + assert created.parts.any? { |p| p.header['content-id'].to_s == "<test@test.com>" } end def test_signed_up @@ -824,7 +825,7 @@ EOF assert_equal 3, mail.parts.length assert_equal "1.0", mail.mime_version assert_equal "multipart/alternative", mail.content_type - assert_equal "text/yaml", mail.parts[0].content_type + assert_equal "application/x-yaml", mail.parts[0].content_type assert_equal "utf-8", mail.parts[0].sub_header("content-type", "charset") assert_equal "text/plain", mail.parts[1].content_type assert_equal "utf-8", mail.parts[1].sub_header("content-type", "charset") @@ -835,11 +836,11 @@ EOF def test_implicitly_multipart_messages_with_custom_order assert ActionView::Template.template_handler_extensions.include?("bak"), "bak extension was not registered" - mail = TestMailer.create_implicitly_multipart_example(@recipient, nil, ["text/yaml", "text/plain"]) + mail = TestMailer.create_implicitly_multipart_example(@recipient, nil, ["application/x-yaml", "text/plain"]) assert_equal 3, mail.parts.length assert_equal "text/html", mail.parts[0].content_type assert_equal "text/plain", mail.parts[1].content_type - assert_equal "text/yaml", mail.parts[2].content_type + assert_equal "application/x-yaml", mail.parts[2].content_type end def test_implicitly_multipart_messages_with_charset @@ -938,8 +939,7 @@ EOF def test_multipart_with_template_path_with_dots mail = FunkyPathMailer.create_multipart_with_template_path_with_dots(@recipient) assert_equal 2, mail.parts.length - assert_equal 'text/plain', mail.parts[0].content_type - assert_equal 'utf-8', mail.parts[0].charset + assert mail.parts.any? {|part| part.content_type == "text/plain" && part.charset == "utf-8"} end def test_custom_content_type_attributes |