class Fire::Runner
Runner
class takes a rule system and runs it.
Attributes
system[R]
Public Class Methods
new(system)
click to toggle source
# File lib/fire/runner.rb, line 9 def initialize(system) @system = system @_post = [] end
Public Instance Methods
run_rules()
click to toggle source
# File lib/fire/runner.rb, line 18 def run_rules system.rules.each do |rule| rule.apply{ prepare(rule) } end end
run_task(trigger)
click to toggle source
# File lib/fire/runner.rb, line 25 def run_task(trigger) task = system.tasks[trigger.to_sym] task.apply{ prepare(task) } end
Private Instance Methods
post(pre=nil)
click to toggle source
List of prerequistes that have already been run. Keeping this list prevents the same prequistes from ever being run twice in the same session.
Returns [Array<Symbol>]
# File lib/fire/runner.rb, line 69 def post(pre=nil) @_post.concat(pre) if pre @_post end
prepare(rule)
click to toggle source
Execute rule by first running any outstanding prerequistes then then the rul procedure itself.
# File lib/fire/runner.rb, line 34 def prepare(rule) pre = resolve(rule) pre = pre - post pre = pre - [rule.name.to_sym] if rule.name pre.each do |r| r.call end post(pre) end
resolve(rule, todo=[])
click to toggle source
Resolve prerequistes.
Returns [Array<Symbol>]
# File lib/fire/runner.rb, line 51 def resolve(rule, todo=[]) return [] if (rule.todo - todo).empty? left = rule.todo - todo list = left todo.concat(left) left.each do |r| t = system.tasks[r.to_sym] x = resolve(t, todo) list.concat(x) end list.uniq end