Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

raise an error if no implicit mailer template could be found

  • Loading branch information...
commit 45b1045d16126e69ad5af395fa14d1291914a4d4 1 parent b046ea4
Damien Mathieu dmathieu authored
4 actionmailer/CHANGELOG.md
View
@@ -1,3 +1,7 @@
+## Rails 4.0.0 (unreleased) ##
+
+* Raise an `ActionView::MissingTemplate` exception when no implicit template could be found. *Damien Mathieu*
+
## Rails 3.2.5 (Jun 1, 2012) ##
* No changes.
22 actionmailer/lib/action_mailer/base.rb
View
@@ -184,6 +184,16 @@ module ActionMailer #:nodoc:
# and the second being a <tt>application/pdf</tt> with a Base64 encoded copy of the file.pdf book
# with the filename +free_book.pdf+.
#
+ # If you need to send attachments with no content, you need to create an empty view for it,
+ # or add an empty body parameter like this:
+ #
+ # class ApplicationMailer < ActionMailer::Base
+ # def welcome(recipient)
+ # attachments['free_book.pdf'] = File.read('path/to/file.pdf')
+ # mail(:to => recipient, :subject => "New account information", :body => "")
+ # end
+ # end
+ #
# = Inline Attachments
#
# You can also specify that a file should be displayed inline with other HTML. This is useful
@@ -598,8 +608,10 @@ def attachments
# end
# end
#
- # Will look for all templates at "app/views/notifier" with name "welcome". However, those
- # can be customized:
+ # Will look for all templates at "app/views/notifier" with name "welcome".
+ # If no welcome template exists, it will raise an ActionView::MissingTemplate error.
+ #
+ # However, those can be customized:
#
# mail(:template_path => 'notifications', :template_name => 'another')
#
@@ -733,7 +745,11 @@ def collect_responses_and_parts_order(headers) #:nodoc:
def each_template(paths, name, &block) #:nodoc:
templates = lookup_context.find_all(name, Array(paths))
- templates.uniq { |t| t.formats }.each(&block)
+ if templates.empty?
+ raise ActionView::MissingTemplate.new([paths], name, [paths], false, 'mailer')
+ else
+ templates.uniq { |t| t.formats }.each(&block)
+ end
end
def create_parts_from_responses(m, responses) #:nodoc:
7 actionmailer/test/base_test.rb
View
@@ -433,6 +433,13 @@ def teardown
assert_equal("TEXT Implicit Multipart", mail.text_part.body.decoded)
end
+ test "should raise if missing template in implicit render" do
+ assert_raises ActionView::MissingTemplate do
+ BaseMailer.implicit_different_template('missing_template').deliver
+ end
+ assert_equal(0, BaseMailer.deliveries.length)
+ end
+
test "you can specify a different template for explicit render" do
mail = BaseMailer.explicit_different_template('explicit_multipart_templates').deliver
assert_equal("HTML Explicit Multipart Templates", mail.html_part.body.decoded)
0  actionmailer/test/fixtures/base_mailer/attachment_with_hash.html.erb
View
No changes.
0  actionmailer/test/fixtures/base_mailer/attachment_with_hash_default_encoding.html.erb
View
No changes.
0  actionmailer/test/fixtures/base_mailer/welcome_with_headers.html.erb
View
No changes.
0  actionmailer/test/fixtures/base_test/after_filter_mailer/welcome.html.erb
View
No changes.
0  actionmailer/test/fixtures/base_test/before_filter_mailer/welcome.html.erb
View
No changes.
0  actionmailer/test/fixtures/base_test/default_inline_attachment_mailer/welcome.html.erb
View
No changes.
0  actionmailer/test/fixtures/mail_delivery_test/delivery_mailer/welcome.html.erb
View
No changes.
0  actionmailer/test/fixtures/proc_mailer/welcome.html.erb
View
No changes.
Please sign in to comment.
Something went wrong with that request. Please try again.