Sha256: b064c8a8cd1d880edd6dfbd80cf88f743b36d361b1c4f6bd98ac5f28ec544ac1

Contents?: true

Size: 1.63 KB

Versions: 2

Compression:

Stored size: 1.63 KB

Contents

module Kuroko2
  module Workflow
    module Task
      class Fork < Base
        def execute
          children = token.children
          if children.empty?
            message = "(token #{token.uuid}) Start to fork."

            token.job_instance.logs.info(message)
            Kuroko2.logger.info(message)
            extract_child_nodes

            :pass
          elsif children.all?(&:finished?)
            message = "(token #{token.uuid}) All children are finished."

            token.job_instance.logs.info(message)
            Kuroko2.logger.info(message)

            :next_sibling
          else
            :pass
          end
        end

        def validate
          if node.children.empty?
            raise Workflow::AssertionError, "#{self.class} must have children node"
          end
        end

        private

        def extract_child_nodes
          node.children.each do |child|
            create_child_token(child_node: child)
          end
        end

        def create_child_token(child_node:, env: {})
          attributes = token.attributes.except('id', 'uuid', 'script', 'path', 'message', 'created_at', 'updated_at')
          attributes = attributes.merge(uuid: SecureRandom.uuid, parent: token, script: child_node.to_script, path: '/')
          attributes['context']['ENV'] = (attributes['context']['ENV'] || {}).merge(env)

          Token.create!(attributes).tap do |created|
            message = "(token #{created.uuid}) New token are created for #{child_node.path}"
            created.job_instance.logs.info(message)
            Kuroko2.logger.info(message)
          end
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
kuroko2-0.4.1 lib/autoload/kuroko2/workflow/task/fork.rb
kuroko2-0.4.0 lib/autoload/kuroko2/workflow/task/fork.rb