class Opto::Resolvers::Evaluate

Geneerate a new random number. Requires :min and :max in hint to define range.

Public Instance Methods

resolve() click to toggle source
# File lib/opto/resolvers/evaluate.rb, line 11
def resolve
  raise TypeError, "String required" unless hint.kind_of?(String)
  interpolated_hint = hint.gsub(/(?<!\$)\$(?!\$)\{?[\w\.]+\}?/) do |v|
    var = v.tr('${}', '')
    if option.group.nil? || option.group.option(var).nil?
      raise RuntimeError, "Variable #{var} not declared"
    end
    if option.value_of(var).nil?
      raise RuntimeError, "No value for #{var}, note that the order is meaningful"
    end
    option.value_of(var)
  end.gsub(/\s+/, "")

  if interpolated_hint =~ /\A[\(\)\-\+\/\*0-9\.]+\z/
    eval(interpolated_hint)
  else
    raise TypeError, "Syntax error: '#{interpolated_hint}' does not look like a number or a calculation"
  end
end