Class: Verdict::Segmenters::FixedPercentageSegmenter
- Inherits:
-
BaseSegmenter
- Object
- BaseSegmenter
- Verdict::Segmenters::FixedPercentageSegmenter
- Defined in:
- lib/verdict/segmenters/fixed_percentage_segmenter.rb
Direct Known Subclasses
Defined Under Namespace
Classes: Group
Class Attribute Summary collapse
-
.salt ⇒ Object
Returns the value of attribute salt.
Attributes inherited from BaseSegmenter
Instance Method Summary collapse
- #assign(identifier, subject, context) ⇒ Object
-
#initialize(experiment) ⇒ FixedPercentageSegmenter
constructor
A new instance of FixedPercentageSegmenter.
- #register_group(handle, size) ⇒ Object
- #verify! ⇒ Object
Methods inherited from BaseSegmenter
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
.salt ⇒ Object
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 |