Class: Hackle::TargetRuleExperimentFlowEvaluator
- Inherits:
-
Object
- Object
- Hackle::TargetRuleExperimentFlowEvaluator
- Includes:
- ExperimentFlowEvaluator
- Defined in:
- lib/hackle/internal/evaluation/evaluator/experiment/experiment_flow_evaluator.rb
Instance Method Summary collapse
- #evaluate(request, context, next_flow) ⇒ Object
-
#initialize(target_rule_determiner:, action_resolver:) ⇒ TargetRuleExperimentFlowEvaluator
constructor
A new instance of TargetRuleExperimentFlowEvaluator.
Constructor Details
#initialize(target_rule_determiner:, action_resolver:) ⇒ TargetRuleExperimentFlowEvaluator
Returns a new instance of TargetRuleExperimentFlowEvaluator.
150 151 152 153 154 155 |
# File 'lib/hackle/internal/evaluation/evaluator/experiment/experiment_flow_evaluator.rb', line 150 def initialize(target_rule_determiner:, action_resolver:) # @type [ExperimentTargetRuleDeterminer] @target_rule_determiner = target_rule_determiner # @type [ExperimentActionResolver] @action_resolver = action_resolver end |
Instance Method Details
#evaluate(request, context, next_flow) ⇒ Object
157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
# File 'lib/hackle/internal/evaluation/evaluator/experiment/experiment_flow_evaluator.rb', line 157 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 return next_flow.evaluate(request, context) if request.user.identifiers[request.experiment.identifier_type].nil? target_rule = @target_rule_determiner.determine_target_rule_or_nil(request, context) return next_flow.evaluate(request, context) if target_rule.nil? variation = @action_resolver.resolve_or_nil(request, target_rule.action) raise ArgumentError, "feature flag must decide the variation [#{request.experiment.id}]" if variation.nil? ExperimentEvaluation.create(request, context, variation, DecisionReason::TARGET_RULE_MATCH) end |