Class: Quonfig::Evaluator
- Inherits:
-
Object
- Object
- Quonfig::Evaluator
- Defined in:
- lib/quonfig/evaluator.rb
Overview
Evaluates configs pulled from a ConfigStore against a Context.
Public API shape mirrors sdk-node’s Evaluator (src/evaluator.ts):
evaluator = Quonfig::Evaluator.new(store)
result = evaluator.evaluate_config(cfg, context, resolver: resolver)
Since qfg-dk6.10 this class owns the full operator matrix against the JSON Criterion shape (propertyName / operator / valueToMatch). It accepts configs in either of two shapes:
-
The ConfigResponse hash produced by Quonfig::Datadir.to_config_response and IntegrationTestHelpers.to_config_response — symbol or string keys at the top level (id, key, type, value_type/valueType, default, environment) with JSON rules/criteria inside as plain hashes with string keys.
The legacy protobuf-shaped Config object is no longer supported.
evaluate_config returns an EvalResult that exposes the matched value via #unwrapped_value (coerced into a native Ruby type per value.type) and #value (the raw JSON Value hash). If nothing matches it returns nil, which Resolver#get relays to callers.
Constant Summary collapse
- OP_NOT_SET =
Operator constants — kept as strings for direct comparison with the wire format (no symbol conversion on the hot path).
'NOT_SET'- OP_ALWAYS_TRUE =
'ALWAYS_TRUE'- OP_PROP_IS_ONE_OF =
'PROP_IS_ONE_OF'- OP_PROP_IS_NOT_ONE_OF =
'PROP_IS_NOT_ONE_OF'- OP_PROP_STARTS_WITH_ONE_OF =
'PROP_STARTS_WITH_ONE_OF'- OP_PROP_DOES_NOT_START_WITH_ONE_OF =
'PROP_DOES_NOT_START_WITH_ONE_OF'- OP_PROP_ENDS_WITH_ONE_OF =
'PROP_ENDS_WITH_ONE_OF'- OP_PROP_DOES_NOT_END_WITH_ONE_OF =
'PROP_DOES_NOT_END_WITH_ONE_OF'- OP_PROP_CONTAINS_ONE_OF =
'PROP_CONTAINS_ONE_OF'- OP_PROP_DOES_NOT_CONTAIN_ONE_OF =
'PROP_DOES_NOT_CONTAIN_ONE_OF'- OP_PROP_MATCHES =
'PROP_MATCHES'- OP_PROP_DOES_NOT_MATCH =
'PROP_DOES_NOT_MATCH'- OP_HIERARCHICAL_MATCH =
'HIERARCHICAL_MATCH'- OP_IN_INT_RANGE =
'IN_INT_RANGE'- OP_PROP_GREATER_THAN =
'PROP_GREATER_THAN'- OP_PROP_GREATER_THAN_OR_EQUAL =
'PROP_GREATER_THAN_OR_EQUAL'- OP_PROP_LESS_THAN =
'PROP_LESS_THAN'- OP_PROP_LESS_THAN_OR_EQUAL =
'PROP_LESS_THAN_OR_EQUAL'- OP_PROP_BEFORE =
'PROP_BEFORE'- OP_PROP_AFTER =
'PROP_AFTER'- OP_PROP_SEMVER_LESS_THAN =
'PROP_SEMVER_LESS_THAN'- OP_PROP_SEMVER_EQUAL =
'PROP_SEMVER_EQUAL'- OP_PROP_SEMVER_GREATER_THAN =
'PROP_SEMVER_GREATER_THAN'- OP_IN_SEG =
'IN_SEG'- OP_NOT_IN_SEG =
'NOT_IN_SEG'- MAGIC_CURRENT_TIME_PROPS =
%w[quonfig.current-time prefab.current-time reforge.current-time].freeze
Instance Attribute Summary collapse
-
#env_id ⇒ Object
Returns the value of attribute env_id.
-
#project_env_id ⇒ Object
Returns the value of attribute project_env_id.
-
#store ⇒ Object
readonly
Returns the value of attribute store.
Instance Method Summary collapse
-
#evaluate_config(config, context, resolver: nil) ⇒ Object
Evaluate
configagainstcontextand return an EvalResult (or nil if no rule matched). -
#initialize(store, project_env_id: 0, env_id: nil, namespace: nil, base_client: nil) ⇒ Evaluator
constructor
A new instance of Evaluator.
Constructor Details
#initialize(store, project_env_id: 0, env_id: nil, namespace: nil, base_client: nil) ⇒ Evaluator
Returns a new instance of Evaluator.
60 61 62 63 64 65 66 |
# File 'lib/quonfig/evaluator.rb', line 60 def initialize(store, project_env_id: 0, env_id: nil, namespace: nil, base_client: nil) @store = store @project_env_id = project_env_id @env_id = env_id @namespace = namespace @base_client = base_client end |
Instance Attribute Details
#env_id ⇒ Object
Returns the value of attribute env_id.
58 59 60 |
# File 'lib/quonfig/evaluator.rb', line 58 def env_id @env_id end |
#project_env_id ⇒ Object
Returns the value of attribute project_env_id.
58 59 60 |
# File 'lib/quonfig/evaluator.rb', line 58 def project_env_id @project_env_id end |
#store ⇒ Object (readonly)
Returns the value of attribute store.
57 58 59 |
# File 'lib/quonfig/evaluator.rb', line 57 def store @store end |
Instance Method Details
#evaluate_config(config, context, resolver: nil) ⇒ Object
Evaluate config against context and return an EvalResult (or nil if no rule matched). context may be a Quonfig::Context or a plain Hash.
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/quonfig/evaluator.rb', line 70 def evaluate_config(config, context, resolver: nil) ctx = coerce_context(context) env = config_environment(config) if env && @env_id && env_id_of(env) == @env_id match = evaluate_rules(env_rules(env), ctx, config) return match if match end default_rules = default_rules_of(config) match = evaluate_rules(default_rules, ctx, config) return match if match nil end |