From de3690c94e609bb641529423299a9cc6120fa70f Mon Sep 17 00:00:00 2001 From: Alexander Date: Sun, 26 Mar 2023 20:16:46 +0300 Subject: [PATCH 01/10] v0.3.0-dev.1 --- CHANGELOG.md | 18 ++++++++++--- source/readconf.d | 65 ++++++++++++++++++++++++++++++++++++++++++----- tests/test.d | 25 ++++++++++-------- 3 files changed, 87 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b8027f7..e549c64 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,23 @@ # Changelog -## [0.2.0]() - -26.03.2023 +## [v0.2.0](https://git.zhirov.kz/dlang/readconf/compare/v0.1.1...v0.2.0) (2023.03.26) ### New - Adding sections support - Taking into account spaces and tabs to separate the parameter, value and comment - Added aliases to convenient parameter access to the value + +## [v0.1.1](https://git.zhirov.kz/dlang/readconf/compare/v0.1.0...v0.1.1) (2023.03.24) + +### Bug fixes + +- Checking empty keys +- Reading an expression in quotation marks + +## [v0.1.0](https://git.zhirov.kz/dlang/readconf/commits/6409917cbe6a287db73fe3eea4bccaadf00379e7) (2023.03.23) + +### The first stable working release + +- The parameters are separated by `=` or `=>` +- The ability to comment lines through delimiters `;`, `#`, `//` diff --git a/source/readconf.d b/source/readconf.d index 6899641..ecb71ee 100644 --- a/source/readconf.d +++ b/source/readconf.d @@ -27,7 +27,7 @@ private: static Config config; string path; bool readed = false; - ConfigSection[string] sections; + ConfigFile[string] configs; const string pattern = "^( |\\t)*(((\\w(\\w|-)+)(( |\\t)*(=>|=){1}" ~ "( |\\t)*)(?!\\/(\\/|\\*))(([^ >\"'=\\n\\t#;].*?)|(\"(.+)\")" @@ -37,7 +37,7 @@ private: /** * Reading the configuration file */ - bool readConfig() + bool readConfig(const string configName) { File configuration; @@ -49,6 +49,9 @@ private: return false; } + if (configName !in this.configs) + this.configs[configName] = ConfigFile(configName); + auto regular = regex(this.pattern, "m"); // reading from the main section @@ -79,10 +82,12 @@ private: else if (match[group][0] == '\'') group = GROUP_VALUE_3; - if (sectionName !in this.sections) - this.sections[sectionName] = ConfigSection(sectionName); + this.configs[configName].add(sectionName, ConfigParameter(match[GROUP_PROPERTY], match[group])); + + // if (sectionName !in this.sections) + // this.sections[sectionName] = ConfigSection(sectionName); - this.sections[sectionName].add(ConfigParameter(match[GROUP_PROPERTY], match[group])); + // this.sections[sectionName].add(ConfigParameter(match[GROUP_PROPERTY], match[group])); } } @@ -92,6 +97,7 @@ private: } catch (Exception e) { Log.msg.warning("Unable to close the configuration file " ~ this.path); Log.msg.error(e); + this.configs.remove(configName); this.readed = false; } @@ -118,14 +124,51 @@ public: * Params: * path = the path to the configuration file */ - bool read(string path) + bool read(string path, string configName = "") { this.path = path; if (!path.exists) throw new Exception("The configuration file does not exist: " ~ path); - return readConfig(); + if (configName.length == 0) + configName = path.baseName(); + if (configName in configs) + throw new Exception("The configuration file with this name has already been read"); + return readConfig(configName); } + /** + * Get the section + * Params: + * section = section name (default main "[]") + */ + @property ConfigFile configFile(string configName = "") + { + if (configName.length == 0) + { + if (configs.length == 1) + return configs[configs.byKey.front]; + else + throw new Exception("You must explicitly specify the name of the configuration file"); + } + + return configName in configs ? configs[configName] : ConfigFile(); + } + + /** + * Config file + * + * Get the config file + * Params: + * configName = config name (by default the name of the configuration file) + */ + alias cf = configFile; +} + +struct ConfigFile +{ + private string name = "[]"; + private ConfigSection[string] sections; + /** * Get the section * Params: @@ -144,6 +187,14 @@ public: * section = section name (default main "[]") */ alias sn = sectionName; + + private void add(string sectionName, ConfigParameter parameter) + { + if (sectionName !in this.sections) + this.sections[sectionName] = ConfigSection(sectionName); + + this.sections[sectionName].add(parameter); + } } struct ConfigSection diff --git a/tests/test.d b/tests/test.d index 60e75be..ff4bb36 100644 --- a/tests/test.d +++ b/tests/test.d @@ -3,18 +3,21 @@ import readconf; unittest { rc.read("./tests/settings.conf"); + rc.read("./tests/settings.conf", "new"); - assert(rc.sn.key("value1") == "text without quotes"); - assert(rc.sn.key("value2") == "Yes!"); - assert(rc.sn.key("value3") == "value in apostrophes"); - assert(rc.sn.key("value4") == "1000"); - assert(rc.sn.key("value5") == "0.000"); - assert(rc.sn.key("value7") == "//path"); - assert(rc.sn.key("value8") == "\"Hey!\""); - assert(rc.sn("part2").key("value1") == "this value will be in the new section"); - assert(rc.sn("part2").key("value3") == "good value!"); - assert(rc.sn("part3").key("value1") == "-2"); - assert(rc.sn("part3").key("value3") == "100"); + assert(rc.cf("settings.conf").sn.key("value1") == "text without quotes"); + assert(rc.cf("settings.conf").sn.key("value2") == "Yes!"); + assert(rc.cf("settings.conf").sn.key("value3") == "value in apostrophes"); + assert(rc.cf("settings.conf").sn.key("value4") == "1000"); + assert(rc.cf("settings.conf").sn.key("value5") == "0.000"); + assert(rc.cf("settings.conf").sn.key("value7") == "//path"); + assert(rc.cf("settings.conf").sn.key("value8") == "\"Hey!\""); + assert(rc.cf("settings.conf").sn("part2").key("value1") == "this value will be in the new section"); + assert(rc.cf("settings.conf").sn("part2").key("value3") == "good value!"); + assert(rc.cf("settings.conf").sn("part3").key("value1") == "-2"); + assert(rc.cf("settings.conf").sn("part3").key("value3") == "100"); + + assert(rc.cf("new").sn("part3").key("value3") == "100"); } // void main() From 6952bab705e46e978013b8a336bc767ea23579cd Mon Sep 17 00:00:00 2001 From: Alexander Zhirov Date: Mon, 27 Mar 2023 15:37:37 +0300 Subject: [PATCH 02/10] v0.3.0-dev.2 --- source/readconf.d | 11 +++++++++++ tests/database.conf | 5 +++++ tests/test.d | 41 +++++++++++++++++++++++++++-------------- 3 files changed, 43 insertions(+), 14 deletions(-) create mode 100644 tests/database.conf diff --git a/source/readconf.d b/source/readconf.d index ecb71ee..21efba8 100644 --- a/source/readconf.d +++ b/source/readconf.d @@ -169,6 +169,11 @@ struct ConfigFile private string name = "[]"; private ConfigSection[string] sections; + @property bool exist() + { + return this.sections.length > 0; + } + /** * Get the section * Params: @@ -176,6 +181,10 @@ struct ConfigFile */ @property ConfigSection sectionName(string section = "[]") { + if (!this.exist) + throw new Exception("The configuration file does not exist"); + if (sections.length == 1) + return sections[sections.byKey.front]; return section in sections ? sections[section] : ConfigSection(); } @@ -219,6 +228,8 @@ struct ConfigSection */ ConfigParameter key(string key) { + if (this.empty) + throw new Exception("The selected section has no parameters or does not exist"); return key in this.parameters ? this.parameters[key] : ConfigParameter(); } diff --git a/tests/database.conf b/tests/database.conf new file mode 100644 index 0000000..a20cdf8 --- /dev/null +++ b/tests/database.conf @@ -0,0 +1,5 @@ +[postgres] +host => "//myhost" +port => 5432 +name => mydatabase +password => "/&#BD&@MXLE" diff --git a/tests/test.d b/tests/test.d index ff4bb36..b5390d8 100644 --- a/tests/test.d +++ b/tests/test.d @@ -1,23 +1,36 @@ import readconf; +import std.conv; unittest { - rc.read("./tests/settings.conf"); - rc.read("./tests/settings.conf", "new"); + rc.read("./tests/settings.conf", "old"); + rc.read("./tests/database.conf", "pgconf"); - assert(rc.cf("settings.conf").sn.key("value1") == "text without quotes"); - assert(rc.cf("settings.conf").sn.key("value2") == "Yes!"); - assert(rc.cf("settings.conf").sn.key("value3") == "value in apostrophes"); - assert(rc.cf("settings.conf").sn.key("value4") == "1000"); - assert(rc.cf("settings.conf").sn.key("value5") == "0.000"); - assert(rc.cf("settings.conf").sn.key("value7") == "//path"); - assert(rc.cf("settings.conf").sn.key("value8") == "\"Hey!\""); - assert(rc.cf("settings.conf").sn("part2").key("value1") == "this value will be in the new section"); - assert(rc.cf("settings.conf").sn("part2").key("value3") == "good value!"); - assert(rc.cf("settings.conf").sn("part3").key("value1") == "-2"); - assert(rc.cf("settings.conf").sn("part3").key("value3") == "100"); + assert(rc.cf("old").sn.key("value1") == "text without quotes"); + assert(rc.cf("old").sn.key("value2") == "Yes!"); + assert(rc.cf("old").sn.key("value3") == "value in apostrophes"); + assert(rc.cf("old").sn.key("value4") == "1000"); + assert(rc.cf("old").sn.key("value5") == "0.000"); + assert(rc.cf("old").sn.key("value7") == "//path"); + assert(rc.cf("old").sn.key("value8") == "\"Hey!\""); + assert(rc.cf("old").sn("part2").key("value1") == "this value will be in the new section"); + assert(rc.cf("old").sn("part2").key("value3") == "good value!"); + assert(rc.cf("old").sn("part3").key("value1") == "-2"); + assert(rc.cf("old").sn("part3").key("value3") == "100"); - assert(rc.cf("new").sn("part3").key("value3") == "100"); + auto pgconf = rc.cf("pgconf").sn("postgres"); + + assert(pgconf.key("host") == "//myhost"); + assert(pgconf.key("port").to!int == 5432); + assert(pgconf.key("name") == "mydatabase"); + assert(pgconf.key("password") == "/&#BD&@MXLE"); + + auto pgconf2 = rc.cf("pgconf"); + + assert(pgconf2.sn.key("host") == "//myhost"); + assert(pgconf2.sn.key("port").to!int == 5432); + assert(pgconf2.sn.key("name") == "mydatabase"); + assert(pgconf2.sn.key("password") == "/&#BD&@MXLE"); } // void main() From d9cf28a2a858ab16a4bea1c9b29c5cec7e864ab0 Mon Sep 17 00:00:00 2001 From: Alexander Zhirov Date: Mon, 27 Mar 2023 16:39:46 +0300 Subject: [PATCH 03/10] v0.3.0-dev.3 --- source/readconf.d | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/source/readconf.d b/source/readconf.d index 21efba8..494ca30 100644 --- a/source/readconf.d +++ b/source/readconf.d @@ -11,6 +11,8 @@ import singlog; */ alias rc = Config.file; +private const string mainSection = "[]"; + class Config { private: @@ -55,7 +57,7 @@ private: auto regular = regex(this.pattern, "m"); // reading from the main section - string sectionName = "[]"; + string sectionName = mainSection; while (!configuration.eof()) { @@ -151,7 +153,7 @@ public: throw new Exception("You must explicitly specify the name of the configuration file"); } - return configName in configs ? configs[configName] : ConfigFile(); + return configName in configs ? configs[configName] : ConfigFile(configName); } /** @@ -166,7 +168,7 @@ public: struct ConfigFile { - private string name = "[]"; + private string name; private ConfigSection[string] sections; @property bool exist() @@ -179,13 +181,13 @@ struct ConfigFile * Params: * section = section name (default main "[]") */ - @property ConfigSection sectionName(string section = "[]") + @property ConfigSection sectionName(string section = mainSection) { if (!this.exist) throw new Exception("The configuration file does not exist"); - if (sections.length == 1) + if (section == mainSection && sections.length == 1) return sections[sections.byKey.front]; - return section in sections ? sections[section] : ConfigSection(); + return section in sections ? sections[section] : ConfigSection(section); } /** @@ -208,7 +210,7 @@ struct ConfigFile struct ConfigSection { - private string name = "[]"; + private string name = mainSection; private ConfigParameter[string] parameters; /** @@ -230,7 +232,7 @@ struct ConfigSection { if (this.empty) throw new Exception("The selected section has no parameters or does not exist"); - return key in this.parameters ? this.parameters[key] : ConfigParameter(); + return key in this.parameters ? this.parameters[key] : ConfigParameter(key); } /** @@ -264,7 +266,7 @@ struct ConfigParameter */ @property bool empty() { - return this.property.length == 0 || this.value.length == 0; + return this.value.length == 0; } /** From fb3550b8ec30c36c1b2048136871f48c12edcc56 Mon Sep 17 00:00:00 2001 From: Alexander Zhirov Date: Mon, 27 Mar 2023 18:32:29 +0300 Subject: [PATCH 04/10] v0.3.0-dev.4 --- source/readconf.d | 38 ++++++++++++++++++++++++++++++++++++++ tests/test.d | 4 ++-- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/source/readconf.d b/source/readconf.d index 494ca30..c1cc86f 100644 --- a/source/readconf.d +++ b/source/readconf.d @@ -164,6 +164,20 @@ public: * configName = config name (by default the name of the configuration file) */ alias cf = configFile; + + @property ConfigFile opIndex(string configName = "") + { + if (configName.length == 0) + { + if (configs.length == 1) + return configs[configs.byKey.front]; + else + throw new Exception("More than one configuration file has been read. " + ~ "It is necessary to specify the name of a specific"); + } + + return configName in configs ? configs[configName] : ConfigFile(configName); + } } struct ConfigFile @@ -187,6 +201,8 @@ struct ConfigFile throw new Exception("The configuration file does not exist"); if (section == mainSection && sections.length == 1) return sections[sections.byKey.front]; + if (section.length == 0) + section = mainSection; return section in sections ? sections[section] : ConfigSection(section); } @@ -206,6 +222,17 @@ struct ConfigFile this.sections[sectionName].add(parameter); } + + @property ConfigSection opIndex(string section = mainSection) + { + if (!this.exist) + throw new Exception("The configuration file does not exist"); + if (section == mainSection && sections.length == 1) + return sections[sections.byKey.front]; + if (section.length == 0) + section = mainSection; + return section in sections ? sections[section] : ConfigSection(section); + } } struct ConfigSection @@ -230,6 +257,8 @@ struct ConfigSection */ ConfigParameter key(string key) { + if (key.length == 0) + throw new Exception("The key cannot be empty"); if (this.empty) throw new Exception("The selected section has no parameters or does not exist"); return key in this.parameters ? this.parameters[key] : ConfigParameter(key); @@ -250,6 +279,15 @@ struct ConfigSection Log.msg.warning("The parameter exists but will be overwritten"); this.parameters[parameter.property] = parameter; } + + ConfigParameter opIndex(string key) + { + if (key.length == 0) + throw new Exception("The key cannot be empty"); + if (this.empty) + throw new Exception("The selected section has no parameters or does not exist"); + return key in this.parameters ? this.parameters[key] : ConfigParameter(key); + } } /** diff --git a/tests/test.d b/tests/test.d index b5390d8..1e4fd59 100644 --- a/tests/test.d +++ b/tests/test.d @@ -7,7 +7,7 @@ unittest rc.read("./tests/database.conf", "pgconf"); assert(rc.cf("old").sn.key("value1") == "text without quotes"); - assert(rc.cf("old").sn.key("value2") == "Yes!"); + assert(rc["old"][""]["value2"] == "Yes!"); assert(rc.cf("old").sn.key("value3") == "value in apostrophes"); assert(rc.cf("old").sn.key("value4") == "1000"); assert(rc.cf("old").sn.key("value5") == "0.000"); @@ -27,7 +27,7 @@ unittest auto pgconf2 = rc.cf("pgconf"); - assert(pgconf2.sn.key("host") == "//myhost"); + assert(pgconf2[]["host"] == "//myhost"); assert(pgconf2.sn.key("port").to!int == 5432); assert(pgconf2.sn.key("name") == "mydatabase"); assert(pgconf2.sn.key("password") == "/&#BD&@MXLE"); From a1a208ba63329394fd4ec80dc3ed2ee628a64ac8 Mon Sep 17 00:00:00 2001 From: Alexander Zhirov Date: Mon, 27 Mar 2023 18:52:01 +0300 Subject: [PATCH 05/10] v0.3.0-dev.5 --- source/readconf.d | 48 ++++++++++++++++++++++------------------------- 1 file changed, 22 insertions(+), 26 deletions(-) diff --git a/source/readconf.d b/source/readconf.d index c1cc86f..fa38309 100644 --- a/source/readconf.d +++ b/source/readconf.d @@ -63,34 +63,30 @@ private: { string line = configuration.readln(); auto match = matchFirst(line, regular); - if (match) + + if (match.length == 0) + continue; + + // if again main section + if (match[GROUP_SECTION_MAIN].length) { - // if again main section - if (match[GROUP_SECTION_MAIN].length) - { - sectionName = match[GROUP_SECTION_MAIN]; - continue; - } - if (match[GROUP_SECTION_OTHER_OUTER].length) - { - sectionName = match[GROUP_SECTION_OTHER_INNER]; - continue; - } - - int group = GROUP_VALUE_1; - - if (match[group][0] == '\"') - group = GROUP_VALUE_2; - else if (match[group][0] == '\'') - group = GROUP_VALUE_3; - - this.configs[configName].add(sectionName, ConfigParameter(match[GROUP_PROPERTY], match[group])); - - // if (sectionName !in this.sections) - // this.sections[sectionName] = ConfigSection(sectionName); - - // this.sections[sectionName].add(ConfigParameter(match[GROUP_PROPERTY], match[group])); + sectionName = match[GROUP_SECTION_MAIN]; + continue; } + if (match[GROUP_SECTION_OTHER_OUTER].length) + { + sectionName = match[GROUP_SECTION_OTHER_INNER]; + continue; + } + + int group = GROUP_VALUE_1; + + if (match[group][0] == '\"') + group = GROUP_VALUE_2; + else if (match[group][0] == '\'') + group = GROUP_VALUE_3; + + this.configs[configName].add(sectionName, ConfigParameter(match[GROUP_PROPERTY], match[group])); } try { From 323ea03a4587af1fda6172da8bbe567448de5cb1 Mon Sep 17 00:00:00 2001 From: Alexander Date: Tue, 28 Mar 2023 00:17:46 +0300 Subject: [PATCH 06/10] v0.3.0-dev.6 --- README.md | 6 +++++- img/logo.png | Bin 0 -> 124328 bytes 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 img/logo.png diff --git a/README.md b/README.md index ca0752b..7d1ef1a 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,8 @@ -# readconf +

+ +

+ +

readconf

Singleton for reading the configuration file required for your program. diff --git a/img/logo.png b/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c0351cb904e1668aa6b7d7aea2935b95d8a1e083 GIT binary patch literal 124328 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

e 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 z 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 literal 0 HcmV?d00001 From 1368b271b0fd4c46b90db211952104de535691c4 Mon Sep 17 00:00:00 2001 From: Alexander Zhirov Date: Wed, 29 Mar 2023 18:43:32 +0300 Subject: [PATCH 07/10] v0.3.0-dev.7 Updating the singlog library to 0.2.1 --- README.md | 5 +++++ dub.json | 2 +- dub.selections.json | 2 +- source/readconf.d | 14 +++++++------- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 7d1ef1a..5f546d5 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,11 @@

readconf

+[![license](https://img.shields.io/github/license/AlexanderZhirov/readconf.svg?sort=semver&style=for-the-badge&color=green)](https://www.gnu.org/licenses/old-licenses/gpl-2.0.html) +[![main](https://img.shields.io/badge/dynamic/json.svg?label=git.zhirov.kz&style=for-the-badge&url=https://git.zhirov.kz/api/v1/repos/dlang/readconf/tags&query=$[0].name&color=violet)](https://git.zhirov.kz/dlang/readconf) +[![githab](https://img.shields.io/github/v/tag/AlexanderZhirov/readconf.svg?sort=semver&style=for-the-badge&color=blue&label=github)](https://github.com/AlexanderZhirov/readconf) +[![dub](https://img.shields.io/dub/v/readconf.svg?sort=semver&style=for-the-badge&color=orange)](https://code.dlang.org/packages/readconf) + Singleton for reading the configuration file required for your program. ## What can do diff --git a/dub.json b/dub.json index 7f3fc7f..50b4a10 100644 --- a/dub.json +++ b/dub.json @@ -33,6 +33,6 @@ ], "targetName": "readconf", "dependencies": { - "singlog": "~>0.1.0" + "singlog": "~>0.2.1" } } \ No newline at end of file diff --git a/dub.selections.json b/dub.selections.json index 377bd39..a98f018 100644 --- a/dub.selections.json +++ b/dub.selections.json @@ -3,6 +3,6 @@ "versions": { "datefmt": "1.0.4", "silly": "1.1.1", - "singlog": "0.1.0" + "singlog": "0.2.1" } } diff --git a/source/readconf.d b/source/readconf.d index fa38309..e518d53 100644 --- a/source/readconf.d +++ b/source/readconf.d @@ -46,8 +46,8 @@ private: try { configuration = File(this.path, "r"); } catch (Exception e) { - Log.msg.warning("Unable to open the configuration file " ~ this.path); - Log.msg.error(e); + log.w("Unable to open the configuration file " ~ this.path); + log.e(e); return false; } @@ -93,8 +93,8 @@ private: configuration.close(); this.readed = true; } catch (Exception e) { - Log.msg.warning("Unable to close the configuration file " ~ this.path); - Log.msg.error(e); + log.w("Unable to close the configuration file " ~ this.path); + log.e(e); this.configs.remove(configName); this.readed = false; } @@ -272,7 +272,7 @@ struct ConfigSection private void add(ConfigParameter parameter) { if (parameter.property in parameters) - Log.msg.warning("The parameter exists but will be overwritten"); + log.w("The parameter exists but will be overwritten"); this.parameters[parameter.property] = parameter; } @@ -319,8 +319,8 @@ struct ConfigParameter try { return this.value.to!T; } catch (Exception e) { - Log.msg.warning("Cannot convert type"); - Log.msg.error(e); + log.w("Cannot convert type"); + log.e(e); return T.init; } } From 1d89b62354a6adbd0f0c7f620df58a63f6919221 Mon Sep 17 00:00:00 2001 From: Alexander Zhirov Date: Wed, 29 Mar 2023 19:41:43 +0300 Subject: [PATCH 08/10] v0.3.0-dev.8 --- README.md | 7 ++++--- source/readconf.d | 48 +++++++++++++++++++++++++---------------------- 2 files changed, 30 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 5f546d5..508c22d 100644 --- a/README.md +++ b/README.md @@ -5,9 +5,10 @@

readconf

[![license](https://img.shields.io/github/license/AlexanderZhirov/readconf.svg?sort=semver&style=for-the-badge&color=green)](https://www.gnu.org/licenses/old-licenses/gpl-2.0.html) -[![main](https://img.shields.io/badge/dynamic/json.svg?label=git.zhirov.kz&style=for-the-badge&url=https://git.zhirov.kz/api/v1/repos/dlang/readconf/tags&query=$[0].name&color=violet)](https://git.zhirov.kz/dlang/readconf) -[![githab](https://img.shields.io/github/v/tag/AlexanderZhirov/readconf.svg?sort=semver&style=for-the-badge&color=blue&label=github)](https://github.com/AlexanderZhirov/readconf) -[![dub](https://img.shields.io/dub/v/readconf.svg?sort=semver&style=for-the-badge&color=orange)](https://code.dlang.org/packages/readconf) +[![main](https://img.shields.io/badge/dynamic/json.svg?label=git.zhirov.kz&style=for-the-badge&url=https://git.zhirov.kz/api/v1/repos/dlang/readconf/tags&query=$[0].name&color=violet&logo=D)](https://git.zhirov.kz/dlang/readconf) +[![githab](https://img.shields.io/github/v/tag/AlexanderZhirov/readconf.svg?sort=semver&style=for-the-badge&color=blue&label=github&logo=D)](https://github.com/AlexanderZhirov/readconf) +[![dub](https://img.shields.io/dub/v/readconf.svg?sort=semver&style=for-the-badge&color=orange&logo=D)](https://code.dlang.org/packages/readconf) +[![linux](https://img.shields.io/badge/Linux-FCC624?style=for-the-badge&logo=linux&logoColor=black)](https://www.linux.org/) Singleton for reading the configuration file required for your program. diff --git a/source/readconf.d b/source/readconf.d index e518d53..33fc0a6 100644 --- a/source/readconf.d +++ b/source/readconf.d @@ -7,7 +7,10 @@ import std.meta; import singlog; /** - * Read config object + * **Get an object to read the configuration file** + * + * - The `read()` will allow you to read the configuration file + * - `cf()` or `configFile()` will allow you to refer to the read file to get the parameters */ alias rc = Config.file; @@ -17,13 +20,13 @@ class Config { private: enum { - GROUP_PROPERTY = 4, + GROUP_PARAMETER = 4, GROUP_VALUE_1 = 11, // string GROUP_VALUE_2 = 14, // "strin" GROUP_VALUE_3 = 16, // 'string' - GROUP_SECTION_OTHER_OUTER = 17, // "[string]" - GROUP_SECTION_OTHER_INNER = 18, // "[string]" - GROUP_SECTION_MAIN = 20, // "[]" + GROUP_SECTION_OTHER_OUTER = 17, // [string] + GROUP_SECTION_OTHER_INNER = 18, // string + GROUP_SECTION_MAIN = 20, // [] } static Config config; @@ -86,7 +89,7 @@ private: else if (match[group][0] == '\'') group = GROUP_VALUE_3; - this.configs[configName].add(sectionName, ConfigParameter(match[GROUP_PROPERTY], match[group])); + this.configs[configName].add(sectionName, ConfigParameter(match[GROUP_PARAMETER], match[group])); } try { @@ -121,6 +124,8 @@ public: * Read the configuration file * Params: * path = the path to the configuration file + * configName = a specific name to bind to the configuration file (default file name) + * Returns: `true` if the file was read successfully */ bool read(string path, string configName = "") { @@ -135,9 +140,11 @@ public: } /** - * Get the section + * Accessing the read configuration file * Params: - * section = section name (default main "[]") + * configName = specific name to bind to the configuration file + * (if the read files are > 1, then specify a specific name, otherwise default file name) + * Returns: configuration file object ConfigFile */ @property ConfigFile configFile(string configName = "") { @@ -152,12 +159,12 @@ public: return configName in configs ? configs[configName] : ConfigFile(configName); } - /** - * Config file - * - * Get the config file + /** + * Get the read configuration file * Params: - * configName = config name (by default the name of the configuration file) + * configName = specific name to bind to the configuration file + * (if the read files are > 1, then specify a specific name, otherwise default file name) + * Returns: configuration file object ConfigFile */ alias cf = configFile; @@ -189,7 +196,8 @@ struct ConfigFile /** * Get the section * Params: - * section = section name (default main "[]") + * section = section name (default main section) + * Returns: the object of the configuration file section ConfigSection */ @property ConfigSection sectionName(string section = mainSection) { @@ -203,11 +211,10 @@ struct ConfigFile } /** - * Section name - * * Get the section * Params: - * section = section name (default main "[]") + * section = section name (default main section) + * Returns: the object of the configuration file section ConfigSection */ alias sn = sectionName; @@ -249,7 +256,7 @@ struct ConfigSection * Get the parameter value * Params: * key = parameter from the configuration file - * Returns: the value of the parameter in the PP structure view + * Returns: the object of the parameter ConfigParameter */ ConfigParameter key(string key) { @@ -262,7 +269,7 @@ struct ConfigSection /** * Get all keys and their values - * Returns: collection of properties structures PP + * Returns: collection of parameters */ ConfigParameter[string] keys() { @@ -286,9 +293,6 @@ struct ConfigSection } } -/** - * Parameter and its value with the ability to convert to the desired data type - */ struct ConfigParameter { private string property; From 1e45d1a503afdf65053e0d0c3b946bce284ebd6b Mon Sep 17 00:00:00 2001 From: Alexander Zhirov Date: Thu, 30 Mar 2023 09:58:28 +0300 Subject: [PATCH 09/10] v0.3.0-beta.1 --- README.md | 20 +++--- examples/comments.conf | 11 ++++ examples/sections.conf | 22 +++++++ examples/simple.conf | 16 +++++ tests/database.conf | 5 -- tests/test.d | 145 ++++++++++++++++++++++++++++++----------- 6 files changed, 168 insertions(+), 51 deletions(-) create mode 100644 examples/comments.conf create mode 100644 examples/sections.conf create mode 100644 examples/simple.conf delete mode 100644 tests/database.conf diff --git a/README.md b/README.md index 508c22d..089d656 100644 --- a/README.md +++ b/README.md @@ -14,10 +14,12 @@ Singleton for reading the configuration file required for your program. ## What can do -1. Separation of parameter and value by separators `=` and `=>` -2. Commenting on lines using special characters `;`, `#`, `//`, `/*` -3. Support for sections for describing parameter blocks (sections are set by the name in `[]`) -4. Support for spaces and tabs for visual separation +- Reading multiple configuration files +- Separation of parameters by sections +- Access to parameters and sections using keys and indexes +- Commenting on lines + +You will get more detailed information on the [wiki](https://git.zhirov.kz/dlang/readconf/wiki). ## Quick start @@ -25,7 +27,7 @@ The `settings.conf` file (see the [tests](tests/)): ![matches.png](img/matches.png) -Read `settings.conf` file: +Read `./tests/settings.conf` file: ```d import readconf; @@ -33,7 +35,7 @@ import std.stdio; void main() { - rc.read("./settings.conf"); + rc.read("./tests/settings.conf"); foreach (key, param; rc.sn.keys()) writefln("%s => %s", key, param); @@ -43,7 +45,7 @@ void main() foreach (key, param; rc.sn("part2").keys()) writefln("%s => %s", key, param); - writeln(rc.sn("part2").key("value1")); + writeln(rc["part2"]["value1"]); } ``` @@ -63,6 +65,6 @@ value3 => good value! this value will be in the new section ``` -## Dub +## DUB -Add a dependency on `"readconf": "~>0.2.0"` +Add a dependency on `"readconf": "~>0.3.0"` diff --git a/examples/comments.conf b/examples/comments.conf new file mode 100644 index 0000000..0a9a588 --- /dev/null +++ b/examples/comments.conf @@ -0,0 +1,11 @@ +This line will be a comment, since it does not match the basic template +parameter1 => value1 ; This will be a comment +parameter2 => value2 # This will be a comment +parameter3 => value3 // This will be a comment +parameter4 => value4 /* This will be a comment +parameter5 => value5;This will not be a comment +parameter6 => value6// This will also be a whole value +parameter7 => //value7 ;The value will not be read +parameter8 => "//value8" # Now the value is correctly +parameter9 => ';value9' // The value is correctly too +parameter10 => '"value10"' // Quotes inside \ No newline at end of file diff --git a/examples/sections.conf b/examples/sections.conf new file mode 100644 index 0000000..acaca5f --- /dev/null +++ b/examples/sections.conf @@ -0,0 +1,22 @@ +parameter1 = value1 +parameter_2 = value2 + +[first-section] ; Creating the first section +parameter1 = value3 ; A section may contain similar parameter names +parameter_2 = value4 + +[second-section] // Another section +parameter1 = value5 +parameter_2 = value6 + +[] /* Addition of the main section +parameter3 = value7 /* A new parameter will be added +parameter1 = value8 /* And parameter1 will be redefined + +[first-section] # Addition of the first section +parameter3 = value9 +parameter4 = value10 + +[_section] # Creating the new section +parameter1 = value11 +parameter2 = value12 \ No newline at end of file diff --git a/examples/simple.conf b/examples/simple.conf new file mode 100644 index 0000000..4700094 --- /dev/null +++ b/examples/simple.conf @@ -0,0 +1,16 @@ +parameter1=value1 +parameter2=>value2 + parameter3=value3 + parameter4=>value4 + +_parameter5 = value5 +parameter6 => value6 + parameter7 = value7 + + parameter8 => value8 +parameter9 =value9 +parameter-10 =>value10 +parameter11 = value11 + + +parameter12_ => value12 \ No newline at end of file diff --git a/tests/database.conf b/tests/database.conf deleted file mode 100644 index a20cdf8..0000000 --- a/tests/database.conf +++ /dev/null @@ -1,5 +0,0 @@ -[postgres] -host => "//myhost" -port => 5432 -name => mydatabase -password => "/&#BD&@MXLE" diff --git a/tests/test.d b/tests/test.d index 1e4fd59..a12c32a 100644 --- a/tests/test.d +++ b/tests/test.d @@ -3,48 +3,119 @@ import std.conv; unittest { - rc.read("./tests/settings.conf", "old"); - rc.read("./tests/database.conf", "pgconf"); + rc.read("./examples/simple.conf"); - assert(rc.cf("old").sn.key("value1") == "text without quotes"); - assert(rc["old"][""]["value2"] == "Yes!"); - assert(rc.cf("old").sn.key("value3") == "value in apostrophes"); - assert(rc.cf("old").sn.key("value4") == "1000"); - assert(rc.cf("old").sn.key("value5") == "0.000"); - assert(rc.cf("old").sn.key("value7") == "//path"); - assert(rc.cf("old").sn.key("value8") == "\"Hey!\""); - assert(rc.cf("old").sn("part2").key("value1") == "this value will be in the new section"); - assert(rc.cf("old").sn("part2").key("value3") == "good value!"); - assert(rc.cf("old").sn("part3").key("value1") == "-2"); - assert(rc.cf("old").sn("part3").key("value3") == "100"); + auto configFile = rc.cf; + auto mainSection = configFile.sn; - auto pgconf = rc.cf("pgconf").sn("postgres"); - - assert(pgconf.key("host") == "//myhost"); - assert(pgconf.key("port").to!int == 5432); - assert(pgconf.key("name") == "mydatabase"); - assert(pgconf.key("password") == "/&#BD&@MXLE"); - - auto pgconf2 = rc.cf("pgconf"); - - assert(pgconf2[]["host"] == "//myhost"); - assert(pgconf2.sn.key("port").to!int == 5432); - assert(pgconf2.sn.key("name") == "mydatabase"); - assert(pgconf2.sn.key("password") == "/&#BD&@MXLE"); + assert(mainSection.key("parameter1") == "value1"); + assert(mainSection["parameter2"] == "value2"); + assert(mainSection.key("parameter3") == "value3"); + assert(mainSection["parameter4"] == "value4"); + assert(mainSection.key("_parameter5") == "value5"); + assert(mainSection["parameter6"] == "value6"); + assert(mainSection.key("parameter7") == "value7"); + assert(mainSection["parameter8"] == "value8"); + assert(mainSection.key("parameter9") == "value9"); + assert(mainSection["parameter-10"] == "value10"); + assert(mainSection.key("parameter11") == "value11"); + assert(mainSection["parameter12_"] == "value12"); } -// void main() -// { -// import std.stdio; -// rc.read("./tests/settings.conf"); +unittest +{ + rc.read("./examples/sections.conf"); + auto configFile = rc.cf; -// foreach (key, param; rc.sn.keys()) -// writefln("%s => %s", key, param); + auto mainSection = configFile.sn; + auto firstSection = configFile.sn("first-section"); + auto secondSection = configFile["second-section"]; + auto section = configFile["_section"]; -// writeln(rc.sn.key("value1")); + assert(mainSection.key("parameter1") == "value8"); + assert(mainSection["parameter_2"] == "value2"); + assert(mainSection["parameter3"] == "value7"); -// foreach (key, param; rc.sn("part2").keys()) -// writefln("%s => %s", key, param); + assert(firstSection["parameter1"] == "value3"); + assert(firstSection["parameter_2"] == "value4"); + assert(firstSection["parameter3"] == "value9"); + assert(firstSection["parameter4"] == "value10"); -// writeln(rc.sn("part2").key("value1")); -// } + assert(secondSection["parameter1"] == "value5"); + assert(secondSection["parameter_2"] == "value6"); + + assert(section["parameter1"] == "value11"); + assert(section["parameter2"] == "value12"); +} + +unittest +{ + rc.read("./examples/simple.conf", "simple"); + rc.read("./examples/sections.conf"); + rc.read("./examples/comments.conf", "comments"); + + auto simpleConfig = rc.cf("simple"); + auto sectionsConfig = rc["sections.conf"]; + auto commentsConfig = rc["comments"]; + + auto simConMaiSec = simpleConfig.sn; + + assert(simConMaiSec.key("parameter1") == "value1"); + assert(simConMaiSec["parameter2"] == "value2"); + assert(simConMaiSec.key("parameter3") == "value3"); + assert(simConMaiSec["parameter4"] == "value4"); + assert(simConMaiSec.key("_parameter5") == "value5"); + assert(simConMaiSec["parameter6"] == "value6"); + assert(simConMaiSec.key("parameter7") == "value7"); + assert(simConMaiSec["parameter8"] == "value8"); + assert(simConMaiSec.key("parameter9") == "value9"); + assert(simConMaiSec["parameter-10"] == "value10"); + assert(simConMaiSec.key("parameter11") == "value11"); + assert(simConMaiSec["parameter12_"] == "value12"); + + auto secConMaiSec = sectionsConfig.sn; + auto secConFirSec = sectionsConfig.sn("first-section"); + auto secConSecSec = sectionsConfig["second-section"]; + auto secConSec = sectionsConfig["_section"]; + + assert(secConMaiSec.key("parameter1") == "value8"); + assert(secConMaiSec["parameter_2"] == "value2"); + assert(secConMaiSec["parameter3"] == "value7"); + assert(secConFirSec["parameter1"] == "value3"); + assert(secConFirSec["parameter_2"] == "value4"); + assert(secConFirSec["parameter3"] == "value9"); + assert(secConFirSec["parameter4"] == "value10"); + assert(secConSecSec["parameter1"] == "value5"); + assert(secConSecSec["parameter_2"] == "value6"); + assert(secConSec["parameter1"] == "value11"); + assert(secConSec["parameter2"] == "value12"); + + auto comConMaiSec = commentsConfig.sn; + + assert(comConMaiSec["parameter1"] == "value1"); + assert(comConMaiSec["parameter2"] == "value2"); + assert(comConMaiSec["parameter3"] == "value3"); + assert(comConMaiSec["parameter4"] == "value4"); + assert(comConMaiSec["parameter5"] == "value5;This will not be a comment"); + assert(comConMaiSec["parameter6"] == "value6// This will also be a whole value"); + assert(comConMaiSec["parameter8"] == "//value8"); + assert(comConMaiSec["parameter9"] == ";value9"); + assert(comConMaiSec["parameter10"] == "\"value10\""); +} + +unittest +{ + rc.read("./tests/settings.conf"); + + assert(rc.cf.sn.key("value1") == "text without quotes"); + assert(rc[][]["value2"] == "Yes!"); + assert(rc.cf.sn.key("value3") == "value in apostrophes"); + assert(rc[][]["value4"] == "1000"); + assert(rc.cf.sn["value5"] == "0.000"); + assert(rc[][].key("value7") == "//path"); + assert(rc.cf.sn.key("value8") == "\"Hey!\""); + assert(rc[]["part2"]["value1"] == "this value will be in the new section"); + assert(rc.cf.sn("part2").key("value3") == "good value!"); + assert(rc[].sn("part3").key("value1") == "-2"); + assert(rc.cf["part3"]["value3"] == "100"); +} From f1f50dc7f298abe4ab4eab4ed88223f5b7d90ffc Mon Sep 17 00:00:00 2001 From: Alexander Zhirov Date: Thu, 30 Mar 2023 10:14:24 +0300 Subject: [PATCH 10/10] passed all unittests --- CHANGELOG.md | 13 +++++++++++++ README.md | 16 +++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e549c64..85521cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## [v0.3.0](https://git.zhirov.kz/dlang/readconf/compare/v0.2.0...v0.3.0) (2023.03.30) + +### New + +- Read multiple configuration files +- Quick access to a file/section/parameter using indexes + +### Other + +- Updated unittests +- Added [examples](examples/) of configuration files +- [Wiki](https://git.zhirov.kz/dlang/readconf/wiki) added + ## [v0.2.0](https://git.zhirov.kz/dlang/readconf/compare/v0.1.1...v0.2.0) (2023.03.26) ### New diff --git a/README.md b/README.md index 089d656..3b9c369 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ The `settings.conf` file (see the [tests](tests/)): ![matches.png](img/matches.png) -Read `./tests/settings.conf` file: +Read `settings.conf` file: ```d import readconf; @@ -65,6 +65,20 @@ value3 => good value! this value will be in the new section ``` +## Unittests + +The unittests provide [examples](examples/) of configuration files and the `settings.conf` file located in the [tests](tests/): + +```sh +Running bin/readconf-test-unittest + ✓ test __unittest_L4_C1 + ✓ test __unittest_L106_C1 + ✓ test __unittest_L25_C1 + ✓ test __unittest_L51_C1 + +Summary: 4 passed, 0 failed in 7 ms +``` + ## DUB Add a dependency on `"readconf": "~>0.3.0"`