mirror of
https://github.com/opdavies/build-configs.git
synced 2025-09-05 10:55:33 +01:00
refactor: serialise and validate a configuration
...data object
This commit is contained in:
parent
a6ff416012
commit
e30929e69c
6 changed files with 325 additions and 117 deletions
|
@ -6,12 +6,16 @@ declare(strict_types=1);
|
|||
require __DIR__.'/../vendor/autoload.php';
|
||||
|
||||
use Illuminate\Support\{Arr, Collection};
|
||||
use OliverDaviesLtd\BuildConfigs\ConfigurationData;
|
||||
use OliverDaviesLtd\BuildConfigs\Enum\{Language, WebServer};
|
||||
use OliverDaviesLtd\BuildConfigs\Validator\ConfigurationValidator;
|
||||
use Silly\Application;
|
||||
use Symfony\Component\Console\Style\SymfonyStyle;
|
||||
use Symfony\Component\Filesystem\Filesystem;
|
||||
use Symfony\Component\Validator\ConstraintViolationInterface;
|
||||
use Symfony\Component\Serializer\Encoder\JsonEncoder;
|
||||
use Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter;
|
||||
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
|
||||
use Symfony\Component\Serializer\Serializer;
|
||||
use Symfony\Component\Validator\{ConstraintViolationInterface, Validation};
|
||||
use Symfony\Component\Yaml\Yaml;
|
||||
use Twig\Environment;
|
||||
use Twig\Loader\FilesystemLoader;
|
||||
|
@ -51,14 +55,20 @@ $app->command(
|
|||
Yaml::parseFile($configFile),
|
||||
);
|
||||
|
||||
$violations = (new ConfigurationValidator())->validate($configurationData);
|
||||
// Convert the input to a configuration data object.
|
||||
$normalizer = new ObjectNormalizer(null, new CamelCaseToSnakeCaseNameConverter());
|
||||
$serializer = new Serializer([$normalizer], [new JsonEncoder()]);
|
||||
$configurationDataObject = $serializer->deserialize(json_encode($configurationData), ConfigurationData::class, 'json');
|
||||
|
||||
$validator = Validation::createValidatorBuilder()->enableAnnotationMapping()->getValidator();
|
||||
$violations = $validator->validate($configurationDataObject);
|
||||
|
||||
if (0 < $violations->count()) {
|
||||
$io->error('Configuration is invalid.');
|
||||
|
||||
$io->listing(
|
||||
collect($violations)
|
||||
->map(fn (ConstraintViolationInterface $v) => "{$v->getInvalidValue()} - {$v->getMessage()}")
|
||||
->map(fn (ConstraintViolationInterface $v) => "{$v->getPropertyPath()} - {$v->getMessage()}")
|
||||
->toArray()
|
||||
);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue