Class: Undecided::Evaluator
- Inherits:
-
Object
- Object
- Undecided::Evaluator
- 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
-
.bool?(value) ⇒ Boolean
Check if value is a boolean type.
-
.extract_variables(rule) ⇒ Object
Apply regex to rule to extract variables.
-
.fill_values(variables, values) ⇒ Object
If there are more variables than values, then added as false.
-
.valid?(rule, values, strict = true) ⇒ Boolean
Check if rule and values are valid to evaluate.
Class Method Details
.bool?(value) ⇒ Boolean
Check if value is a boolean type
27 28 29 |
# File 'lib/undecided/evaluator.rb', line 27 def self.bool?(value) [true, false].include? value end |
.extract_variables(rule) ⇒ Object
Apply regex to rule to extract variables
32 33 34 |
# 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) ⇒ Object
If there are more variables than values, then added as false
21 22 23 24 |
# 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) ⇒ Boolean
Check if rule and values are valid to evaluate
7 8 9 10 11 12 13 14 15 16 17 18 |
# 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 |