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