class Hyrb::Pipeline
Attributes
current_task[RW]
env[RW]
next_tasks[RW]
prev_tasks[RW]
Public Class Methods
new(task_class)
click to toggle source
# File lib/hyrb/pipeline.rb, line 13 def initialize(task_class) @task_class = task_class @prev_tasks = [] @next_tasks = build_task_list end
rules()
click to toggle source
# File lib/hyrb/pipeline.rb, line 9 def self.rules @@rules ||= {} end
Public Instance Methods
build_task_list(id_map={}, stack=[])
click to toggle source
# File lib/hyrb/pipeline.rb, line 51 def build_task_list(id_map={}, stack=[]) arr = [] each_strongly_connected_component_from(@task_class, id_map, stack) do |t| if t.length == 1 arr << t.first else raise TSort::Cyclic.new("cyclic dependencies: #{t.inspect}") end end arr end
info(message)
click to toggle source
# File lib/hyrb/pipeline.rb, line 39 def info(message) puts message end
invoke(task_class)
click to toggle source
# File lib/hyrb/pipeline.rb, line 31 def invoke(task_class) pipeline = self.class.new(task_class) pipeline.prev_tasks += self.prev_tasks pipeline.next_tasks -= self.prev_tasks pipeline.run(@env) self.next_tasks -= pipeline.prev_tasks end
run(env = {})
click to toggle source
# File lib/hyrb/pipeline.rb, line 19 def run(env = {}) @env = env while @current_task = @next_tasks.shift task = @current_task.new(self) info "--> Running #{@current_task}" if @env[:verbose] task.run_before(@env) task.run(@env) @prev_tasks << @current_task end @env end
tsort_each_child(node, &block)
click to toggle source
# File lib/hyrb/pipeline.rb, line 43 def tsort_each_child(node, &block) (self.class.rules[node] || []).each(&block) end
tsort_each_node(&block)
click to toggle source
# File lib/hyrb/pipeline.rb, line 47 def tsort_each_node(&block) (self.class.rules || {}).each_key(&block) end