class Inprovise::TriggerRunner

Trigger runner for Inprovise

Author

Martin Corino

License

Distributes under the same license as Ruby

Public Class Methods

new(node, action_ref_with_args, skip_dependencies=false) click to toggle source
# File lib/inprovise/trigger_runner.rb, line 7
def initialize(node, action_ref_with_args, skip_dependencies=false)
  @node = node
  @action_ref, @args = *parse_action_ref(action_ref_with_args)
  @log = Inprovise::Logger.new(@node, @action_ref)
  @skip_dependencies = skip_dependencies
  @index = Inprovise::ScriptIndex.default
end

Private Class Methods

eval(s) click to toggle source
# File lib/inprovise/trigger_runner.rb, line 57
def self.eval(s); binding.eval(s); end

Public Instance Methods

demonstrate(_, config=nil) click to toggle source
# File lib/inprovise/trigger_runner.rb, line 27
def demonstrate(_, config=nil)
  Inprovise.log.local("Demonstrating trigger #{@action_ref} for #{@node.to_s}")
  context = Inprovise::MockExecutionContext.new(@node, @log, @index, config)
  scr, action = context.resolve_action_ref(@action_ref)
  setup_configuration(scr, context) if scr
  context.trigger(scr, action, *@args)
end
execute(_, config=nil) click to toggle source
# File lib/inprovise/trigger_runner.rb, line 19
def execute(_, config=nil)
  Inprovise.log.local("Triggering #{@action_ref} for #{@node.to_s}")
  context = Inprovise::ExecutionContext.new(@node, @log, @index, config)
  scr, action = context.resolve_action_ref(@action_ref)
  setup_configuration(scr, context) if scr
  context.trigger(scr, action, *@args)
end
set_index(index) click to toggle source
# File lib/inprovise/trigger_runner.rb, line 15
def set_index(index)
  @index = index
end

Private Instance Methods

get_arg_value(v) click to toggle source
# File lib/inprovise/trigger_runner.rb, line 55
def get_arg_value(v)
  begin
    Module.new { def self.eval(s); binding.eval(s); end }.eval(v)
  rescue Exception
    v
  end
end
parse_action_ref(action_ref_with_args) click to toggle source
# File lib/inprovise/trigger_runner.rb, line 63
def parse_action_ref(action_ref_with_args)
  matches = action_ref_with_args.match(/([\w\-\:]+?)(\[(.+?)\])/)
  return [action_ref_with_args,[]] unless matches
  action_ref = matches[1]
  args = matches[3].split(',').map { |arg| get_arg_value(arg.strip) }
  [action_ref, args]
end
scripts(script) click to toggle source
# File lib/inprovise/trigger_runner.rb, line 37
def scripts(script)
  return [script] if @skip_dependencies
  resolver = Inprovise::Resolver.new(script, @index)
  resolver.resolve
  resolver.scripts
end
setup_configuration(script, context) click to toggle source
# File lib/inprovise/trigger_runner.rb, line 44
def setup_configuration(script, context)
  script_list = scripts(script)
  script_list.each { |scr| scr.update_configuration(context) }
  script_list.each do |scr|
    context.log.set_task(scr)
    context.log.command(:configure)
    context.script = scr
    scr.command(:configure).each {|cmd| context.exec_config(cmd) }
  end
end