lib/autoload/kuroko2/workflow/task/parallel_fork.rb



module Kuroko2
  module Workflow
    module Task
      class ParallelFork < Fork
        def validate
          super
          raise Workflow::AssertionError, "ParallelFork must have a parallel size (Int)" unless option.present? && option.match(/\A\d+\z/)
        end

        private

        def parallel_size
          option.to_i
        end

        def extract_child_nodes
          parallel_size.times.each do |index|
            parallel_root = Node.new(:sequence)
            node.children.each { |child| parallel_root.append_child(child) }
            create_child_token(
              child_node: parallel_root,
              env: {
                "KUROKO2_PARALLEL_FORK_SIZE"  => parallel_size.to_s,
                "KUROKO2_PARALLEL_FORK_INDEX" => index.to_s,
              }
            )
          end
        end
      end
    end
  end
end