Class: Hackle::ExperimentEvaluationFlowFactory

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

Instance Method Summary collapse

Constructor Details

#initialize(target_matcher:, bucketer:) ⇒ ExperimentEvaluationFlowFactory

Returns a new instance of ExperimentEvaluationFlowFactory.

Parameters:



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/hackle/internal/evaluation/evaluator/experiment/experiment_evaluation_flow_factory.rb', line 12

def initialize(target_matcher:, bucketer:)

  action_resolver = ExperimentActionResolver.new(bucketer: bucketer)
  override_resolver = ExperimentOverrideResolver.new(
    target_matcher: target_matcher,
    action_resolver: action_resolver
  )
  container_resolver = ExperimentContainerResolver.new(bucketer: bucketer)
  target_determiner = ExperimentTargetDeterminer.new(target_matcher: target_matcher)
  target_rule_determiner = ExperimentTargetRuleDeterminer.new(target_matcher: target_matcher)

  # @type [ExperimentFlow]
  @ab_test_flow = EvaluationFlow.create(
    [
      OverrideExperimentFlowEvaluator.new(override_resolver: override_resolver),
      IdentifierExperimentFlowEvaluator.new,
      ContainerExperimentFlowEvaluator.new(container_resolver: container_resolver),
      TargetExperimentFlowEvaluator.new(target_determiner: target_determiner),
      DraftExperimentFlowEvaluator.new,
      PausedExperimentFlowEvaluator.new,
      CompletedExperimentFlowEvaluator.new,
      TrafficAllocateExperimentFlowEvaluator.new(action_resolver: action_resolver)
    ]
  )

  # @type [ExperimentFlow]
  @feature_flag_flow = EvaluationFlow.create(
    [
      DraftExperimentFlowEvaluator.new,
      PausedExperimentFlowEvaluator.new,
      CompletedExperimentFlowEvaluator.new,
      OverrideExperimentFlowEvaluator.new(override_resolver: override_resolver),
      IdentifierExperimentFlowEvaluator.new,
      TargetRuleExperimentFlowEvaluator.new(
        target_rule_determiner: target_rule_determiner,
        action_resolver: action_resolver
      ),
      DefaultRuleExperimentFlowEvaluator.new(action_resolver: action_resolver)
    ]
  )
end

Instance Method Details

#get(experiment_type) ⇒ ExperimentFlow

Parameters:

Returns:



56
57
58
59
60
61
62
63
64
65
# File 'lib/hackle/internal/evaluation/evaluator/experiment/experiment_evaluation_flow_factory.rb', line 56

def get(experiment_type)
  case experiment_type
  when ExperimentType::AB_TEST
    @ab_test_flow
  when ExperimentType::FEATURE_FLAG
    @feature_flag_flow
  else
    raise ArgumentError, "unsupported ExperimentType [#{experiment_type}]"
  end
end