class Mastermind::TopTen

Constants

FILE_NAME
MAXIMUM_TOP

Attributes

file_name[R]
player_records[R]
response[R]
top_ten_records[R]

Public Class Methods

new(response: nil, file_name: FILE_NAME, storage: Datastore::YmlStore.instance) click to toggle source
# File lib/mastermind/top_ten.rb, line 7
def initialize(response: nil, file_name: FILE_NAME, storage: Datastore::YmlStore.instance)
  @response = response || Message.new
  @file_name = file_name
  @datastore = storage

  @datastore.create_file_if_not_exist @file_name
  load_top_ten
end

Public Instance Methods

add_record(player) click to toggle source
# File lib/mastermind/top_ten.rb, line 22
def add_record(player)
  if player.is_a? Player
    player = player.to_h
  elsif player.is_a? Hash
    player
  else
    raise ArgumentError, 'Unsupported Player Value'
  end
  @top_ten_records << player
  arrange_top_ten
  save
end
arrange_top_ten() click to toggle source
# File lib/mastermind/top_ten.rb, line 35
def arrange_top_ten
  @top_ten_records.sort!{ |x, y|
      [x[:guesses], x[:time_taken]] <=> [y[:guesses], y[:time_taken]]
  }
  @top_ten_records = @top_ten_records.slice(0, MAXIMUM_TOP)
end
fetch(number_or_hash) click to toggle source
# File lib/mastermind/top_ten.rb, line 50
def fetch number_or_hash
  if number_or_hash.is_a? Hash
    record = number_or_hash
  elsif number_or_hash.is_a? Integer
    record = @top_ten_records[number_or_hash - 1]
  end
  player = Player.new(player: record)
  player
end
fetch_all() click to toggle source
# File lib/mastermind/top_ten.rb, line 42
def fetch_all
  @player_records = []
  @top_ten_records.each{ |val|
    @player_records << fetch(val)
  }
  @player_records
end
load_top_ten() click to toggle source
# File lib/mastermind/top_ten.rb, line 16
def load_top_ten
  @top_ten_records = @datastore.fetch_yml(@file_name) || []
  arrange_top_ten
  fetch_all
end
save() click to toggle source
# File lib/mastermind/top_ten.rb, line 60
def save
  @datastore.save_top_ten @file_name, @top_ten_records
  load_top_ten
end