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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
# File 'lib/trail_guide/experiments/enrollment.rb', line 20
def choose_variant!(override: nil, excluded: false, metadata: nil)
return control if TrailGuide.configuration.disabled
if override.present?
variant = variants.find { |var| var == override } || control
if running? && !is_combined?
variant.increment_participation! if configuration.track_override
participant.participating!(variant) if configuration.store_override
end
return variant
end
if winner?
variant = winning_variant
if track_winner_conversions? && running?
variant.increment_participation! unless participant.variant == variant
participant.exit! if participant.participating? && participant.variant != variant
participant.participating!(variant)
end
return variant
end
return control if excluded || stopped?
if !started? && start_manually?
if enable_calibration?
unless participant.variant == control
control.increment_participation!
parent.control.increment_participation! if is_combined?
end
if participant.participating? && participant.variant != control
participant.exit!
parent.participant.exit! if is_combined?
end
participant.participating!(control)
parent.participant.participating!(parent.control) if is_combined?
end
return control
end
start! unless started? || scheduled?
return control unless running?
if configuration.sticky_assignment? && participant.participating?
variant = participant.variant
participant.participating!(variant) if track_participation?(metadata)
return variant
end
return control unless is_combined? || TrailGuide.configuration.allow_multiple_experiments == true || !participant.participating_in_active_experiments?(TrailGuide.configuration.allow_multiple_experiments == false)
return control unless allow_participation?(metadata)
variant = algorithm_choose!(metadata: metadata)
if track_participation?(metadata)
variant.increment_participation!
participant.participating!(variant)
end
run_callbacks(:on_choose, variant, participant, metadata)
variant
end
|