class Split::User

Attributes

user[R]

Public Class Methods

new(context, adapter=nil) click to toggle source
# File lib/split/user.rb, line 10
def initialize(context, adapter=nil)
  @user = adapter || Split::Persistence.adapter.new(context)
  @cleaned_up = false
end

Public Instance Methods

active_experiments() click to toggle source
# File lib/split/user.rb, line 43
def active_experiments
  experiment_pairs = {}
  keys_without_finished(user.keys).each do |key|
    Metric.possible_experiments(key_without_version(key)).each do |experiment|
      if !experiment.has_winner?
        experiment_pairs[key_without_version(key)] = user[key]
      end
    end
  end
  experiment_pairs
end
cleanup_old_experiments!(experiment) click to toggle source
# File lib/split/user.rb, line 15
def cleanup_old_experiments! experiment
  return if @cleaned_up
  keys_without_finished(user.keys).each do |key|
    return unless experiment.name == key_without_version(key)
    if experiment.nil? || experiment.has_winner? || experiment.start_time.nil?
      user.delete key
      user.delete Experiment.finished_key(key)
    end
  end
  @cleaned_up = true
end
cleanup_old_versions!(experiment) click to toggle source
# File lib/split/user.rb, line 38
def cleanup_old_versions!(experiment)
  keys = user.keys.select { |k| k.match(Regexp.new(experiment.name)) }
  keys_without_experiment(keys, experiment.key).each { |key| user.delete(key) }
end
max_experiments_reached?(experiment_key) click to toggle source
# File lib/split/user.rb, line 27
def max_experiments_reached?(experiment_key)
  if Split.configuration.allow_multiple_experiments == 'control'
    experiments = active_experiments
    count_control = experiments.count {|k,v| k == experiment_key || v == 'control'}
    experiments.size > count_control
  else
    !Split.configuration.allow_multiple_experiments &&
      keys_without_experiment(user.keys, experiment_key).length > 0
  end
end

Private Instance Methods

key_without_version(key) click to toggle source
# File lib/split/user.rb, line 65
def key_without_version(key)
  key.split(/\:\d(?!\:)/)[0]
end
keys_without_experiment(keys, experiment_key) click to toggle source
# File lib/split/user.rb, line 57
def keys_without_experiment(keys, experiment_key)
  keys.reject { |k| k.match(Regexp.new("^#{experiment_key}(:finished)?$")) }
end
keys_without_finished(keys) click to toggle source
# File lib/split/user.rb, line 61
def keys_without_finished(keys)
  keys.reject { |k| k.include?(":finished") }
end