class Arpad::Calculator
Public Class Methods
calculate_elo(elo_one, elo_two, outcome, config = {})
click to toggle source
# File lib/arpad.rb, line 5 def self.calculate_elo(elo_one, elo_two, outcome, config = {}) k_factor = config[:k_factor] || 16 transformed_rating_one = calculate_transformed_rating(elo_one) transformed_rating_two = calculate_transformed_rating(elo_two) expected_score = calculate_expected_score( transformed_rating_one, transformed_rating_two ) score_value = calculate_score_value(outcome) (elo_one.to_i + (k_factor * (score_value - expected_score))).to_i end
Private Class Methods
calculate_expected_score(t_rating_one, t_rating_two)
click to toggle source
# File lib/arpad.rb, line 24 def self.calculate_expected_score(t_rating_one, t_rating_two) t_rating_one / (t_rating_one + t_rating_two) end
calculate_score_value(outcome)
click to toggle source
# File lib/arpad.rb, line 28 def self.calculate_score_value(outcome) if outcome == "win" 1 elsif outcome == "lose" 0 elsif outcome == "tie" 0.5 else raise "user inputted #{outcome} which is not a valid outcome" end end
calculate_transformed_rating(elo)
click to toggle source
# File lib/arpad.rb, line 20 def self.calculate_transformed_rating(elo) (10**(elo.to_f / 400)) end