Module: BoyBand::AsyncClassMethods
- Defined in:
- lib/boy_band.rb
Instance Method Summary collapse
- #perform_action(settings) ⇒ Object
- #schedule(method, *args) ⇒ Object
- #schedule_for(queue, method, *args) ⇒ Object
- #schedule_once(method, *args) ⇒ Object
- #schedule_once_for(queue, method, *args) ⇒ Object
- #scheduled_stamp ⇒ Object
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_stamp ⇒ Object
445 446 447 |
# File 'lib/boy_band.rb', line 445 def scheduled_stamp Time.now.to_i end |