module Que::ActiveJob::JobExtensions

A module that devs can include into their ApplicationJob classes to get access to Que-like job behavior.

Public Instance Methods

perform(*args) click to toggle source
# File lib/que/active_job/extensions.rb, line 15
def perform(*args)
  args, kwargs = Que.split_out_ruby2_keywords(args)

  Que.internal_log(:active_job_perform, self) do
    {args: args, kwargs: kwargs}
  end

  _run(
    args: Que.recursively_freeze(
      que_filter_args(
        args.map { |a| a.is_a?(Hash) ? a.deep_symbolize_keys : a }
      )
    ),
    kwargs: Que.recursively_freeze(
      que_filter_args(
        kwargs.deep_symbolize_keys,
      )
    ),
  )
end
run(*args) click to toggle source
# File lib/que/active_job/extensions.rb, line 10
def run(*args)
  raise Error, "Job class #{self.class} didn't define a run() method!"
end

Private Instance Methods

que_filter_args(thing) click to toggle source

Filter out :_aj_symbol_keys constructs so that keywords work as expected.

# File lib/que/active_job/extensions.rb, line 48
def que_filter_args(thing)
  case thing
  when Array
    thing.map { |t| que_filter_args(t) }
  when Hash
    thing.each_with_object({}) do |(k, v), hash|
      hash[k] = que_filter_args(v) unless k == :_aj_symbol_keys
    end
  else
    thing
  end
end
que_target() click to toggle source

Have helper methods like ‘destroy` and `retry_in` delegate to the actual job object. If the current job is being run through an ActiveJob adapter other than Que’s, this will return nil, which is fine.

# File lib/que/active_job/extensions.rb, line 42
def que_target
  Thread.current[:que_current_job]
end