Utility code (feel free to paste it into your codebase) to convert your active records or any ruby object into Sidekiq background jobs.
Note: It is based on Sidekiq but easily adaptable to ActiveJob or similar implementations of background processing for ruby.
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
# Customize the sidekiq job
order.exec_async_in 2.hours, :track_delivery, queue: :low_priorityIt also supports class methods:
Order.exec_async :notify_deliveries_for_today