Class: AB::Alternative

Inherits:
Object
  • Object
show all
Defined in:
lib/ab/alternative.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(test, name, options = {}, &value_proc) ⇒ Alternative



6
7
8
9
# File 'lib/ab/alternative.rb', line 6

def initialize(test, name, options = {}, &value_proc)
  @test, @name, @options, @value_proc = test, name, options, value_proc
  @test.update_percentage_range(self) if percent
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



3
4
5
# File 'lib/ab/alternative.rb', line 3

def name
  @name
end

#rangeObject

Returns the value of attribute range.



4
5
6
# File 'lib/ab/alternative.rb', line 4

def range
  @range
end

Instance Method Details

#conversionsObject



46
47
48
# File 'lib/ab/alternative.rb', line 46

def conversions
  redis.zcard(conversions_key)
end

#conversions_keyObject



34
35
36
# File 'lib/ab/alternative.rb', line 34

def conversions_key
  @conversions_key ||= views_key + ":conversions"
end

#percentObject



11
12
13
# File 'lib/ab/alternative.rb', line 11

def percent
  @options[:percent]
end

#resultsObject



50
51
52
53
54
55
56
57
58
# File 'lib/ab/alternative.rb', line 50

def results
  {
    :name => name,
    :value => value,
    :views => views,
    :conversions => conversions,
    :percent => percent
  }
end

#track_conversion!(identity) ⇒ Object



38
39
40
41
42
43
44
# File 'lib/ab/alternative.rb', line 38

def track_conversion!(identity)
  return if identity.nil?
  return if redis.zscore(conversions_key, identity)
  return unless redis.zscore(views_key, identity)
  score = Time.now.to_i
  redis.zadd(conversions_key, score, identity)
end

#valueObject



15
16
17
# File 'lib/ab/alternative.rb', line 15

def value
  @value ||= @value_proc.call
end

#view!(identity) ⇒ Object



23
24
25
26
27
28
# File 'lib/ab/alternative.rb', line 23

def view!(identity)
  return if identity.nil?
  return if redis.zscore(views_key, identity)
  score = Time.now.to_i
  redis.zadd(views_key, score, identity)
end

#viewsObject



30
31
32
# File 'lib/ab/alternative.rb', line 30

def views
  redis.zcard(views_key)
end

#views_keyObject



19
20
21
# File 'lib/ab/alternative.rb', line 19

def views_key
  @views_key ||= "ab:#{@test.name}:#{@name}"
end