Module: BoyBand::AsyncClassMethods

Defined in:
lib/boy_band.rb

Instance Method Summary collapse

Instance Method Details

#perform_action(settings) ⇒ Object



487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
# 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) ⇒ Object



449
450
451
452
453
454
455
456
457
# 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) ⇒ Object



459
460
461
462
463
464
465
466
467
# 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) ⇒ Object



469
470
471
# 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) ⇒ Object



473
474
475
476
477
478
479
480
481
482
483
484
485
# 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_stampObject



445
446
447
# File 'lib/boy_band.rb', line 445

def scheduled_stamp
  Time.now.to_i
end