Kuroko2のソース読み その1

kuroko2-0.4.1/lib/以下は下記の構成になっている。

% ls kuroko2-0.4.1/lib
autoload   kuroko2    kuroko2.rb tasks

メイン処理は autoload 以下に入っているようだ。


lib/autoload/kuroko2/workflow/node.rb には、kuroko2 scriptで使用できるコマンドの定義があった。

module Kuroko2
  module Workflow
    class Node
      PATH_REGEXP = %r(\A(?:/|(?:/\d+-[a-z0-9_]+)+)\z)
      TASK_REGISTRY = {
        root:                  Task::Sequence,
        noop:                  Task::Noop,
        sequence:              Task::Sequence,
        auto_skip_error:       Task::AutoSkipError,
        fork:                  Task::Fork,
        parallel_fork:         Task::ParallelFork,
        ...

また、lib/autoload/kuroko2/workflow/task/以下には、各コマンドに対応するクラスが配置されている。

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?)
            ...