From 2a98eeb3b39d33c877d65957a8569c263a523064 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20Debussch=C3=A8re?= Date: Mon, 13 Oct 2025 19:54:30 +0200 Subject: [PATCH] feat(section): section config implementation --- src/Attribute/ConfigSection.php | 14 ++++++++++++++ src/Config.php | 21 ++++++++++++++++++++- src/ConfigAwareInterface.php | 9 +++++++++ tests/Unit/ConfigTest.php | 20 ++++++++++++++++++++ 4 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 src/Attribute/ConfigSection.php create mode 100644 src/ConfigAwareInterface.php diff --git a/src/Attribute/ConfigSection.php b/src/Attribute/ConfigSection.php new file mode 100644 index 0000000..2602552 --- /dev/null +++ b/src/Attribute/ConfigSection.php @@ -0,0 +1,14 @@ +get($id); + if (!is_array($config)) { + $config = [$config]; + } + + /** @var array $config */ + return new Config($config); + } } diff --git a/src/ConfigAwareInterface.php b/src/ConfigAwareInterface.php new file mode 100644 index 0000000..caa43aa --- /dev/null +++ b/src/ConfigAwareInterface.php @@ -0,0 +1,9 @@ +get('host'))->toBe('http://example.com') ->and($config1->get('new_key'))->toBe('new_value'); }); + +test('from() returns a new Config instance', function () { + $init = new Ini(); + $config = new Config($init->fromFile(__DIR__.'/../Config/config.ini')); + + $dbConfig = $config->from('database'); + + expect($dbConfig)->toBeInstanceOf(Config::class) + ->and($dbConfig)->not()->toBe($config) + ->and($dbConfig->get('username'))->toBe('admin') + ->and($dbConfig->get('password'))->toBe('admin') + ->and($dbConfig->get('database'))->toBe('mydb'); +}); + +test('from() throws exception when entry does not exists', function () { + $init = new Ini(); + $config = new Config($init->fromFile(__DIR__.'/../Config/config.ini')); + + $config->from('not_exist'); +})->throws(NotFoundException::class, "Config key 'not_exist' not found.");