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
- 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.
13 14 15 16 17 18 19 |
# File 'lib/prefab/criteria_evaluator.rb', line 13 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
26 27 28 29 30 |
# File 'lib/prefab/criteria_evaluator.rb', line 26 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
40 41 42 |
# File 'lib/prefab/criteria_evaluator.rb', line 40 def ALWAYS_TRUE(_criterion, _properties) true end |
#evaluate(properties) ⇒ Object
21 22 23 24 |
# File 'lib/prefab/criteria_evaluator.rb', line 21 def evaluate(properties) evaluate_for_env(@project_env_id, properties) || evaluate_for_env(0, properties) end |
#HIERARCHICAL_MATCH(criterion, properties) ⇒ Object
60 61 62 63 |
# File 'lib/prefab/criteria_evaluator.rb', line 60 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
65 66 67 68 69 70 71 72 73 |
# File 'lib/prefab/criteria_evaluator.rb', line 65 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
32 33 34 |
# File 'lib/prefab/criteria_evaluator.rb', line 32 def IN_SEG(criterion, properties) in_segment?(criterion, properties) end |
#NOT_IN_SEG(criterion, properties) ⇒ Object
36 37 38 |
# File 'lib/prefab/criteria_evaluator.rb', line 36 def NOT_IN_SEG(criterion, properties) !in_segment?(criterion, properties) end |
#PROP_DOES_NOT_END_WITH_ONE_OF(criterion, properties) ⇒ Object
56 57 58 |
# File 'lib/prefab/criteria_evaluator.rb', line 56 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
52 53 54 |
# File 'lib/prefab/criteria_evaluator.rb', line 52 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
48 49 50 |
# File 'lib/prefab/criteria_evaluator.rb', line 48 def PROP_IS_NOT_ONE_OF(criterion, properties) !matches?(criterion, value_from_properties(criterion, properties), properties) end |
#PROP_IS_ONE_OF(criterion, properties) ⇒ Object
44 45 46 |
# File 'lib/prefab/criteria_evaluator.rb', line 44 def PROP_IS_ONE_OF(criterion, properties) matches?(criterion, value_from_properties(criterion, properties), properties) end |
#value_from_properties(criterion, properties) ⇒ Object
75 76 77 |
# File 'lib/prefab/criteria_evaluator.rb', line 75 def value_from_properties(criterion, properties) criterion.property_name == NAMESPACE_KEY ? @namespace : properties.get(criterion.property_name) end |