class Sidekiq::CurrentAttributes::Load

Public Class Methods

new(cattrs) click to toggle source
# File lib/sidekiq/middleware/current_attributes.rb, line 61
def initialize(cattrs)
  @cattrs = cattrs
end

Public Instance Methods

call(_, job, _, &block) click to toggle source
# File lib/sidekiq/middleware/current_attributes.rb, line 65
def call(_, job, _, &block)
  klass_attrs = {}

  @cattrs.each do |(key, strklass)|
    next unless job.has_key?(key)

    klass_attrs[strklass.constantize] = job[key]
  end

  wrap(klass_attrs.to_a, &block)
end

Private Instance Methods

wrap(klass_attrs, &block) click to toggle source
# File lib/sidekiq/middleware/current_attributes.rb, line 79
def wrap(klass_attrs, &block)
  klass, attrs = klass_attrs.shift
  return block.call unless klass

  retried = false

  begin
    klass.set(attrs) do
      wrap(klass_attrs, &block)
    end
  rescue NoMethodError
    raise if retried

    # It is possible that the `CurrentAttributes` definition
    # was changed before the job started processing.
    attrs = attrs.select { |attr| klass.respond_to?(attr) }
    retried = true
    retry
  end
end