Class: JobWorkflow::TaskGraph

Inherits:
Object
  • Object
show all
Includes:
Enumerable, TSort
Defined in:
lib/job_workflow/task_graph.rb

Instance Method Summary collapse

Constructor Details

#initializeTaskGraph

: () -> void



9
10
11
# File 'lib/job_workflow/task_graph.rb', line 9

def initialize
  @tasks = {} #: Hash[Symbol, Task]
end

Instance Method Details

#add(task) ⇒ Object

: (Task) -> void



14
15
16
# File 'lib/job_workflow/task_graph.rb', line 14

def add(task)
  @tasks[task.task_name] = task
end

#eachObject

: () { (Task) -> void } -> void



24
25
26
# File 'lib/job_workflow/task_graph.rb', line 24

def each(&)
  tsort.each(&)
end

#fetch(task_name) ⇒ Object

: (Symbol?) -> Task?



19
20
21
# File 'lib/job_workflow/task_graph.rb', line 19

def fetch(task_name)
  @tasks[task_name]
end

#tsort_each_child(task) ⇒ Object

: (Task task) { (Task) -> void } -> void



34
35
36
37
38
39
40
41
# File 'lib/job_workflow/task_graph.rb', line 34

def tsort_each_child(task)
  task.depends_on.each do |dep_task_name|
    dep_task = @tasks[dep_task_name]
    raise ArgumentError, "Task '#{task.task_name}' depends on missing task '#{dep_task_name}'" if dep_task.nil?

    yield(dep_task)
  end
end

#tsort_each_nodeObject

: () { (Task) -> void } -> void



29
30
31
# File 'lib/job_workflow/task_graph.rb', line 29

def tsort_each_node(&)
  @tasks.values.each(&)
end