Interactor::Async
Extends the Interactor gem API with a single method: call_later.
Use this method whenever you want to offload an interactor call to a background job.
Installation
Add this line to your application's Gemfile:
gem 'interactor-async'And then execute:
$ bundle
Or install it yourself as:
$ gem install interactor-async
Example
class User::SendOnboardingMail
include ::Interactor
def call
UserMailer.with(user: context.user).onboarding.deliver_now
end
end
# Send the mail now
User::SendOnboardingMail.call(user: user)
# Send the mail later
User::SendOnboardingMail.call_later(user: user)Usage
The gem will work out-of-the-box with any app that uses Active Job. Just replace any standard interactor call with call_later to execute it asynchronously.
Configuration
An internal job is used to wrap the interactor call whenever call_later is invoked. If you want more control over the job implementation, or if you use another framework to handle background jobs, you can configure a custom job wrapper class:
Interactor::Async.configure do
config.job_wrapper = CustomJobWrapper
endThe configured class must implement the perform method, which is invoked every time call_later is called on an interactor. It takes two arguments:
-
name— the interactor class name (stringified) -
*args— all arguments passed tocall_later
Caveats
- All arguments to
call_latermust be serializable. - The
call_latermethod falls back to the standardcallmethod if the project does not use Active Job and no custom job wrapper is configured.
License
The gem is available as open source under the terms of the MIT License.