Method: TrailGuide::Experiment#choose_variant!

Defined in:
lib/trail_guide/experiment.rb

#choose_variant!(override: nil, excluded: false, metadata: nil) ⇒ Object



157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
# File 'lib/trail_guide/experiment.rb', line 157

def choose_variant!(override: nil, excluded: false, metadata: nil)
  return control if TrailGuide.configuration.disabled
  if override.present?
    variant = variants.find { |var| var == override }
    return variant unless configuration.track_override && started?
  else
    return winner if winner?
    return control if excluded
    return control if !started? && configuration.start_manually
    start! unless started?
    return variants.find { |var| var == participant[storage_key] } if participating?
    return control unless TrailGuide.configuration.allow_multiple_experiments == true || !participant.participating_in_active_experiments?(TrailGuide.configuration.allow_multiple_experiments == false) 

    variant = algorithm.choose!(metadata: )
  end

  variant.increment_participation!
  run_callbacks(:on_choose, variant, )
  variant
end