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