From 7f25cd49fec6488e7d9384ee1cdf29da905bd22b Mon Sep 17 00:00:00 2001 From: Cyberarm Date: Wed, 29 Jan 2020 18:22:24 -0600 Subject: [PATCH] Added ConfigFile for persistent hash storage --- lib/cyberarm_engine.rb | 2 ++ lib/cyberarm_engine/config_file.rb | 46 ++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 lib/cyberarm_engine/config_file.rb diff --git a/lib/cyberarm_engine.rb b/lib/cyberarm_engine.rb index a7c67f3..d534894 100644 --- a/lib/cyberarm_engine.rb +++ b/lib/cyberarm_engine.rb @@ -4,6 +4,7 @@ rescue LoadError => e pp e require "gosu" end +require "json" require_relative "cyberarm_engine/version" @@ -24,6 +25,7 @@ require_relative "cyberarm_engine/animator" require_relative "cyberarm_engine/text" require_relative "cyberarm_engine/timer" +require_relative "cyberarm_engine/config_file" require_relative "cyberarm_engine/ui/dsl" diff --git a/lib/cyberarm_engine/config_file.rb b/lib/cyberarm_engine/config_file.rb new file mode 100644 index 0000000..ece9dbc --- /dev/null +++ b/lib/cyberarm_engine/config_file.rb @@ -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