Module: Split::Counters

Defined in:
lib/split/counters.rb,
lib/split/counters/version.rb

Constant Summary collapse

VERSION =
"0.3.1"

Class Method Summary collapse

Class Method Details

.all_counter_namesObject



56
57
58
# File 'lib/split/counters.rb', line 56

def self.all_counter_names
  Split.redis.smembers(:counters)
end

.all_values_hash(name) ⇒ Object



45
46
47
48
49
50
51
52
53
54
# File 'lib/split/counters.rb', line 45

def self.all_values_hash(name)
  return_hash = {}
  result_hash = Split.redis.hgetall(self.hash_name_for_name(name))  # {"exp1:alt1"=>"1", "exp1:alt2"=>"2", "exp2:alt1"=>"1", "exp2:alt2"=>"2"}
  result_hash.each do |key, value| 
    experiment, alternative = key.split(":")
    return_hash[experiment] ||= Hash.new
    return_hash[experiment].merge!({ alternative => value.to_i })
  end
  return_hash
end

.current_value(name, experiment, alternative) ⇒ Object



28
29
30
# File 'lib/split/counters.rb', line 28

def self.current_value(name, experiment, alternative)
  Split.redis.hget(Split::Counters.hash_name_for_name(name), Split::Counters.keyname_for_experiment_and_alternative(experiment, alternative))
end

.delete(name) ⇒ Object



36
37
38
39
# File 'lib/split/counters.rb', line 36

def self.delete(name)
  Split.redis.srem(:counters, name)
  Split.redis.del(Split::Counters.hash_name_for_name(name))
end

.exists?(name) ⇒ Boolean

Returns:

  • (Boolean)


32
33
34
# File 'lib/split/counters.rb', line 32

def self.exists?(name)
  Split.redis.exists(Split::Counters.hash_name_for_name(name))
end

.hash_name_for_name(in_name) ⇒ Object



15
16
17
# File 'lib/split/counters.rb', line 15

def self.hash_name_for_name(in_name)
  "co:#{in_name}"
end

.inc(name, experiment, alternative) ⇒ Object



23
24
25
26
# File 'lib/split/counters.rb', line 23

def self.inc(name, experiment, alternative)
  Split.redis.sadd(:counters, name)
  Split.redis.hincrby(Split::Counters.hash_name_for_name(name), Split::Counters.keyname_for_experiment_and_alternative(experiment, alternative), 1)
end

.keyname_for_experiment_and_alternative(experiment, alternative) ⇒ Object



19
20
21
# File 'lib/split/counters.rb', line 19

def self.keyname_for_experiment_and_alternative(experiment, alternative)
  [experiment.gsub(":", ""), alternative.gsub(":", "")].join(':')
end

.reset(name, experiment, alternative) ⇒ Object



41
42
43
# File 'lib/split/counters.rb', line 41

def self.reset(name, experiment, alternative)
  Split.redis.hdel(Split::Counters.hash_name_for_name(name), Split::Counters.keyname_for_experiment_and_alternative(experiment, alternative))
end