Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #8477 from senny/backport_8448
Backport #8450, the return value from mailer methods is not relevant.
  • Loading branch information
rafaelfranca committed Dec 10, 2012
2 parents a3c3cfd + 9b72c36 commit 86e1f45
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 14 deletions.
24 changes: 21 additions & 3 deletions actionmailer/CHANGELOG.md
@@ -1,9 +1,27 @@
## Rails 3.2.10 (unreleased) ##

* The return value from mailer methods is no longer relevant. This fixes a bug,
which was introduced with 3.2.9.
Backport #8450
Fix #8448

class ExampleMailer < ActionMailer::Base
# in 3.2.9, returning a falsy value from a mailer action, prevented the email from beeing sent.
# With 3.2.10 the return value is no longer relevant. If you call mail() the email will be sent.
def nil_returning_mailer_action
mail()
nil
end
end

*Yves Senn*

## Rails 3.2.9 (Nov 12, 2012) ##

* Do not render views when mail() isn't called.
Fix #7761
* Do not render views when mail() isn't called.
Fix #7761

*Yves Senn*
*Yves Senn*


## Rails 3.2.8 (Aug 9, 2012) ##
Expand Down
22 changes: 11 additions & 11 deletions actionmailer/lib/action_mailer/base.rb
Expand Up @@ -123,8 +123,8 @@ module ActionMailer #:nodoc:
#
# <%= users_url(:host => "example.com") %>
#
# You should use the <tt>named_route_url</tt> style (which generates absolute URLs) and avoid using the
# <tt>named_route_path</tt> style (which generates relative URLs), since clients reading the mail will
# You should use the <tt>named_route_url</tt> style (which generates absolute URLs) and avoid using the
# <tt>named_route_path</tt> style (which generates relative URLs), since clients reading the mail will
# have no concept of a current URL from which to determine a relative path.
#
# It is also possible to set a default host that will be used in all mailers by setting the <tt>:host</tt>
Expand All @@ -133,7 +133,7 @@ module ActionMailer #:nodoc:
# config.action_mailer.default_url_options = { :host => "example.com" }
#
# When you decide to set a default <tt>:host</tt> for your mailers, then you need to make sure to use the
# <tt>:only_path => false</tt> option when using <tt>url_for</tt>. Since the <tt>url_for</tt> view helper
# <tt>:only_path => false</tt> option when using <tt>url_for</tt>. Since the <tt>url_for</tt> view helper
# will generate relative URLs by default when a <tt>:host</tt> option isn't explicitly provided, passing
# <tt>:only_path => false</tt> will ensure that absolute URLs are generated.
#
Expand All @@ -150,8 +150,8 @@ module ActionMailer #:nodoc:
#
# = Multipart Emails
#
# Multipart messages can also be used implicitly because Action Mailer will automatically detect and use
# multipart templates, where each template is named after the name of the action, followed by the content
# Multipart messages can also be used implicitly because Action Mailer will automatically detect and use
# multipart templates, where each template is named after the name of the action, followed by the content
# type. Each such detected template will be added as a separate part to the message.
#
# For example, if the following templates exist:
Expand Down Expand Up @@ -448,17 +448,16 @@ def method_missing(method, *args) #:nodoc:
# method, for instance).
def initialize(method_name=nil, *args)
super()
@mail_was_called = false
@_message = Mail.new
process(method_name, *args) if method_name
end

def process(*args) #:nodoc:
lookup_context.skip_default_locale!

generated_mail = super
unless generated_mail
@_message = NullMail.new
end
super
@_message = NullMail.new unless @mail_was_called
end

class NullMail #:nodoc:
Expand Down Expand Up @@ -616,8 +615,9 @@ def attachments
# end
#
def mail(headers={}, &block)
# Guard flag to prevent both the old and the new API from firing
# Should be removed when old API is removed
# Guard flag to prevent both the old and the new API from firing.
# On master this flag was renamed to `@_mail_was_called`.
# On master there is only one API and this flag is no longer used as a guard.
@mail_was_called = true
m = @_message

Expand Down
6 changes: 6 additions & 0 deletions actionmailer/test/base_test.rb
Expand Up @@ -477,6 +477,12 @@ def teardown
mail.deliver
end

test 'the return value of mailer methods is not relevant' do
mail = BaseMailer.with_nil_as_return_value
assert_equal('Welcome', mail.body.to_s.strip)
mail.deliver
end

# Before and After hooks

class MyObserver
Expand Down
5 changes: 5 additions & 0 deletions actionmailer/test/mailers/base_mailer.rb
Expand Up @@ -118,4 +118,9 @@ def email_with_translations

def without_mail_call
end

def with_nil_as_return_value(hash = {})
mail(:template_name => "welcome")
nil
end
end

0 comments on commit 86e1f45

Please sign in to comment.