Skip to content

Commit

Permalink
Merge pull request #60 from barelyknown/use_deliver_now_if_possible
Browse files Browse the repository at this point in the history
use deliver_now if possible in preparation for Rails 5
  • Loading branch information
Sebastian Oelke committed Apr 30, 2015
2 parents b7ca260 + e6079a6 commit 4374aac
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 2 deletions.
14 changes: 13 additions & 1 deletion lib/devise/async/backend/base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ def perform(method, resource_class, resource_id, *args)
I18n.with_locale locale_from_args(args) do
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
end

Expand All @@ -31,6 +32,17 @@ def locale_from_args(args)
args_last = args.last
args_last.delete('locale') if args_last.is_a?(Hash)
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
25 changes: 24 additions & 1 deletion test/devise/async/backend/base_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,31 @@ module Backend
Base.new.perform(:confirmation_instructions, "UserWithMailer", user.id, {})
end

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
end
end
end
end

0 comments on commit 4374aac

Please sign in to comment.