Sha256: 42cc34ac62adf1efdc2e24580f3b7dd20be5fc6846b4c2dfa4c02c0559aaca1d

Contents?: true

Size: 991 Bytes

Versions: 1

Compression:

Stored size: 991 Bytes

Contents

# frozen_string_literal: true

module Simplekiq
  class Orchestration
    attr_accessor :serial_workflow, :parallel_workflow
    def initialize
      @serial_workflow = []
    end

    def run(*step)
      workflow = parallel_workflow || serial_workflow
      workflow << step
    end

    def in_parallel
      @parallel_workflow = []
      yield
      serial_workflow << @parallel_workflow if @parallel_workflow.any?
    ensure
      @parallel_workflow = nil
      serial_workflow
    end

    def execute(parent_batch)
      OrchestrationExecutor.execute(workflow: serialized_workflow, parent_batch: parent_batch)
    end

    def serialized_workflow
      @serialized_workflow ||= serial_workflow.map do |step|
        case step[0]
        when Array
          step.map do |(job, *args)|
            {"klass" => job.name, "args" => args}
          end
        when Class
          job, *args = step
          {"klass" => job.name, "args" => args}
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
simplekiq-0.0.3 lib/simplekiq/orchestration.rb