diff options
author | Mikel Lindsaar <raasdnil@gmail.com> | 2010-01-19 21:05:37 +1100 |
---|---|---|
committer | Mikel Lindsaar <raasdnil@gmail.com> | 2010-01-19 21:05:37 +1100 |
commit | 2107921000f4a186fed36e676d1ac089c8be1f99 (patch) | |
tree | 42f2188f058f8401d57f0d4c72063689a93e0419 /actionmailer | |
parent | ccb7d9def3c20037c9ed5989d8cae1ed68763f4f (diff) | |
parent | ed8501ef16fb2f5e4bd4d987740f5e5f62978400 (diff) | |
download | rails-2107921000f4a186fed36e676d1ac089c8be1f99.tar.gz rails-2107921000f4a186fed36e676d1ac089c8be1f99.tar.bz2 rails-2107921000f4a186fed36e676d1ac089c8be1f99.zip |
Merge branch 'master' of git://github.com/rails/rails into rails
Diffstat (limited to 'actionmailer')
-rw-r--r-- | actionmailer/lib/action_mailer/base.rb | 43 | ||||
-rw-r--r-- | actionmailer/lib/action_mailer/deprecated_body.rb | 38 | ||||
-rw-r--r-- | actionmailer/test/mail_service_test.rb | 10 |
3 files changed, 58 insertions, 33 deletions
diff --git a/actionmailer/lib/action_mailer/base.rb b/actionmailer/lib/action_mailer/base.rb index c1cce73303..e0a99fa00c 100644 --- a/actionmailer/lib/action_mailer/base.rb +++ b/actionmailer/lib/action_mailer/base.rb @@ -23,8 +23,7 @@ module ActionMailer #:nodoc: # bcc ["bcc@example.com", "Order Watcher <watcher@example.com>"] # from "system@example.com" # subject "New account information" - # - # @account = recipient + # body :account => recipient # end # end # @@ -36,7 +35,7 @@ module ActionMailer #:nodoc: # * <tt>cc</tt> - Takes one or more email addresses. These addresses will receive a carbon copy of your email. Sets the <tt>Cc:</tt> header. # * <tt>bcc</tt> - Takes one or more email addresses. These addresses will receive a blind carbon copy of your email. Sets the <tt>Bcc:</tt> header. # * <tt>reply_to</tt> - Takes one or more email addresses. These addresses will be listed as the default recipients when replying to your email. Sets the <tt>Reply-To:</tt> header. - # * <tt>sent_on</tt> - The date on which the message was sent. If not set, the header wil be set by the delivery agent. + # * <tt>sent_on</tt> - The date on which the message was sent. If not set, the header will be set by the delivery agent. # * <tt>content_type</tt> - Specify the content type of the message. Defaults to <tt>text/plain</tt>. # * <tt>headers</tt> - Specify additional headers to be set for the message, e.g. <tt>headers 'X-Mail-Count' => 107370</tt>. # @@ -144,12 +143,13 @@ module ActionMailer #:nodoc: # subject "New account information" # from "system@example.com" # content_type "multipart/alternative" + # body :account => recipient # # part :content_type => "text/html", - # :body => render_message("signup-as-html", :account => recipient) + # :data => render_message("signup-as-html") # # part "text/plain" do |p| - # p.body = render_message("signup-as-plain", :account => recipient) + # p.body = render_message("signup-as-plain") # p.content_transfer_encoding = "base64" # end # end @@ -492,11 +492,13 @@ module ActionMailer #:nodoc: # body, headers, etc.) can be set on it. def part(params) params = {:content_type => params} if String === params + if custom_headers = params.delete(:headers) ActiveSupport::Deprecation.warn('Passing custom headers with :headers => {} is deprecated. ' << 'Please just pass in custom headers directly.', caller[0,10]) params.merge!(custom_headers) end + part = Mail::Part.new(params) yield part if block_given? @parts << part @@ -514,6 +516,20 @@ module ActionMailer #:nodoc: part(params, &block) end + # Allow you to set assigns for your template: + # + # body :greetings => "Hi" + # + # Will make @greetings available in the template to be rendered. + def body(object=nil) + returning(super) do # Run deprecation hooks + if object.is_a?(Hash) + @assigns_set = true + object.each { |k, v| instance_variable_set(:"@#{k}", v) } + end + end + end + # Instantiate a new mailer object. If +method_name+ is not +nil+, the mailer # will be initialized according to the named method. If not, the mailer will # remain uninitialized (useful when you only need to invoke the "receive" @@ -549,6 +565,23 @@ module ActionMailer #:nodoc: private + # Render a message but does not set it as mail body. Useful for rendering + # data for part and attachments. + # + # Examples: + # + # render_message "special_message" + # render_message :template => "special_message" + # render_message :inline => "<%= 'Hi!' %>" + def render_message(object) + case object + when String + render_to_body(:template => object) + else + render_to_body(object) + end + end + # Set up the default values for the various instance variables of this # mailer. Subclasses may override this method to provide different # defaults. diff --git a/actionmailer/lib/action_mailer/deprecated_body.rb b/actionmailer/lib/action_mailer/deprecated_body.rb index 20b0989a85..5379b33a54 100644 --- a/actionmailer/lib/action_mailer/deprecated_body.rb +++ b/actionmailer/lib/action_mailer/deprecated_body.rb @@ -1,15 +1,13 @@ module ActionMailer # TODO Remove this module all together in a next release. Ensure that super - # hooks in ActionMailer::Base are removed as well. + # hooks and @assigns_set in ActionMailer::Base are removed as well. module DeprecatedBody - def self.included(base) - base.class_eval do - # Define the body of the message. This is either a Hash (in which case it - # specifies the variables to pass to the template when it is rendered), - # or a string, in which case it specifies the actual text of the message. - adv_attr_accessor :body - end - end + extend ActionMailer::AdvAttrAccessor + + # Define the body of the message. This is either a Hash (in which case it + # specifies the variables to pass to the template when it is rendered), + # or a string, in which case it specifies the actual text of the message. + adv_attr_accessor :body def initialize_defaults(method_name) @body ||= {} @@ -18,32 +16,28 @@ module ActionMailer def attachment(params, &block) if params[:body] ActiveSupport::Deprecation.warn('attachment :body => "string" is deprecated. To set the body of an attachment ' << - 'please use :data instead, like attachment :data => "string".', caller[0,10]) + 'please use :data instead, like attachment :data => "string"', caller[0,10]) params[:data] = params.delete(:body) end end def create_parts - if String === @body - ActiveSupport::Deprecation.warn('body is deprecated. To set the body with a text ' << - 'call render(:text => "body").', caller[0,10]) + if String === @body && !defined?(@assigns_set) + ActiveSupport::Deprecation.warn('body(String) is deprecated. To set the body with a text ' << + 'call render(:text => "body")', caller[0,10]) self.response_body = @body - elsif @body.is_a?(Hash) && !@body.empty? - ActiveSupport::Deprecation.warn('body is deprecated. To set assigns simply ' << - 'use instance variables', caller[0,10]) - @body.each { |k, v| instance_variable_set(:"@#{k}", v) } + elsif self.response_body + @body = self.response_body end end def render(*args) options = args.last.is_a?(Hash) ? args.last : {} if options[:body] - ActiveSupport::Deprecation.warn(':body is deprecated. To set assigns simply ' << - 'use instance variables', caller[0,1]) + ActiveSupport::Deprecation.warn(':body in render deprecated. Please call body ' << + 'with a hash instead', caller[0,1]) - options.delete(:body).each do |k, v| - instance_variable_set(:"@#{k}", v) - end + body options.delete(:body) end super diff --git a/actionmailer/test/mail_service_test.rb b/actionmailer/test/mail_service_test.rb index e53d8a38ef..17e7992e29 100644 --- a/actionmailer/test/mail_service_test.rb +++ b/actionmailer/test/mail_service_test.rb @@ -120,11 +120,11 @@ class TestMailer < ActionMailer::Base content_type "multipart/alternative" part "text/plain" do |p| - p.body = "blah" + p.body = render_message(:text => "blah") end part "text/html" do |p| - p.body = "<b>blah</b>" + p.body = render_message(:inline => "<%= content_tag(:b, 'blah') %>") end end @@ -301,7 +301,6 @@ class TestMailer < ActionMailer::Base render :text => "testing" end - # This tests body calls accepeting a hash, which is deprecated. def body_ivar(recipient) recipients recipient subject "Body as a local variable" @@ -1075,7 +1074,7 @@ EOF def test_return_path_with_create mail = TestMailer.create_return_path - assert_equal "another@somewhere.test", mail.return_path + assert_equal ["another@somewhere.test"], mail.return_path end def test_return_path_with_deliver @@ -1086,8 +1085,7 @@ EOF end def test_body_is_stored_as_an_ivar - mail = nil - ActiveSupport::Deprecation.silence { mail = TestMailer.create_body_ivar(@recipient) } + mail = TestMailer.create_body_ivar(@recipient) assert_equal "body: foo\nbar: baz", mail.body.to_s end |