Class: Tisket::Manager
- Inherits:
-
Object
- Object
- Tisket::Manager
- Defined in:
- lib/tisket/manager.rb
Instance Method Summary collapse
- #complete(id) ⇒ Object
- #enqueue(ids) ⇒ Object
-
#initialize(specs) ⇒ Manager
constructor
A new instance of Manager.
- #run ⇒ Object
- #run_one(id) ⇒ Object
Constructor Details
#initialize(specs) ⇒ Manager
Returns a new instance of Manager.
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/tisket/manager.rb', line 8 def initialize(specs) specs = YAML.load(specs) if specs.is_a?(String) specs = convert_specs(specs) self.backward_deps = {} self.forward_deps = Hash.new{|h,k| h[k] = Set.new } self.initial_set = Set.new specs.each do |id,spec| if spec && (deps = spec.delete(:_requires)) && !deps.empty? deps.each{|d| forward_deps[d] << id } backward_deps[id] = deps else initial_set << id end end self.specs = specs end |
Instance Method Details
#complete(id) ⇒ Object
28 29 30 31 32 33 34 35 36 37 |
# File 'lib/tisket/manager.rb', line 28 def complete(id) puts "completing #{id}" next_tasks = Set.new forward_deps[id].each do |dep| bw = backward_deps[dep] bw.delete(id) next_tasks << dep if bw.empty? end enqueue(next_tasks) end |
#enqueue(ids) ⇒ Object
39 40 41 |
# File 'lib/tisket/manager.rb', line 39 def enqueue(ids) ids.map{|id| run_one(id) }.map(&:join) end |
#run ⇒ Object
54 55 56 |
# File 'lib/tisket/manager.rb', line 54 def run enqueue(initial_set) end |
#run_one(id) ⇒ Object
43 44 45 46 47 48 49 50 51 52 |
# File 'lib/tisket/manager.rb', line 43 def run_one(id) puts "running #{id}" spec = (specs[id] ? specs[id].dup : {}) task = Object.const_get( spec.delete(:_class) || camelize(id.to_s) ).new(self, id: id, **spec) th = Thread.new{ task.run } th.run th end |