Class: LaunchDarkly::Impl::Evaluator

Inherits:
Object
  • Object
show all
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.

Since:

  • 5.5.0

Defined Under Namespace

Classes: EvalResult

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(get_flag, get_segment, logger) ⇒ Evaluator

A single Evaluator is instantiated for each client instance.

Parameters:

  • get_flag (Function)

    called if the Evaluator needs to query a different flag from the one that it is currently evaluating (i.e. a prerequisite flag); takes a single parameter, the flag key, and returns the flag data - or nil if the flag is unknown or deleted

  • get_segment (Function)

    similar to ‘get_flag`, but is used to query a user segment.

  • logger (Logger)

    the client’s logger

Since:

  • 5.5.0



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.

Since:

  • 5.5.0



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.

Parameters:

  • flag (Object)

    the flag

  • user (Object)

    the user properties

  • event_factory (EventFactory)

    called to construct a feature request event when a prerequisite flag is evaluated; the caller is responsible for constructing the feature event for the top-level evaluation

Returns:

Since:

  • 5.5.0



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