Method: TrailGuide::Experiment#convert!

Defined in:
lib/trail_guide/experiment.rb

#convert!(checkpoint = nil, metadata: nil) ⇒ Object

Raises:



178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
# File 'lib/trail_guide/experiment.rb', line 178

def convert!(checkpoint=nil, metadata: nil)
  return false unless participating?
  raise InvalidGoalError, "Invalid goal checkpoint `#{checkpoint}` for `#{experiment_name}`." unless checkpoint.present? || funnels.empty?
  raise InvalidGoalError, "Invalid goal checkpoint `#{checkpoint}` for `#{experiment_name}`." unless checkpoint.nil? || funnels.any? { |funnel| funnel == checkpoint.to_s.underscore.to_sym }
  # TODO eventually allow progressing through funnel checkpoints towards goals
  if converted?(checkpoint)
    return false unless allow_multiple_conversions?
  elsif converted?
    return false unless allow_multiple_goals?
  end

  variant = variants.find { |var| var == participant[storage_key] }
  # TODO eventually only reset if we're at the final goal in a funnel
  participant.converted!(variant, checkpoint, reset: resettable?)
  variant.increment_conversion!(checkpoint)
  run_callbacks(:on_convert, variant, checkpoint, )
  variant
end