class Uh::WM::Launcher

Public Class Methods

launch(runner, instructions) click to toggle source
# File lib/uh/wm/launcher.rb, line 5
def launch runner, instructions
  new(runner.actions, runner.rules, runner.method(:run_until))
    .launch instructions
end
new(actions, rules, run_until) click to toggle source
# File lib/uh/wm/launcher.rb, line 11
def initialize actions, rules, run_until
  @actions    = actions
  @rules      = rules
  @run_until  = run_until
end

Public Instance Methods

launch(instructions) click to toggle source
# File lib/uh/wm/launcher.rb, line 17
def launch instructions
  with_clean_rules do
    rules = @rules
    DSL.new(@actions).evaluate(instructions).each do |m, args, block|
      if m == :execute!
        @rules[//] = -> { rules.clear }
        @actions.execute *args, &block
        @run_until.call { @rules.empty? }
      else
        @actions.send m, *args, &block
      end
    end
  end
end

Private Instance Methods

with_clean_rules() { || ... } click to toggle source
# File lib/uh/wm/launcher.rb, line 34
def with_clean_rules
  original_rules = @rules.dup
  @rules.clear
  yield
  @rules.clear
  @rules.merge! original_rules
end