def self.start_experiment!(test_name, alternatives_array, conversion_name = nil)
conversion_name ||= test_name
conversion_name.gsub!(" ", "_")
cloned_alternatives_array = alternatives_array.clone
ActiveRecord::Base.transaction do
experiment = Abingo::Experiment.find_or_create_by_test_name(test_name)
experiment.alternatives.destroy_all
while (cloned_alternatives_array.size > 0)
alt = cloned_alternatives_array[0]
weight = cloned_alternatives_array.size - (cloned_alternatives_array - [alt]).size
experiment.alternatives.build(:content => alt, :weight => weight,
:lookup => Abingo::Alternative.calculate_lookup(test_name, alt))
cloned_alternatives_array -= [alt]
end
experiment.status = "Live"
experiment.save(:validate => 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