module Rage::Deferred

def self.__backend

Other tags:
    Private: -
def self.__backend
  @__backend ||= Rage.config.deferred.backend
end

def self.__initialize

Other tags:
    Private: -
def self.__initialize
  __middleware_chain
  __load_tasks
end

def self.__load_tasks

Other tags:
    Private: -
def self.__load_tasks
  current_time = Time.now.to_i
  __backend.pending_tasks.each do |task_id, task_wrapper, publish_at|
    publish_in = publish_at - current_time if publish_at
    __queue.schedule(task_id, task_wrapper, publish_in:)
  rescue => e
    puts "ERROR: Failed to load deferred task #{task_id}: #{e.class} (#{e.message}). Removing task from the queue."
    __backend.remove(task_id)
  end
end

def self.__middleware_chain

Other tags:
    Private: -
def self.__middleware_chain
  @__middleware_chain ||= MiddlewareChain.new(
    enqueue_middleware: Rage.config.deferred.enqueue_middleware.objects,
    perform_middleware: Rage.config.deferred.perform_middleware.objects
  )
end

def self.__queue

Other tags:
    Private: -
def self.__queue
  @__queue ||= Rage::Deferred::Queue.new(__backend)
end

def self.wrap(instance, delay: nil, delay_until: nil)

Other tags:
    Example: Schedule an arbitrary method to be called in the background -

Parameters:
  • delay_until (Time, nil) -- the specific time when the task should be executed
  • delay (Integer, nil) -- the delay in seconds before the task is executed
  • instance (Object) -- the instance to wrap
def self.wrap(instance, delay: nil, delay_until: nil)
  Rage::Deferred::Proxy.new(instance, delay:, delay_until:)
end