def self.start_experiment!(test_name, alternatives_array, conversion_name = nil)
ABingoCampingPlugin.logger.debug "Experiment> start_experiment(test_name=#{test_name}, alternatives_array=#{alternatives_array.inspect}, conversion_name=#{conversion_name})"
conversion_name ||= test_name
conversion_name.gsub!(" ", "_")
cloned_alternatives_array = alternatives_array.clone
ActiveRecord::Base.transaction do
experiment = ABingoCampingPlugin::Models::Experiment.find_or_create_by_test_name(test_name)
experiment.alternatives.destroy_all
while (cloned_alternatives_array.size > 0)
alt = cloned_alternatives_array[0]
if alt.is_a?(TrueClass) || alt.is_a?(FalseClass)
alt_to_store = alt.to_s
else
alt_to_store = alt
end
weight = cloned_alternatives_array.size - (cloned_alternatives_array - [alt]).size
experiment.alternatives.build(:content => alt_to_store, :weight => weight,
:lookup => ABingoCampingPlugin::Models::Alternative.calculate_lookup(test_name, alt_to_store))
cloned_alternatives_array -= [alt]
end
experiment.status = "Live"
experiment.save(false)
Abingo.cache.write("Abingo::Experiment::exists(#{test_name})".gsub(" ", "_"), 1)
tests_listening_to_conversion = Abingo.cache.read("Abingo::tests_listening_to_conversion#{conversion_name}") || []
tests_listening_to_conversion << test_name unless tests_listening_to_conversion.include? test_name
Abingo.cache.write("Abingo::tests_listening_to_conversion#{conversion_name}", tests_listening_to_conversion)
experiment
end
end