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 }
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] }
participant.converted!(variant, checkpoint, reset: resettable?)
variant.increment_conversion!(checkpoint)
run_callbacks(:on_convert, variant, checkpoint, metadata)
variant
end
|