Class: Prefab::CriteriaEvaluator
- Inherits:
-
Object
- Object
- Prefab::CriteriaEvaluator
- Defined in:
- lib/prefab/criteria_evaluator.rb
Overview
This class evaluates a config’s criteria. ‘evaluate` returns the value of the first match based on the provided properties.
Constant Summary collapse
- LOG =
Prefab::InternalLogger.new(CriteriaEvaluator)
- NAMESPACE_KEY =
'NAMESPACE'
- NO_MATCHING_ROWS =
[].freeze
Instance Method Summary collapse
- #all_criteria_match?(conditional_value, props) ⇒ Boolean
- #ALWAYS_TRUE(_criterion, _properties) ⇒ Object
- #evaluate(properties) ⇒ Object
- #HIERARCHICAL_MATCH(criterion, properties) ⇒ Object
- #IN_INT_RANGE(criterion, properties) ⇒ Object
- #IN_SEG(criterion, properties) ⇒ Object
-
#initialize(config, project_env_id:, resolver:, namespace:, base_client:) ⇒ CriteriaEvaluator
constructor
A new instance of CriteriaEvaluator.
- #NOT_IN_SEG(criterion, properties) ⇒ Object
- #PROP_DOES_NOT_END_WITH_ONE_OF(criterion, properties) ⇒ Object
- #PROP_ENDS_WITH_ONE_OF(criterion, properties) ⇒ Object
- #PROP_IS_NOT_ONE_OF(criterion, properties) ⇒ Object
- #PROP_IS_ONE_OF(criterion, properties) ⇒ Object
- #value_from_properties(criterion, properties) ⇒ Object
Constructor Details
#initialize(config, project_env_id:, resolver:, namespace:, base_client:) ⇒ CriteriaEvaluator
Returns a new instance of CriteriaEvaluator.
14 15 16 17 18 19 20 |
# File 'lib/prefab/criteria_evaluator.rb', line 14 def initialize(config, project_env_id:, resolver:, namespace:, base_client:) @config = config @project_env_id = project_env_id @resolver = resolver @namespace = namespace @base_client = base_client end |
Instance Method Details
#all_criteria_match?(conditional_value, props) ⇒ Boolean
29 30 31 32 33 |
# File 'lib/prefab/criteria_evaluator.rb', line 29 def all_criteria_match?(conditional_value, props) conditional_value.criteria.all? do |criterion| public_send(criterion.operator, criterion, props) end end |
#ALWAYS_TRUE(_criterion, _properties) ⇒ Object
43 44 45 |
# File 'lib/prefab/criteria_evaluator.rb', line 43 def ALWAYS_TRUE(_criterion, _properties) true end |
#evaluate(properties) ⇒ Object
22 23 24 25 26 27 |
# File 'lib/prefab/criteria_evaluator.rb', line 22 def evaluate(properties) rtn = evaluate_for_env(@project_env_id, properties) || evaluate_for_env(0, properties) LOG.debug "Eval Key #{@config.key} Result #{rtn&.reportable_value} with #{properties.to_h}" unless @config.config_type == :LOG_LEVEL rtn end |
#HIERARCHICAL_MATCH(criterion, properties) ⇒ Object
63 64 65 66 |
# File 'lib/prefab/criteria_evaluator.rb', line 63 def HIERARCHICAL_MATCH(criterion, properties) value = value_from_properties(criterion, properties) value&.start_with?(criterion.value_to_match.string) end |
#IN_INT_RANGE(criterion, properties) ⇒ Object
68 69 70 71 72 73 74 75 76 |
# File 'lib/prefab/criteria_evaluator.rb', line 68 def IN_INT_RANGE(criterion, properties) value = if criterion.property_name == 'prefab.current-time' Time.now.utc.to_i * 1000 else value_from_properties(criterion, properties) end value && value >= criterion.value_to_match.int_range.start && value < criterion.value_to_match.int_range.end end |
#IN_SEG(criterion, properties) ⇒ Object
35 36 37 |
# File 'lib/prefab/criteria_evaluator.rb', line 35 def IN_SEG(criterion, properties) in_segment?(criterion, properties) end |
#NOT_IN_SEG(criterion, properties) ⇒ Object
39 40 41 |
# File 'lib/prefab/criteria_evaluator.rb', line 39 def NOT_IN_SEG(criterion, properties) !in_segment?(criterion, properties) end |
#PROP_DOES_NOT_END_WITH_ONE_OF(criterion, properties) ⇒ Object
59 60 61 |
# File 'lib/prefab/criteria_evaluator.rb', line 59 def PROP_DOES_NOT_END_WITH_ONE_OF(criterion, properties) !prop_ends_with_one_of?(criterion, value_from_properties(criterion, properties)) end |
#PROP_ENDS_WITH_ONE_OF(criterion, properties) ⇒ Object
55 56 57 |
# File 'lib/prefab/criteria_evaluator.rb', line 55 def PROP_ENDS_WITH_ONE_OF(criterion, properties) prop_ends_with_one_of?(criterion, value_from_properties(criterion, properties)) end |
#PROP_IS_NOT_ONE_OF(criterion, properties) ⇒ Object
51 52 53 |
# File 'lib/prefab/criteria_evaluator.rb', line 51 def PROP_IS_NOT_ONE_OF(criterion, properties) !matches?(criterion, value_from_properties(criterion, properties), properties) end |
#PROP_IS_ONE_OF(criterion, properties) ⇒ Object
47 48 49 |
# File 'lib/prefab/criteria_evaluator.rb', line 47 def PROP_IS_ONE_OF(criterion, properties) matches?(criterion, value_from_properties(criterion, properties), properties) end |
#value_from_properties(criterion, properties) ⇒ Object
78 79 80 |
# File 'lib/prefab/criteria_evaluator.rb', line 78 def value_from_properties(criterion, properties) criterion.property_name == NAMESPACE_KEY ? @namespace : properties.get(criterion.property_name) end |