diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2008-09-09 17:25:09 -0500 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2008-09-09 17:25:09 -0500 |
commit | 6228220c9b8a3bb32f8617ad2d963dabc965376e (patch) | |
tree | cecf4f2ef0fd7c2747826fd22c56ba8f596ed1c4 /actionmailer/lib/action_mailer | |
parent | 36c6aa01ee0a7aee5b0510a8e649c44de318b060 (diff) | |
download | rails-6228220c9b8a3bb32f8617ad2d963dabc965376e.tar.gz rails-6228220c9b8a3bb32f8617ad2d963dabc965376e.tar.bz2 rails-6228220c9b8a3bb32f8617ad2d963dabc965376e.zip |
Revert "Revert "Add layout functionality to mailers.""
This reverts commit 36c6aa01ee0a7aee5b0510a8e649c44de318b060.
Diffstat (limited to 'actionmailer/lib/action_mailer')
-rw-r--r-- | actionmailer/lib/action_mailer/base.rb | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/actionmailer/lib/action_mailer/base.rb b/actionmailer/lib/action_mailer/base.rb index 5b3c560390..96e514e0db 100644 --- a/actionmailer/lib/action_mailer/base.rb +++ b/actionmailer/lib/action_mailer/base.rb @@ -246,7 +246,10 @@ module ActionMailer #:nodoc: # +implicit_parts_order+. class Base include AdvAttrAccessor, PartContainer - include ActionController::UrlWriter if Object.const_defined?(:ActionController) + if Object.const_defined?(:ActionController) + include ActionController::UrlWriter + include ActionController::Layout + end private_class_method :new #:nodoc: @@ -362,6 +365,7 @@ module ActionMailer #:nodoc: # The mail object instance referenced by this mailer. attr_reader :mail + attr_reader :template_name, :default_template_name, :action_name class << self attr_writer :mailer_name @@ -530,6 +534,7 @@ module ActionMailer #:nodoc: @content_type ||= @@default_content_type.dup @implicit_parts_order ||= @@default_implicit_parts_order.dup @template ||= method_name + @default_template_name = @action_name = @template @mailer_name ||= self.class.name.underscore @parts ||= [] @headers ||= {} @@ -546,7 +551,22 @@ module ActionMailer #:nodoc: if opts[:file] && (opts[:file] !~ /\// && !opts[:file].respond_to?(:render)) opts[:file] = "#{mailer_name}/#{opts[:file]}" end - initialize_template_class(body).render(opts) + + begin + old_template, @template = @template, initialize_template_class(body) + layout = respond_to?(:pick_layout, true) ? pick_layout(opts) : false + @template.render(opts.merge(:layout => layout)) + ensure + @template = old_template + end + end + + def default_template_format + :html + end + + def candidate_for_layout?(options) + !@template.send(:_exempt_from_layout?, default_template_name) end def template_root |