Added ConfigFile for persistent hash storage

This commit is contained in:
2020-01-29 18:22:24 -06:00
parent 8c34293307
commit 7f25cd49fe
2 changed files with 48 additions and 0 deletions

View File

@@ -4,6 +4,7 @@ rescue LoadError => e
pp e pp e
require "gosu" require "gosu"
end end
require "json"
require_relative "cyberarm_engine/version" require_relative "cyberarm_engine/version"
@@ -24,6 +25,7 @@ require_relative "cyberarm_engine/animator"
require_relative "cyberarm_engine/text" require_relative "cyberarm_engine/text"
require_relative "cyberarm_engine/timer" require_relative "cyberarm_engine/timer"
require_relative "cyberarm_engine/config_file"
require_relative "cyberarm_engine/ui/dsl" require_relative "cyberarm_engine/ui/dsl"

View File

@@ -0,0 +1,46 @@
module CyberarmEngine
class ConfigFile
def initialize(file:)
@file = file
if File.exist?(@file)
deserialize
else
@data = {}
end
end
def []= *keys, value
last_key = keys.last
if keys.size == 1
hash = @data
else
keys.pop
hash = @data[keys.shift] ||= {}
keys.each do |key|
hash[key] ||= {}
end
end
hash[last_key] = value
end
def get(*keys)
@data.dig(*keys)
end
def serialize
JSON.dump(@data)
end
def deserialize
@data = JSON.parse(File.read(@file), symbolize_names: true)
end
def save!
File.open(@file, "w") { |f| f.write(serialize) }
end
end
end