module BoyBand::AsyncClassMethods

Public Instance Methods

perform_action(settings) click to toggle source
# File lib/boy_band.rb, line 487
def perform_action(settings)
  obj = self
  if settings['id']
    obj = Worker.find_record(obj, settings['id'].to_s)
  end
  if !obj
    # record not found so there's nothing to do on it
    # TODO: probably log this somewhere so we don't lose it..
    Rails.logger.warn "expected record not found: #{self.to_s}:#{settings['id']}"
  elsif obj.respond_to?(settings['method'])
    obj.send(settings['method'], *settings['arguments'])
  else
    id = settings['id'] ? "#{settings['id']}:" : ""
    raise "method not found: #{self.to_s}:#{id}#{settings['method']}"
  end
end
schedule(method, *args) click to toggle source
# File lib/boy_band.rb, line 449
def schedule(method, *args)
  return nil unless method
  settings = {
    'method' => method,
    'scheduled' => self.scheduled_stamp,
    'arguments' => args
  }
  schedule_for('default', method, *args)
end
schedule_for(queue, method, *args) click to toggle source
# File lib/boy_band.rb, line 459
def schedule_for(queue, method, *args)
  return nil unless method
  settings = {
    'method' => method,
    'scheduled' => self.scheduled_stamp,
    'arguments' => args
  }
  Worker.schedule_for(queue, self, :perform_action, settings)
end
schedule_once(method, *args) click to toggle source
# File lib/boy_band.rb, line 469
def schedule_once(method, *args)
  schedule_once_for('default', method, *args)
end
schedule_once_for(queue, method, *args) click to toggle source
# File lib/boy_band.rb, line 473
def schedule_once_for(queue, method, *args)
  return nil unless method
  already_scheduled = Worker.scheduled_for?(queue, self, :perform_action, {
    'method' => method,
    'scheduled' => self.scheduled_stamp,
    'arguments' => args
  })
  if !already_scheduled
    schedule_for(queue, method, *args)
  else
    false
  end
end
scheduled_stamp() click to toggle source
# File lib/boy_band.rb, line 445
def scheduled_stamp
  Time.now.to_i
end