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