Last active
August 29, 2015 14:27
-
-
Save michaelchadwick/0c46a86c07c5e3eff715 to your computer and use it in GitHub Desktop.
Save/Load module
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
require 'io/console' | |
class SaveLoad | |
SAVE_DATA_FILE = 'save.conf' | |
attr_accessor :data_changed | |
def initialize | |
self.data_changed = false | |
end | |
module Config | |
def self.add key, value | |
@@data ||= {} | |
@@data[key] = value | |
end | |
def self.data | |
@@data ||= {} | |
end | |
end | |
def show_change_data_menu | |
puts 'Change Data' | |
puts '-----------' | |
puts | |
puts " (1) Name: #{Config.data['name']}" | |
puts " (2) Age: #{Config.data['age']}" | |
puts " (3) Hometown: #{Config.data['hometown']}" | |
puts | |
puts ' (q) Back to main menu' | |
puts | |
print 'data> ' | |
choice = STDIN.getch.downcase | |
case choice | |
when '1' | |
print 'Name: ' | |
answer = gets.chomp | |
unless answer.empty? | |
if Config.data['name'].nil? | |
Config.add 'name', answer | |
else | |
Config.data['name'] = answer | |
end | |
self.data_changed = true | |
end | |
show_change_data_menu | |
when '2' | |
print 'Age: ' | |
answer = gets.chomp | |
unless answer.empty? | |
if Config.data['age'].nil? | |
Config.add 'age', answer | |
else | |
Config.data['age'] = answer | |
end | |
self.data_changed = true | |
end | |
show_change_data_menu | |
when '3' | |
print 'Hometown: ' | |
answer = gets.chomp | |
unless answer.empty? | |
if Config.data['hometown'].nil? | |
Config.add 'hometown', answer | |
else | |
Config.data['hometown'] = answer | |
end | |
self.data_changed = true | |
end | |
show_change_data_menu | |
when 'q', 'x' | |
puts | |
return | |
else | |
show_change_data_menu | |
end | |
end | |
def show_main_menu | |
puts 'Main Menu' | |
puts '---------' | |
puts | |
puts ' (1) Display loaded data' | |
puts ' (2) Change data' | |
puts ' (3) Read from save file' | |
puts ' (4) Write to save file' | |
puts | |
puts ' (q) Quit from script' | |
puts | |
print 'menu> ' | |
choice = STDIN.getch.downcase | |
case choice | |
when '1' | |
puts choice | |
display_loaded_data | |
show_main_menu | |
when '2' | |
puts choice | |
show_change_data_menu | |
show_main_menu | |
when '3' | |
puts choice | |
read_from_save | |
show_main_menu | |
when '4' | |
puts choice | |
write_to_save | |
show_main_menu | |
when 'x', 'q' | |
puts choice | |
if data_changed | |
puts 'You changed stuff. Do you want to save before exiting? (y/n)' | |
answer = STDIN.getch.downcase | |
case answer | |
when 'y' | |
write_to_save | |
end | |
end | |
puts "Exiting..." | |
exit | |
else | |
show_main_menu | |
end | |
end | |
def display_loaded_data | |
if Config.data.empty? | |
puts 'No loaded data yet.' | |
puts | |
else | |
Config.data.each do |key, val| | |
puts "#{key} : #{val}" | |
end | |
puts | |
end | |
end | |
def read_from_save | |
if File.exist?(SAVE_DATA_FILE) | |
#save_data = YAML.load_file(SAVE_DATA_FILE) | |
File.open(SAVE_DATA_FILE).readlines.each do |line| | |
l = line.split(':') | |
Config.add l[0], l[1] | |
end | |
puts "Read from #{SAVE_DATA_FILE}" | |
puts | |
else | |
puts 'No save file.' | |
end | |
end | |
def write_to_save | |
File.open(SAVE_DATA_FILE, 'w') do |f| | |
Config.data.each do |key, val| | |
f.puts "#{key}:#{val}" | |
end | |
end | |
puts "Wrote to #{SAVE_DATA_FILE}" | |
puts | |
end | |
end | |
puts 'Welcome to the Save/Load data test!' | |
puts | |
sl = SaveLoad.new | |
sl.show_main_menu |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment