module Seam::Sidekiq

Constants

VERSION

Public Class Methods

fire_the_worker_for_the_next_step_of(effort) click to toggle source
# File lib/seam/sidekiq.rb, line 28
def self.fire_the_worker_for_the_next_step_of effort
  return unless worker = the_next_worker_for(effort)
  this_should_be_executed_in_the_future(effort) ?
    execute_this_in_the_future(worker, effort) :
    execute_this_now(worker, effort)
end
setup() click to toggle source
# File lib/seam/sidekiq.rb, line 7
def self.setup
  ::Seam::Worker.class_eval do
    include ::Sidekiq::Worker

    def perform effort_id
      effort = Seam::Effort.find effort_id
      execute effort
      ::Seam::Sidekiq.fire_the_worker_for_the_next_step_of effort
    end
  end

  ::Seam::Flow.class_eval do
    alias :the_default_start_for :start
    def start(data = {})
      effort = the_default_start_for data
      ::Seam::Sidekiq.fire_the_worker_for_the_next_step_of effort
      effort
    end
  end
end

Private Class Methods

execute_this_in_the_future(worker, effort) click to toggle source
# File lib/seam/sidekiq.rb, line 39
def execute_this_in_the_future worker, effort
  worker.class.perform_in time_until(effort), effort.id
end
execute_this_now(worker, effort) click to toggle source
# File lib/seam/sidekiq.rb, line 43
def execute_this_now worker, effort
  worker.class.perform_async effort.id
end
the_next_worker_for(effort) click to toggle source
# File lib/seam/sidekiq.rb, line 47
def the_next_worker_for effort
  Seam::Worker.handler_for effort.next_step
end
this_should_be_executed_in_the_future(effort) click to toggle source
# File lib/seam/sidekiq.rb, line 55
def this_should_be_executed_in_the_future effort
  effort.next_execute_at > Time.now
end
time_until(effort) click to toggle source
# File lib/seam/sidekiq.rb, line 51
def time_until effort
  effort.next_execute_at - Time.now
end

Public Instance Methods

perform(effort_id) click to toggle source
# File lib/seam/sidekiq.rb, line 11
def perform effort_id
  effort = Seam::Effort.find effort_id
  execute effort
  ::Seam::Sidekiq.fire_the_worker_for_the_next_step_of effort
end
start(data = {}) click to toggle source
# File lib/seam/sidekiq.rb, line 20
def start(data = {})
  effort = the_default_start_for data
  ::Seam::Sidekiq.fire_the_worker_for_the_next_step_of effort
  effort
end