Class: Toggly::EvaluationEngine

Inherits:
Object
  • Object
show all
Defined in:
lib/toggly/evaluation_engine.rb

Overview

Engine for evaluating feature flags.

Processes feature definitions and their rules to determine if a feature should be enabled for a given context.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(registry: nil, logger: nil) ⇒ EvaluationEngine

Returns a new instance of EvaluationEngine.

Parameters:

  • registry (Registry) (defaults to: nil)

    Evaluator registry

  • logger (Logger, nil) (defaults to: nil)

    Optional logger



11
12
13
14
# File 'lib/toggly/evaluation_engine.rb', line 11

def initialize(registry: nil, logger: nil)
  @registry = registry || Registry.new
  @logger = logger
end

Instance Attribute Details

#registryRegistry (readonly)

Returns:



67
68
69
# File 'lib/toggly/evaluation_engine.rb', line 67

def registry
  @registry
end

Instance Method Details

#evaluate(definition, context = nil) ⇒ Boolean

Evaluate a feature for a context

Parameters:

  • definition (FeatureDefinition)

    The feature definition

  • context (Context, nil) (defaults to: nil)

    The evaluation context

Returns:

  • (Boolean)

    Whether the feature is enabled



21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/toggly/evaluation_engine.rb', line 21

def evaluate(definition, context = nil)
  return false unless definition

  # If feature is globally disabled, return false
  return false unless definition.enabled

  # If no rules, feature is simply on/off based on enabled flag
  return definition.enabled unless definition.rules?

  # Evaluate rules in order
  evaluate_rules(definition, context)
end

#evaluate_with_details(definition, context = nil) ⇒ EvaluationResult

Evaluate with detailed result

Parameters:

  • definition (FeatureDefinition)

    The feature definition

  • context (Context, nil) (defaults to: nil)

    The evaluation context

Returns:



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/toggly/evaluation_engine.rb', line 39

def evaluate_with_details(definition, context = nil)
  result = EvaluationResult.new(
    feature_key: definition&.feature_key,
    enabled: false,
    reason: "unknown"
  )

  unless definition
    result.reason = "feature_not_found"
    return result
  end

  unless definition.enabled
    result.reason = "globally_disabled"
    return result
  end

  unless definition.rules?
    result.enabled = true
    result.reason = "globally_enabled"
    return result
  end

  result.enabled = evaluate_rules(definition, context, result)
  result
end