Compare commits

..

No commits in common. "master" and "1.1.5" have entirely different histories.

5 changed files with 26 additions and 84 deletions

3
.idea/php.xml generated
View file

@ -11,10 +11,9 @@
</component>
<component name="PhpIncludePathManager">
<include_path>
<path value="/var/ncc/packages/net.nosial.optslib=1.1.2" />
<path value="/var/ncc/packages/net.nosial.loglib2=1.0.2" />
<path value="/var/ncc/packages/com.symfony.yaml=v7.1.5" />
<path value="/var/ncc/packages/net.nosial.loglib=2.0.4" />
<path value="/var/ncc/packages/net.nosial.optslib=1.1.2" />
<path value="/var/ncc/packages/com.symfony.polyfill_mbstring=v1.31.0" />
<path value="/var/ncc/packages/com.symfony.polyfill_ctype=v1.31.0" />
<path value="/usr/share/ncc" />

View file

@ -5,29 +5,6 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [1.1.7] - 2025-03-14
This update introduces minor changes
### Changed
- Updated remote references for dependencies
- Updated Library to use net.nosial.loglib2 instead of the now deprecated net.nosial.loglib
## [1.1.6] - 2025-01-07
This update introduces minor improvements
### Changed
- Changed properties to become typed properties
### Added
- Added a new constructor parameter called `path` which is an optional parameter that allows you to specify the path to
the configuration files directory. If not specified the library will proceed with resolving
the path to the configuration files directory using the default method. This will override
the `CONFIGLIB_PATH` environment variable if it is set.
## [1.1.5] - 2024-12-27
This update introduces minor improvements

View file

@ -9,25 +9,10 @@ be configured more easily by following the documented instructions on how to alt
could use a builtin editor to edit the configuration file manually.
## Community
This project and many others from Nosial are available on multiple publicly available and free git repositories at
- [n64](https://git.n64.cc/nosial/configlib)
- [GitHub](https://github.com/nosial/configlib)
- [Codeberg](https://codeberg.org/nosial/configlib)
Issues & Pull Requests are frequently checked and to be referenced accordingly in commits and changes, Nosial remains
dedicated to keep these repositories up to date when possible.
For questions & discussions see the public Telegram community at [@NosialDiscussions](https://t.me/NosialDiscussions).
We do encourage community support and discussions, please be respectful and follow the rules of the community.
## Table of contents
<!-- TOC -->
* [ConfigLib](#configlib)
* [Community](#community)
* [Table of contents](#table-of-contents)
* [Installation](#installation)
* [Compile from source](#compile-from-source)

View file

@ -24,7 +24,7 @@
"description": "ConfigLib is a library for reading and writing configuration files via the NCC Runtime API",
"company": "Nosial",
"copyright": "Copyright (c) 2022-2023 Nosial",
"version": "1.1.7",
"version": "1.1.5",
"uuid": "9347259e-8e4d-11ed-85a7-fd07cf28ef35"
},
"build": {
@ -38,12 +38,12 @@
{
"name": "net.nosial.optslib",
"version": "latest",
"source": "nosial/optslib=latest@github"
"source": "nosial/libs.opts=latest@n64"
},
{
"name": "net.nosial.loglib2",
"name": "net.nosial.loglib",
"version": "latest",
"source": "nosial/loglib2=latest@github"
"source": "nosial/libs.log=latest@n64"
},
{
"name": "com.symfony.filesystem",

View file

@ -1,61 +1,57 @@
<?php
/** @noinspection PhpMissingFieldTypeInspection */
namespace ConfigLib;
use Exception;
use LogLib2\Logger;
use LogLib\Log;
use RuntimeException;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Yaml\Yaml;
class Configuration
{
/**
* The logger of the class
* @var Logger
*/
private Logger $logger;
/**
* The name of the configuration
* @var string|array
*
* @var string
*/
private string|array $name;
private $name;
/**
* The path to the configuration file
* @var string|null
*
* @var string
*/
private ?string $path;
private $path;
/**
* The configuration data
*
* @var array
*/
private array $configuration;
private $configuration;
/**
* Indicates if the current instance is modified
*
* @var bool
*/
private bool $modified;
private $modified;
/**
* Public Constructor
*
* @param string $name The name of the configuration (e.g. "MyApp" or "net.example.myapp")
* @param string|null $path The directory where the configuration file will be stored
*/
public function __construct(string $name='default', ?string $path=null)
public function __construct(string $name='default')
{
$this->logger = new Logger('net.nosial.configlib');
// Sanitize $name for a file path
$name = strtolower($name);
$name = str_replace(array('/', '\\', '.'), '_', $name);
$env = getenv(sprintf("CONFIGLIB_%s", strtoupper($name)));
$this->path = null;
$env = getenv(sprintf("CONFIGLIB_%s", strtoupper($name)));
if($env !== false)
{
if(file_exists($env))
@ -64,25 +60,10 @@
}
else
{
$this->logger->warning(sprintf('Environment variable "%s" points to a non-existent file, resorting to default/builtin configuration', $env));
Log::warning('net.nosial.configlib', sprintf('Environment variable "%s" points to a non-existent file, resorting to default/builtin configuration', $env));
}
}
if($path !== null)
{
if(!is_dir(dirname($path)))
{
throw new RuntimeException(sprintf('Directory "%s" does not exist', dirname($path)));
}
if(!is_writable(dirname($path)))
{
throw new RuntimeException(sprintf('Directory "%s" is not writable', dirname($path)));
}
$this->path = $path;
}
if ($this->path === null)
{
$filePath = $name . '.conf';
@ -139,7 +120,7 @@
if (!$configDir)
{
$this->logger->warning(sprintf('Unable to find a proper directory to store configuration paths in, using temporary directory instead: %s', sys_get_temp_dir()));
Log::warning('net.nosial.configlib', sprintf('Unable to find a proper directory to store configuration paths in, using temporary directory instead: %s', sys_get_temp_dir()));
$configDir = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'configlib';
}
}
@ -171,7 +152,7 @@
}
catch(Exception $e)
{
$this->logger->error(sprintf('Unable to load configuration "%s", %s', $this->name, $e->getMessage()), $e);
Log::error('net.nosial.configlib', sprintf('Unable to load configuration "%s", %s', $this->name, $e->getMessage()));
throw new RuntimeException(sprintf('Unable to load configuration "%s"', $this->name), $e);
}
}
@ -363,7 +344,7 @@
}
$this->modified = false;
$this->logger->debug(sprintf('Configuration "%s" saved', $this->name));
Log::debug('net.nosial.configlib', sprintf('Configuration "%s" saved', $this->name));
}
/**
@ -445,7 +426,7 @@
}
$this->modified = false;
$this->logger->debug('Loaded configuration file: ' . $this->path);
Log::debug('net.nosial.configlib', 'Loaded configuration file: ' . $this->path);
}
/**
@ -503,7 +484,7 @@
}
catch(Exception $e)
{
$this->logger->error(sprintf('Unable to save configuration "%s" to disk, %s', $this->name, $e->getMessage()), $e);
Log::error('net.nosial.configlib', sprintf('Unable to save configuration "%s" to disk, %s', $this->name, $e->getMessage()));
}
}
}