Skip to content

Commit

Permalink
allow perform deliveries to be set within mailer action
Browse files Browse the repository at this point in the history
  • Loading branch information
Aditya Sanghi committed Jul 30, 2012
1 parent 4ac81de commit 7c8424e
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 3 deletions.
2 changes: 1 addition & 1 deletion actionmailer/lib/action_mailer/base.rb
Expand Up @@ -684,7 +684,7 @@ def mail(headers={}, &block)
m.charset = charset = headers[:charset]

# Set configure delivery behavior
wrap_delivery_behavior!(headers.delete(:delivery_method))
wrap_delivery_behavior!(headers.delete(:delivery_method),headers.delete(:perform_deliveries))

# Assign all headers except parts_order, content_type and body
assignable = headers.except(:parts_order, :content_type, :body, :template_name, :template_path)
Expand Down
4 changes: 2 additions & 2 deletions actionmailer/lib/action_mailer/delivery_methods.rb
Expand Up @@ -57,7 +57,7 @@ def add_delivery_method(symbol, klass, default_options={})
self.delivery_methods = delivery_methods.merge(symbol.to_sym => klass).freeze
end

def wrap_delivery_behavior(mail, method=nil) #:nodoc:
def wrap_delivery_behavior(mail, method=nil, perform_deliveries_header=nil) #:nodoc:
method ||= self.delivery_method
mail.delivery_handler = self

Expand All @@ -74,7 +74,7 @@ def wrap_delivery_behavior(mail, method=nil) #:nodoc:
mail.delivery_method(method)
end

mail.perform_deliveries = perform_deliveries
mail.perform_deliveries = perform_deliveries && (perform_deliveries_header.nil? || perform_deliveries_header)
mail.raise_delivery_errors = raise_delivery_errors
end
end
Expand Down
13 changes: 13 additions & 0 deletions actionmailer/test/delivery_methods_test.rb
Expand Up @@ -82,6 +82,7 @@ class DeliveryMailer < ActionMailer::Base
def welcome(hash={})
mail(DEFAULT_HEADERS.merge(hash))
end

end

def setup
Expand Down Expand Up @@ -129,6 +130,18 @@ def teardown
DeliveryMailer.welcome.deliver
end

test "does not perform deliveries if customized per instance" do
DeliveryMailer.perform_deliveries = true
m = DeliveryMailer.welcome(:perform_deliveries => false)
assert_equal(false,m.perform_deliveries)
end

test "does not perform deliveries if globally set to off but instance instructs delivery" do
DeliveryMailer.perform_deliveries = false
m = DeliveryMailer.welcome(:perform_deliveries => true)
assert_equal(false,m.perform_deliveries)
end

test "does not append the deliveries collection if told not to perform the delivery" do
DeliveryMailer.perform_deliveries = false
DeliveryMailer.deliveries.clear
Expand Down

0 comments on commit 7c8424e

Please sign in to comment.