class Skillz::Player

Attributes

skill_level[RW]
skill_uncertainty[RW]
temporary_id[RW]

Public Class Methods

new(skill_level=nil, uncertainty=nil, last_match_time=nil, temporary_id=nil) click to toggle source
# File lib/skillz/player.rb, line 8
def initialize(skill_level=nil, uncertainty=nil, last_match_time=nil, temporary_id=nil)
  @skill_level = skill_level || Skillz::INITIAL_SKILL_LEVEL
  @skill_uncertainty = uncertainty || Skillz::UNCERTAINTY
  @temporary_id = temporary_id || SecureRandom.uuid
  adjust_for_inactivity(last_match_time) if last_match_time
end

Public Instance Methods

adjusted_skill_level() click to toggle source
# File lib/skillz/player.rb, line 15
def adjusted_skill_level
  @skill_level - (@skill_uncertainty * 0.5)
end

Private Instance Methods

adjust_for_inactivity(last_match_time) click to toggle source
# File lib/skillz/player.rb, line 21
def adjust_for_inactivity(last_match_time)
  days = (Time.now - last_match_time).to_i / (24 * 60 * 60)
  return if days <= 25
  time_decay = 1 - Math.exp((days * -1.0)/365)
  time_decay *= [[skill_uncertainty, 4].max, 10].min
  @skill_uncertainty += time_decay
end