Class: Ab::Indexer

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

Defined Under Namespace

Classes: Randomizer

Class Method Summary collapse

Class Method Details

.call(opts = {}) ⇒ Object

Raises:

  • (IndexError)


3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/ab/indexer.rb', line 3

def self.call(opts={})
  validate_options(opts)

  value = opts[:value].to_s
  chances = opts[:chances]
  salt = opts[:seed].to_s

  seed = Digest::SHA1.hexdigest(salt + value).to_i(16)
  random_number = Randomizer.new(seed).rand(1..100)

  sum = 0
  chances.each_index do |index|
    min = sum
    max = chances[index] + sum

    if (min..max).include?(random_number)
      return index
    end

    sum = max
  end
  raise IndexError.new("Could not resolve any index for the given chances")
end