Class: Verdict::Segmenters::FixedPercentageSegmenter

Inherits:
BaseSegmenter
  • Object
show all
Defined in:
lib/verdict/segmenters/fixed_percentage_segmenter.rb

Direct Known Subclasses

RandomPercentageSegmenter

Defined Under Namespace

Classes: Group

Class Attribute Summary collapse

Attributes inherited from BaseSegmenter

#experiment, #groups

Instance Method Summary collapse

Methods inherited from BaseSegmenter

#conversion_feedback, #group

Constructor Details

#initialize(experiment) ⇒ FixedPercentageSegmenter

Returns a new instance of FixedPercentageSegmenter.



5
6
7
8
# File 'lib/verdict/segmenters/fixed_percentage_segmenter.rb', line 5

def initialize(experiment)
  super
  @total_percentage_segmented = 0
end

Class Attribute Details

.saltObject

Returns the value of attribute salt.



56
57
58
# File 'lib/verdict/segmenters/fixed_percentage_segmenter.rb', line 56

def salt
  @salt
end

Instance Method Details

#assign(identifier, subject, context) ⇒ Object



28
29
30
31
# File 'lib/verdict/segmenters/fixed_percentage_segmenter.rb', line 28

def assign(identifier, subject, context)
  percentile = Digest::MD5.hexdigest("#{@experiment.handle}#{identifier}#{self.class.salt}").to_i(16) % 100
  groups.values.find { |group| group.percentile_range.include?(percentile) }
end

#register_group(handle, size) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/verdict/segmenters/fixed_percentage_segmenter.rb', line 14

def register_group(handle, size)
  percentage = size.kind_of?(Hash) && size[:percentage] ? size[:percentage] : size
  n = case percentage
    when :rest; 100 - @total_percentage_segmented
    when :half; 50
    when Integer; percentage
    else Integer(percentage)
  end

  group = Group.new(experiment, handle, @total_percentage_segmented ... (@total_percentage_segmented + n))
  @total_percentage_segmented += n
  return group
end

#verify!Object



10
11
12
# File 'lib/verdict/segmenters/fixed_percentage_segmenter.rb', line 10

def verify!
  raise Verdict::SegmentationError, "Should segment exactly 100% of the cases, but segments add up to #{@total_percentage_segmented}%." if @total_percentage_segmented != 100
end