module Sidekiq::Job::Options::ClassMethods

Constants

ACCESSOR_MUTEX

Public Instance Methods

sidekiq_class_attribute(*attrs) click to toggle source
# File lib/sidekiq/job.rb, line 92
def sidekiq_class_attribute(*attrs)
  instance_reader = true
  instance_writer = true

  attrs.each do |name|
    synchronized_getter = "__synchronized_#{name}"

    singleton_class.instance_eval do
      undef_method(name) if method_defined?(name) || private_method_defined?(name)
    end

    define_singleton_method(synchronized_getter) { nil }
    singleton_class.class_eval do
      private(synchronized_getter)
    end

    define_singleton_method(name) { ACCESSOR_MUTEX.synchronize { send synchronized_getter } }

    ivar = "@#{name}"

    singleton_class.instance_eval do
      m = "#{name}="
      undef_method(m) if method_defined?(m) || private_method_defined?(m)
    end
    define_singleton_method(:"#{name}=") do |val|
      singleton_class.class_eval do
        ACCESSOR_MUTEX.synchronize do
          undef_method(synchronized_getter) if method_defined?(synchronized_getter) || private_method_defined?(synchronized_getter)
          define_method(synchronized_getter) { val }
        end
      end

      if singleton_class?
        class_eval do
          undef_method(name) if method_defined?(name) || private_method_defined?(name)
          define_method(name) do
            if instance_variable_defined? ivar
              instance_variable_get ivar
            else
              singleton_class.send name
            end
          end
        end
      end
      val
    end

    if instance_reader
      undef_method(name) if method_defined?(name) || private_method_defined?(name)
      define_method(name) do
        if instance_variable_defined?(ivar)
          instance_variable_get ivar
        else
          self.class.public_send name
        end
      end
    end

    if instance_writer
      m = "#{name}="
      undef_method(m) if method_defined?(m) || private_method_defined?(m)
      attr_writer name
    end
  end
end
sidekiq_options(opts = {}) click to toggle source

Allows customization for this type of Job. Legal options:

queue - name of queue to use for this job type, default *default*
retry - enable retries for this Job in case of error during execution,
   *true* to use the default or *Integer* count
backtrace - whether to save any error backtrace in the retry payload to display in web UI,
   can be true, false or an integer number of lines to save, default *false*

In practice, any option is allowed. This is the main mechanism to configure the options for a specific job.

# File lib/sidekiq/job.rb, line 71
def sidekiq_options(opts = {})
  # stringify 2 levels of keys
  opts = opts.to_h do |k, v|
    [k.to_s, (Hash === v) ? v.transform_keys(&:to_s) : v]
  end

  self.sidekiq_options_hash = get_sidekiq_options.merge(opts)
end
sidekiq_retries_exhausted(&block) click to toggle source
# File lib/sidekiq/job.rb, line 84
def sidekiq_retries_exhausted(&block)
  self.sidekiq_retries_exhausted_block = block
end
sidekiq_retry_in(&block) click to toggle source
# File lib/sidekiq/job.rb, line 80
def sidekiq_retry_in(&block)
  self.sidekiq_retry_in_block = block
end