Class: Undecided::Evaluator

Inherits:
Object
  • Object
show all
Defined in:
lib/undecided/evaluator.rb

Overview

Evaluate rules and values to minimize security risk before do eval

Constant Summary collapse

VARIABLE_REGEX =

REGEX that match operators

/\&|\||\(|\)|!/

Class Method Summary collapse

Class Method Details

.bool?(value) ⇒ Boolean

Check if value is a boolean type

Returns:

  • (Boolean)


17
18
19
# File 'lib/undecided/evaluator.rb', line 17

def self.bool?(value)
  [true, false].include? value
end

.extract_variables(rule) ⇒ Object

Apply regex to rule to extract variables



22
23
24
# File 'lib/undecided/evaluator.rb', line 22

def self.extract_variables(rule)
  Converter.to_symbol(rule.split(VARIABLE_REGEX).reject(&:empty?).uniq)
end

.valid?(rule, values) ⇒ Boolean

Check if rule and values are valid to evaluate

Returns:

  • (Boolean)


7
8
9
10
11
12
13
14
# File 'lib/undecided/evaluator.rb', line 7

def self.valid?(rule, values)
  # Extract variables from rule
  variables = extract_variables(rule)

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