class ABSwitcher::Switcher

Constants

HEX_MAX

Attributes

major_probability[R]
major_value[R]
minor_value[R]

Public Class Methods

new(ratio, another_ratio = nil, major: true, minor: false) click to toggle source
# File lib/ab_switcher/switcher.rb, line 7
def initialize(ratio, another_ratio = nil, major: true, minor: false)
  @major_probability = calc_major_probability(ratio, another_ratio)
  @major_value, @minor_value = major, minor
end

Public Instance Methods

hex_switch(hex_str) click to toggle source
# File lib/ab_switcher/switcher.rb, line 12
def hex_switch(hex_str)
  hex = hex_str[0].hex rescue HEX_MAX
  flt = hex / HEX_MAX

  if flt <= major_probability
    major_value
  else
    minor_value
  end
end

Private Instance Methods

calc_major_probability(ratio, another_ratio = nil) click to toggle source
# File lib/ab_switcher/switcher.rb, line 25
def calc_major_probability(ratio, another_ratio = nil)
  ratio = ratio.to_f

  probability = if another_ratio.nil?
    convert_ratio_into_probability(ratio)
  else
    calc_probability(ratio, another_ratio)
  end

  probability > 0.5 ? probability : 1 - probability
end
calc_probability(ratio, another_ratio) click to toggle source
# File lib/ab_switcher/switcher.rb, line 49
def calc_probability(ratio, another_ratio)
  ratio / (ratio + another_ratio)
end
convert_ratio_into_probability(ratio) click to toggle source
# File lib/ab_switcher/switcher.rb, line 37
def convert_ratio_into_probability(ratio)
  if ratio.between?(1, 100)
    # 1 goes here
    ratio / 100
  elsif ratio.between?(0, 1)
    ratio
  else
    # TODO handle
    raise DOUSHIYOU
  end
end