Sha256: 6e1600b8a42f4ac5b152800828391ee3cb3ec35bcf69aa37f2931bb73e6d28c5
Contents?: true
Size: 1.25 KB
Versions: 2
Compression:
Stored size: 1.25 KB
Contents
module Metry class Experiment include MongoMapper::Document METHODS = { "rand" => proc{|list, experiment| list.sort_by{rand}.first}, "sequential" => proc do |list, experiment| r = list[experiment.counter%list.size] experiment.counter += 1 experiment.save r end } key :name, String key :counter, Integer, :default => 0 many :cohorts, :class_name => 'Metry::Cohort', :foreign_key => 'experiment_id' many :goals, :class_name => "Metry::Goal", :foreign_key => "experiment_id" def self.find_or_create_by_name(name) find(:first, :conditions => {:name => name}) || create(:name => name) end def lookup_cohort(name) cohort = cohorts.find(:first, :conditions => {:name => name}) unless cohort cohort = Cohort.create(:name => name) cohorts << cohort end cohort end def cohort_for(visitor) cohorts.detect{|e| e.visitor_ids.include?(visitor.id)} end def choose(options, method, event, visitor) cohort = cohort_for(visitor) unless cohort cohort = lookup_cohort(METHODS[method||'rand'][options, self]) visitor.in_cohort(cohort) end cohort.name end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
metry-2.1.0 | lib/metry/experiment.rb |
metry-2.1.1 | lib/metry/experiment.rb |