class Undecided::Evaluator

Evaluate rules and values to minimize security risk before do eval

Constants

VARIABLE_REGEX

REGEX that match operators

Public Class Methods

bool?(value) click to toggle source

Check if value is a boolean type

# File lib/undecided/evaluator.rb, line 27
def self.bool?(value)
  [true, false].include? value
end
extract_variables(rule) click to toggle source

Apply regex to rule to extract variables

# File lib/undecided/evaluator.rb, line 32
def self.extract_variables(rule)
  Converter.to_symbol(rule.split(VARIABLE_REGEX).reject(&:empty?).uniq)
end
fill_values(variables, values) click to toggle source

If there are more variables than values, then added as false

# File lib/undecided/evaluator.rb, line 21
def self.fill_values(variables, values)
  extras = variables - Converter.to_symbol(values.keys)
  extras.each { |e| values[Converter.to_symbol(e)] = false }
end
valid?(rule, values, strict = true) click to toggle source

Check if rule and values are valid to evaluate

# File lib/undecided/evaluator.rb, line 7
def self.valid?(rule, values, strict = true)
  # Extract variables from rule
  variables = extract_variables(rule)

  return false if variables.empty?

  # if validation is not strict, add missing values
  fill_values(variables, values) unless strict

  # Check if rule's variable and values's keys are the same
  (variables - Converter.to_symbol(values.keys)).empty?
end