Class: Verdict::Segmenters::RolloutSegmenter
Defined Under Namespace
Classes: Group
Instance Attribute Summary
#experiment, #groups
Instance Method Summary
collapse
#conversion_feedback, #group
Constructor Details
Returns a new instance of RolloutSegmenter.
5
6
7
8
|
# File 'lib/verdict/segmenters/rollout_segmenter.rb', line 5
def initialize(experiment)
super
@total_percentage_segmented = 0
end
|
Instance Method Details
#assign(identifier, subject, context) ⇒ Object
28
29
30
31
|
# File 'lib/verdict/segmenters/rollout_segmenter.rb', line 28
def assign(identifier, subject, context)
percentile = Digest::MD5.hexdigest("#{@experiment.handle}#{identifier}").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/rollout_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/rollout_segmenter.rb', line 10
def verify!
raise Verdict::SegmentationError, "Should segment less than 100% of the cases, but segments add up to #{@total_percentage_segmented}%." if @total_percentage_segmented >= 100
end
|