Class: Hackle::TrafficAllocateExperimentFlowEvaluator

Inherits:
Object
  • Object
show all
Includes:
ExperimentFlowEvaluator
Defined in:
lib/hackle/internal/evaluation/evaluator/experiment/experiment_flow_evaluator.rb

Instance Method Summary collapse

Constructor Details

#initialize(action_resolver:) ⇒ TrafficAllocateExperimentFlowEvaluator

Returns a new instance of TrafficAllocateExperimentFlowEvaluator.

Parameters:



120
121
122
123
# File 'lib/hackle/internal/evaluation/evaluator/experiment/experiment_flow_evaluator.rb', line 120

def initialize(action_resolver:)
  # @type [ExperimentActionResolver]
  @action_resolver = action_resolver
end

Instance Method Details

#evaluate(request, context, _next_flow) ⇒ Object



125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# File 'lib/hackle/internal/evaluation/evaluator/experiment/experiment_flow_evaluator.rb', line 125

def evaluate(request, context, _next_flow)
  if request.experiment.status != ExperimentStatus::RUNNING
    raise ArgumentError, "experiment status must be RUNNING [#{request.experiment.id}]"
  end
  if request.experiment.type != ExperimentType::AB_TEST
    raise ArgumentError, "experiment type must be AB_TEST [#{request.experiment.id}]"
  end

  variation = @action_resolver.resolve_or_nil(request, request.experiment.default_rule)
  if variation.nil?
    return ExperimentEvaluation.create_default(request, context, DecisionReason::TRAFFIC_NOT_ALLOCATED)
  end
  if variation.is_dropped
    return ExperimentEvaluation.create_default(request, context, DecisionReason::VARIATION_DROPPED)
  end

  ExperimentEvaluation.create(request, context, variation, DecisionReason::TRAFFIC_ALLOCATED)
end