Class: Hackle::DefaultRuleExperimentFlowEvaluator

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:) ⇒ DefaultRuleExperimentFlowEvaluator

Returns a new instance of DefaultRuleExperimentFlowEvaluator.

Parameters:



181
182
183
184
# File 'lib/hackle/internal/evaluation/evaluator/experiment/experiment_flow_evaluator.rb', line 181

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

Instance Method Details

#evaluate(request, context, _next_flow) ⇒ Object

Raises:

  • (ArgumentError)


186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
# File 'lib/hackle/internal/evaluation/evaluator/experiment/experiment_flow_evaluator.rb', line 186

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::FEATURE_FLAG
    raise ArgumentError, "experiment type must be FEATURE_FLAG [#{request.experiment.id}]"
  end

  if request.user.identifiers[request.experiment.identifier_type].nil?
    return ExperimentEvaluation.create_default(request, context, DecisionReason::DEFAULT_RULE)
  end

  variation = @action_resolver.resolve_or_nil(request, request.experiment.default_rule)
  raise ArgumentError, "feature flag must decide the variation [#{request.experiment.id}]" if variation.nil?

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