Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Update ActionMailer so it treats ActionView the same way that ActionC…

…ontroller does. Closes #10244 [rick]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@8212 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
commit bd5ed651105663cb4bc5acd86ad8bdf48251d0fe 1 parent 3d67860
@technoweenie technoweenie authored
View
5 actionmailer/CHANGELOG
@@ -1,5 +1,10 @@
*SVN*
+* Update ActionMailer so it treats ActionView the same way that ActionController does. Closes #10244 [rick]
+
+ * Pass the template_root as an array as ActionView's view_path
+ * Request templates with the "#{mailer_name}/#{action}" as opposed to just "#{action}"
+
* Fixed that partials would be broken when using text.plain.erb as the extension #10130 [java]
* Update README to use new smtp settings configuration API. Closes #10060 [psq]
View
35 actionmailer/lib/action_mailer/base.rb
@@ -298,11 +298,6 @@ class Base
# This defaults to the value for the +default_implicit_parts_order+.
adv_attr_accessor :implicit_parts_order
- # Override the mailer name, which defaults to an inflected version of the
- # mailer's class name. If you want to use a template in a non-standard
- # location, you can use this to specify that location.
- adv_attr_accessor :mailer_name
-
# Defaults to "1.0", but may be explicitly given if needed.
adv_attr_accessor :mime_version
@@ -322,10 +317,35 @@ class Base
# have multiple mailer methods share the same template.
adv_attr_accessor :template
+ # Override the mailer name, which defaults to an inflected version of the
+ # mailer's class name. If you want to use a template in a non-standard
+ # location, you can use this to specify that location.
+ def mailer_name(value = nil)
+ if value
+ self.mailer_name = value
+ else
+ self.class.mailer_name
+ end
+ end
+
+ def mailer_name=(value)
+ self.class.mailer_name = value
+ end
+
# The mail object instance referenced by this mailer.
attr_reader :mail
class << self
+ attr_writer :mailer_name
+
+ def mailer_name
+ @mailer_name ||= name.underscore
+ end
+
+ # for ActionView compatibility
+ alias_method :controller_name, :mailer_name
+ alias_method :controller_path, :mailer_name
+
def method_missing(method_symbol, *parameters)#:nodoc:
case method_symbol.id2name
when /^create_([_a-z]\w*)/ then new($1, *parameters).mail
@@ -476,6 +496,9 @@ def render_message(method_name, body)
def render(opts)
body = opts.delete(:body)
+ if opts[:file] && opts[:file] !~ /\//
+ opts[:file] = "#{mailer_name}/#{opts[:file]}"
+ end
initialize_template_class(body).render(opts)
end
@@ -484,7 +507,7 @@ def template_path
end
def initialize_template_class(assigns)
- ActionView::Base.new(template_path, assigns, self)
+ ActionView::Base.new([template_root], assigns, self)
end
def sort_parts(parts, order = [])
View
0  ...t/fixtures/test_mailer/subtemplate.text.plain.erb → .../fixtures/test_mailer/_subtemplate.text.plain.erb
File renamed without changes
View
2  actionmailer/test/fixtures/test_mailer/included_subtemplate.text.plain.erb
@@ -1 +1 @@
-Hey Ho, <%= render "subtemplate" %>
+Hey Ho, <%= render :partial => "subtemplate" %>
View
13 actionmailer/test/mail_render_test.rb
@@ -26,6 +26,13 @@ def included_subtemplate(recipient)
subject "Including another template in the one being rendered"
from "tester@example.com"
end
+
+ def included_old_subtemplate(recipient)
+ recipients recipient
+ subject "Including another template in the one being rendered"
+ from "tester@example.com"
+ body render(:inline => "Hello, <%= render \"subtemplate\" %>", :body => { :world => "Earth" })
+ end
def initialize_defaults(method_name)
super
@@ -81,6 +88,12 @@ def test_included_subtemplate
mail = RenderMailer.deliver_included_subtemplate(@recipient)
assert_equal "Hey Ho, let's go!", mail.body.strip
end
+
+ def test_deprecated_old_subtemplate
+ assert_raises ActionView::ActionViewError do
+ RenderMailer.deliver_included_old_subtemplate(@recipient)
+ end
+ end
end
class FirstSecondHelperTest < Test::Unit::TestCase
Please sign in to comment.
Something went wrong with that request. Please try again.