class Divisio::ModuloAlgorithm

Attributes

key[R]
variants[R]

Public Class Methods

new(key, variants) click to toggle source
# File lib/divisio/modulo_algorithm.rb, line 6
def initialize(key, variants)
  @key      = key.to_s
  @variants = variants_as_array(variants)
end

Public Instance Methods

calc() click to toggle source
# File lib/divisio/modulo_algorithm.rb, line 11
def calc
  number_of_variants = variants.size
  position           = Digest::MD5.hexdigest(key).to_i(16) % number_of_variants

  variants[position]
end

Private Instance Methods

variants_as_array(variants) click to toggle source
# File lib/divisio/modulo_algorithm.rb, line 20
def variants_as_array(variants)
  return Array(variants) unless variants.is_a? Hash
  flattened_variants = []
  variants.each_pair do |name, weight|
    weight.times { flattened_variants << name }
  end
  flattened_variants
end