class TPPlus::Nodes::WaitUntilNode

Public Class Methods

new(expression, timeout_options) click to toggle source
# File lib/tp_plus/nodes/wait_until_node.rb, line 4
def initialize(expression, timeout_options)
  @expression = expression
  @timeout_options = timeout_options || {}
end

Public Instance Methods

eval(context) click to toggle source
# File lib/tp_plus/nodes/wait_until_node.rb, line 56
def eval(context)
  "#{wait_timeout(context)}WAIT #{string_value(context)}#{timeout(context)}"
end
string_value(context) click to toggle source
# File lib/tp_plus/nodes/wait_until_node.rb, line 52
def string_value(context)
  "(#{@expression.eval(context)})"
end
timeout(context) click to toggle source
# File lib/tp_plus/nodes/wait_until_node.rb, line 9
def timeout(context)
  return "" if @timeout_options[:label].nil?

  " TIMEOUT,LBL[#{context.labels[@timeout_options[:label].to_sym]}]"
end
val(context) click to toggle source
# File lib/tp_plus/nodes/wait_until_node.rb, line 15
def val(context)
  value_node = @timeout_options[:timeout][0]
  units = @timeout_options[:timeout][1]

  if value_node.is_a?(VarNode)
    value = value_node.eval(context)

    case units
    when "s"
      value = "#{value}*100"
    when "ms"
      value = "#{value}*.1"
    else
      raise "invalid units"
    end
  else
    value = value_node.eval(context).to_i

    case units
    when "s"
      value = (value * 100).to_i
    when "ms"
      value = (value * 0.1).to_i
    else
      raise "invalid units"
    end
  end

  value
end
wait_timeout(context) click to toggle source
# File lib/tp_plus/nodes/wait_until_node.rb, line 46
def wait_timeout(context)
  return "" if @timeout_options[:timeout].nil?

  "$WAITTMOUT=(#{val(context)}) ;\n"
end