Utility code (feel free to copy and paste it to your codebase) to convert your active records or any class methods in Ruby into background jobs.
Note: It is based on Sidekiq but easily adaptable to ActiveJob or similar implementations of background processing for ruby code.
Include ExecAsync
in your class:
class Order < ApplicationRecord
include ExecAsync
def self.notify_deliveries_for_today
# Send emails, push notifications, etc...
end
def ship_it(to)
# Send messages or communicate with an API...
end
def track_delivery
# Run a process that listen for ping signals...
end
end
order = Order.find(123)
# Execute the ship_in in bg
order.exec_async :shipt_it, to: "9703 Pilgrim Street Hagerstown, MD 21740"
# Schedule (or delay) the execution for two hours
order.exec_async_in 2.hours, :track_delivery
It supports class methods too:
Order.exec_async :notify_deliveries_for_today