module Fabes::Helper

Public Instance Methods

fabes(name, control, *alternatives) click to toggle source
# File lib/fabes/helper.rb, line 3
def fabes(name, control, *alternatives)
  experiment = Fabes::Experiment.find_or_create(name, *([control] + alternatives))
  if trackable_for experiment.name
    alternative = experiment.select_alternative!
    set_cookie_for experiment, alternative
    alternative.increment_participants!
    alternative.update_weight
  else
    alternative = current_alternative_for experiment
  end

  alternative.payload
rescue
  control
end
score!(name) click to toggle source
# File lib/fabes/helper.rb, line 19
def score!(name)
  experiment = Fabes::Experiment.find name
  alternative = current_alternative_for experiment
  if scorable? experiment.name
    alternative.increment_hits!
    alternative.update_weight
    mark_as_scored experiment.name
  end
rescue
  #Failed scoring, do nothin'
  nil
end

Private Instance Methods

current_alternative_for(experiment) click to toggle source
# File lib/fabes/helper.rb, line 42
def current_alternative_for(experiment)
  id = tracking[experiment.name]
  experiment.find_alternative id
end
mark_as_scored(name) click to toggle source
# File lib/fabes/helper.rb, line 63
def mark_as_scored(name)
  tracking[name] = :done
end
marked_as_scored?(name) click to toggle source
# File lib/fabes/helper.rb, line 59
def marked_as_scored?(name)
  tracking[name] == :done
end
scorable?(name) click to toggle source
# File lib/fabes/helper.rb, line 55
def scorable?(name)
  has_cookie_for(name) && !marked_as_scored?(name)
end
trackable_for(name) click to toggle source
# File lib/fabes/helper.rb, line 47
def trackable_for(name)
  !has_cookie_for(name) && !marked_as_scored?(name)
end
tracking() click to toggle source
# File lib/fabes/helper.rb, line 34
def tracking
  session[:fabes] ||= {}
end