Class: LaunchDarkly::Impl::Evaluator
- Inherits:
-
Object
- Object
- LaunchDarkly::Impl::Evaluator
- Defined in:
- lib/ldclient-rb/impl/evaluator.rb
Overview
Encapsulates the feature flag evaluation logic. The Evaluator has no knowledge of the rest of the SDK environment; if it needs to retrieve flags or segments that are referenced by a flag, it does so through a simple function that is provided in the constructor. It also produces feature requests as appropriate for any referenced prerequisite flags, but does not send them.
Defined Under Namespace
Classes: EvalResult
Class Method Summary collapse
-
.error_result(errorKind, value = nil) ⇒ Object
Helper function used internally to construct an EvaluationDetail for an error result.
Instance Method Summary collapse
-
#evaluate(flag, user, event_factory) ⇒ EvalResult
The client’s entry point for evaluating a flag.
-
#initialize(get_flag, get_segment, logger) ⇒ Evaluator
constructor
A single Evaluator is instantiated for each client instance.
Constructor Details
#initialize(get_flag, get_segment, logger) ⇒ Evaluator
A single Evaluator is instantiated for each client instance.
19 20 21 22 23 |
# File 'lib/ldclient-rb/impl/evaluator.rb', line 19 def initialize(get_flag, get_segment, logger) @get_flag = get_flag @get_segment = get_segment @logger = logger end |
Class Method Details
.error_result(errorKind, value = nil) ⇒ Object
Helper function used internally to construct an EvaluationDetail for an error result.
31 32 33 |
# File 'lib/ldclient-rb/impl/evaluator.rb', line 31 def self.error_result(errorKind, value = nil) EvaluationDetail.new(value, nil, EvaluationReason.error(errorKind)) end |
Instance Method Details
#evaluate(flag, user, event_factory) ⇒ EvalResult
The client’s entry point for evaluating a flag. The returned ‘EvalResult` contains the evaluation result and any events that were generated for prerequisite flags; its `value` will be `nil` if the flag returns the default value. Error conditions produce a result with a nil value and an error reason, not an exception.
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/ldclient-rb/impl/evaluator.rb', line 44 def evaluate(flag, user, event_factory) if user.nil? || user[:key].nil? return EvalResult.new(Evaluator.error_result(EvaluationReason::ERROR_USER_NOT_SPECIFIED), []) end # If the flag doesn't have any prerequisites (which most flags don't) then it cannot generate any feature # request events for prerequisites and we can skip allocating an array. if flag[:prerequisites] && !flag[:prerequisites].empty? events = [] else events = nil end detail = eval_internal(flag, user, events, event_factory) return EvalResult.new(detail, events.nil? || events.empty? ? nil : events) end |