Skip to content

Commit

Permalink
use deliver_now if possible in preparation for Rails 5
Browse files Browse the repository at this point in the history
  • Loading branch information
barelyknown committed Dec 1, 2014
1 parent e9d96ea commit 6db0f47
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 1 deletion.
14 changes: 13 additions & 1 deletion lib/devise/async/backend/base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,26 @@ def self.enqueue(*args)
def perform(method, resource_class, resource_id, *args)
resource = resource_class.constantize.to_adapter.get!(resource_id)
args[-1] = args.last.symbolize_keys if args.last.is_a?(Hash)
mailer_class(resource).send(method, resource, *args).deliver
mailer = mailer_class(resource).send(method, resource, *args)
mailer.send(deliver_method(mailer))
end

private

def mailer_class(resource = nil)
@mailer_class ||= resource.try(:devise_mailer) || Devise.mailer
end

# Use #deliver_now if supported, otherwise falls back to #deliver.
# Added in preparation for the planned removal of #deliver in Rails 5.
def deliver_method(mailer)
if mailer.respond_to?(:deliver_now)
:deliver_now
else
:deliver
end
end

end
end
end
Expand Down
21 changes: 21 additions & 0 deletions test/devise/async/backend/base_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,27 @@ module Backend
Base.new.perform(:confirmation_instructions, "UserWithMailer", user.id, {})
end

describe "the delivery method" do
before do
Devise.mailer = "MyMailer"
@user = create_user
end

it "uses #deliver_now when possible" do
mailer_instance = mock(:deliver_now => true)

MyMailer.expects(:confirmation_instructions).once.returns(mailer_instance)
Base.new.perform(:confirmation_instructions, "User", @user.id, {})
end

it "uses #deliver otherwise" do
mailer_instance = mock(:deliver => true)

MyMailer.expects(:confirmation_instructions).once.returns(mailer_instance)
Base.new.perform(:confirmation_instructions, "User", @user.id, {})
end
end

after do
Devise.mailer = "Devise::Mailer"
end
Expand Down

0 comments on commit 6db0f47

Please sign in to comment.