Skip to content

Commit 7e0cf56

Browse files
committed
Support Mailer.deliver_foo(*args) as a synonym for Mailer.foo(*args).deliver.
This makes it easy to write e.g. `Mailer.expects(:deliver_foo)` when testing code that calls the mailer.
1 parent aa8918a commit 7e0cf56

File tree

3 files changed

+15
-0
lines changed

3 files changed

+15
-0
lines changed

actionmailer/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
## Rails 4.0.0 (unreleased) ##
22

3+
* Support `Mailer.deliver_foo(*args)` as a synonym for
4+
`Mailer.foo(*args).deliver`. This makes it easy to write e.g.
5+
`Mailer.expects(:deliver_foo)` when testing code that calls
6+
the mailer. *Jon Leighton*
7+
38
* Allow delivery method options to be set per mail instance *Aditya Sanghi*
49

510
If your smtp delivery settings are dynamic,

actionmailer/lib/action_mailer/base.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ module ActionMailer
142142
# for delivery later:
143143
#
144144
# Notifier.welcome(david).deliver # sends the email
145+
# Notifier.deliver_welcome(david) # synonym for the former
145146
# mail = Notifier.welcome(david) # => a Mail::Message object
146147
# mail.deliver # sends the email
147148
#
@@ -487,6 +488,8 @@ def set_payload_for_mail(payload, mail) #:nodoc:
487488
def method_missing(method_name, *args)
488489
if action_methods.include?(method_name.to_s)
489490
QueuedMessage.new(queue, self, method_name, *args)
491+
elsif method_name.to_s =~ /^deliver_(.+)$/ && action_methods.include?($1)
492+
public_send($1, *args).deliver
490493
else
491494
super
492495
end

actionmailer/test/base_test.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -662,6 +662,13 @@ def welcome
662662
assert_equal ["[email protected]"], DefaultFromMailer.welcome.from
663663
end
664664

665+
test "Mailer.deliver_welcome calls Mailer.welcome.deliver" do
666+
BaseMailer.deliveries.clear
667+
BaseMailer.deliver_welcome(subject: 'omg')
668+
assert_equal 1, BaseMailer.deliveries.length
669+
assert_equal 'omg', BaseMailer.deliveries.first.subject
670+
end
671+
665672
protected
666673

667674
# Execute the block setting the given values and restoring old values after

0 commit comments

Comments
 (0)