Class: Mastermind::SaveGame

Inherits:
Object
  • Object
show all
Defined in:
lib/mastermind/extensions/savegame.rb

Constant Summary collapse

SAVE_GAME_FILE =
'game_file.yml'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(datastore: Datastore::YmlStore.instance, game_file: SAVE_GAME_FILE) ⇒ SaveGame

Returns a new instance of SaveGame.



5
6
7
8
9
10
11
# File 'lib/mastermind/extensions/savegame.rb', line 5

def initialize(datastore: Datastore::YmlStore.instance, game_file: SAVE_GAME_FILE)
  @datastore = datastore
  @game_file = game_file

  @datastore.filename=@game_file
  load_records
end

Instance Attribute Details

#datastoreObject (readonly)

Returns the value of attribute datastore.



3
4
5
# File 'lib/mastermind/extensions/savegame.rb', line 3

def datastore
  @datastore
end

#game_fileObject (readonly)

Returns the value of attribute game_file.



3
4
5
# File 'lib/mastermind/extensions/savegame.rb', line 3

def game_file
  @game_file
end

#saved_recordObject (readonly)

Returns the value of attribute saved_record.



3
4
5
# File 'lib/mastermind/extensions/savegame.rb', line 3

def saved_record
  @saved_record
end

Instance Method Details

#fetch_all_recordsObject



31
32
33
34
# File 'lib/mastermind/extensions/savegame.rb', line 31

def fetch_all_records
 @save_record = @datastore.fetch_multiple_records @game_file
 @save_record
end

#fetch_player(player_name) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
# File 'lib/mastermind/extensions/savegame.rb', line 36

def fetch_player(player_name)
  if player_name.is_a? Integer
    record = @save_record[player_name - 1]
  elsif player_name.is_a? String
    record = @save_record.select{ |record|
      record[:name].downcase == player_name.downcase
    }.first
  end
  return set_player_attr(record) if record
  false
end

#fetch_record(user_name) ⇒ Object



65
66
67
# File 'lib/mastermind/extensions/savegame.rb', line 65

def fetch_record(user_name)

end

#load_recordsObject



13
14
15
16
17
# File 'lib/mastermind/extensions/savegame.rb', line 13

def load_records
  @save_record = fetch_all_records || []
  @save_record.flatten!
  @save_record
end

#remove_data_from_save_record(record) ⇒ Object



56
57
58
59
# File 'lib/mastermind/extensions/savegame.rb', line 56

def remove_data_from_save_record(record)
  @save_record.delete(record)
  save
end

#saveObject



61
62
63
# File 'lib/mastermind/extensions/savegame.rb', line 61

def save
  @datastore.save(@game_file, @save_record)
end

#save_record(player) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
# File 'lib/mastermind/extensions/savegame.rb', line 19

def save_record(player)
  if player.is_a? Player
    player = player.to_h
  elsif player.is_a? Hash
    player
  else
    raise ArgumentError, 'Invalid player'
  end
  @datastore.save(@game_file, player, 'a+')
  load_records
end

#set_player_attr(record) ⇒ Object



48
49
50
51
52
53
54
# File 'lib/mastermind/extensions/savegame.rb', line 48

def set_player_attr(record)
  player = Player.new
  player.set_save_attr(record)

  remove_data_from_save_record(record)
  player
end