class Aservice::Callback

Sidekiq job callbacks

Public Class Methods

add(jid, class_name, method, args) click to toggle source
# File lib/aservice/callback.rb, line 7
def add(jid, class_name, method, args)
  opt = {
    'class' => class_name,
    'method' => method,
    'args' => args
  }
  Sidekiq.redis do |conn|
    conn.multi do
      conn.rpush(key(jid), opt.to_json)
      conn.expire(key(jid), Aservice::Config.callbacks_expiration)
    end
  end
end
failure(job) click to toggle source
# File lib/aservice/callback.rb, line 27
def failure(job)
  clear_stack(job['jid'])
end
success(job) click to toggle source
# File lib/aservice/callback.rb, line 21
def success(job)
  while (opt = pop_next(job['jid']))
    execute_service(opt['class'], opt['method'], opt['args'])
  end
end

Private Class Methods

clear_stack(jid) click to toggle source
# File lib/aservice/callback.rb, line 46
def clear_stack(jid)
  Sidekiq.redis do |conn|
    conn.del(key(jid))
  end
end
execute_service(class_name, method, args) click to toggle source
# File lib/aservice/callback.rb, line 33
def execute_service(class_name, method, args)
  Kernel.const_get(class_name).send(method, *args)
end
key(jid) click to toggle source
# File lib/aservice/callback.rb, line 52
def key(jid)
  "#{Aservice::Config.redis_prefix}_#{jid}"
end
pop_next(jid) click to toggle source
# File lib/aservice/callback.rb, line 37
def pop_next(jid)
  opt = Sidekiq.redis do |conn|
    conn.lpop(key(jid))
  end
  return false if opt.nil?

  JSON.parse(opt)
end