39 lines
1.0 KiB
Ruby
39 lines
1.0 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'inifile'
|
|
|
|
module ConfigMan
|
|
module Parsers
|
|
module INI
|
|
CONFIG_FILE_PATH = File.join(Dir.pwd, '.config').freeze
|
|
|
|
# Parse the .config file and return a hash of the configuration values
|
|
def self.parse(file_path)
|
|
raise ArgumentError, "File not found: #{file_path}" unless File.exist?(file_path)
|
|
|
|
ini = IniFile.load(file_path)
|
|
parsed_config = ini.to_h
|
|
|
|
raise ArgumentError, "Invalid INI format in #{file_path}" unless parsed_config.is_a?(Hash)
|
|
|
|
parsed_config
|
|
end
|
|
|
|
def self.update(key, new_value)
|
|
existing_config = parse(CONFIG_FILE_PATH)
|
|
section, key = key.split('.', 2)
|
|
existing_config[section] ||= {}
|
|
existing_config[section][key] = new_value
|
|
|
|
ini = IniFile.new(content: existing_config)
|
|
ini.write(filename: CONFIG_FILE_PATH)
|
|
end
|
|
|
|
def self.write(config_hash)
|
|
ini = IniFile.new(content: config_hash)
|
|
ini.write(filename: CONFIG_FILE_PATH)
|
|
end
|
|
end
|
|
end
|
|
end
|