From a0edc0f770faddefb683b703ff06bcd6c14ef05d Mon Sep 17 00:00:00 2001 From: Luka Dschaak Date: Fri, 8 Sep 2023 14:55:02 +0200 Subject: [PATCH 1/7] chore: update bundle structure to the latest version --- .editorconfig | 8 +-- .gitattributes | 9 +-- .gitignore | 13 +++-- .php-cs-fixer.php | 53 +++++++++++------- README.md | 47 +++++++++++----- bin/composer | 3 + bin/run-tests | 4 ++ compose.yaml | 27 +++++++++ composer.json | 31 +++++----- docs/development.md | 11 ---- docs/images/phpstorm-run-configuration.png | Bin 68240 -> 0 bytes docs/images/phpstorm-settings.png | Bin 64930 -> 0 bytes phpstan.neon | 11 +--- src/Converter.php | 4 +- src/Converter/GenericConverter.php | 6 +- src/Converter/StrategicConverter.php | 10 ++-- src/Converter/Strategy/ConverterSelector.php | 4 +- .../NeustaConverterExtension.php | 2 +- src/Exception/ConverterException.php | 1 - src/Exception/PopulationException.php | 2 +- src/Populator.php | 6 +- src/Populator/ArrayConvertingPopulator.php | 4 +- .../ArrayPropertyMappingPopulator.php | 10 ++-- src/Populator/ContextMappingPopulator.php | 4 +- src/Populator/ConvertingPopulator.php | 2 +- src/Populator/PropertyMappingPopulator.php | 4 +- src/TargetFactory.php | 2 +- tests/Converter/GenericConverterTest.php | 5 +- tests/Converter/StrategicConverterTest.php | 8 +-- tests/Fixtures/Model/Address.php | 12 ++-- tests/Fixtures/Model/AddressFactory.php | 2 +- tests/Fixtures/Model/ContactNumber.php | 11 +--- tests/Fixtures/Model/ContactNumberFactory.php | 2 +- tests/Fixtures/Model/Hobby.php | 20 ++----- tests/Fixtures/Model/Person.php | 47 ++++++---------- tests/Fixtures/Model/PersonAddress.php | 12 ++-- tests/Fixtures/Model/PersonFactory.php | 2 +- tests/Fixtures/Model/Phone.php | 21 ++----- tests/Fixtures/Model/UnknownType.php | 3 +- tests/Fixtures/Model/User.php | 44 ++++++--------- tests/Fixtures/Populator/AddressPopulator.php | 4 +- .../Populator/PersonNamePopulator.php | 4 +- tests/NeustaConverterBundleTest.php | 2 +- ...rrayConvertingPopulatorIntegrationTest.php | 5 +- ...ropertyMappingPopulatorIntegrationTest.php | 2 - .../ArrayPropertyMappingPopulatorTest.php | 2 +- .../Populator/ContextMappingPopulatorTest.php | 1 - 47 files changed, 246 insertions(+), 241 deletions(-) create mode 100755 bin/composer create mode 100755 bin/run-tests create mode 100644 compose.yaml delete mode 100644 docs/development.md delete mode 100644 docs/images/phpstorm-run-configuration.png delete mode 100644 docs/images/phpstorm-settings.png diff --git a/.editorconfig b/.editorconfig index 532f629..c9a2a17 100644 --- a/.editorconfig +++ b/.editorconfig @@ -8,11 +8,11 @@ indent_style = space insert_final_newline = true trim_trailing_whitespace = true -[*.yaml] +[*.{json,yaml,yml}] indent_size = 2 -[*.neon] -indent_style = tab - [*.md] trim_trailing_whitespace = false + +[*.neon] +indent_style = tab diff --git a/.gitattributes b/.gitattributes index 5c9c0cb..9c57bf0 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,11 +1,12 @@ -/.github/ export-ignore -/bin/ export-ignore -/docs/ export-ignore -/tests/ export-ignore /.editorconfig export-ignore /.gitattributes export-ignore +/.github/ export-ignore /.gitignore export-ignore /.php-cs-fixer.php export-ignore +/bin/ export-ignore +/compose.yaml export-ignore /depfile.yaml export-ignore +/docs/ export-ignore /phpstan.neon export-ignore /phpunit.xml.dist export-ignore +/tests/ export-ignore diff --git a/.gitignore b/.gitignore index a10d0de..4296a36 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,14 @@ -/.idea/ - -/vendor/ +# Composer /composer.lock +/vendor/ +# PHP-CS-Fixer /.php-cs-fixer.cache +# PHPUnit +/.phpunit.result.cache /.phpunit.cache/ -/phpunit.xml +/reports/ + +# IDE project files +/.idea/ diff --git a/.php-cs-fixer.php b/.php-cs-fixer.php index 2bf7f3c..cd6d8fa 100644 --- a/.php-cs-fixer.php +++ b/.php-cs-fixer.php @@ -1,28 +1,39 @@ in([ - __DIR__ . '/src', - __DIR__ . '/tests', - ]) - ->exclude([ - 'var/', - ]); -return $config +return (new PhpCsFixer\Config) + ->setFinder((new PhpCsFixer\Finder) + ->in([ + __DIR__ . '/src', + __DIR__ . '/tests', + ]) + ->notPath(['DependencyInjection/Configuration.php', 'app/var']) + ) ->setRiskyAllowed(true) ->setRules([ - 'align_multiline_comment' => true, - 'array_indentation' => true, - 'blank_line_after_opening_tag' => true, - 'concat_space' => ['spacing' => 'one'], - 'declare_strict_types' => true, - 'linebreak_after_opening_tag' => true, - ]) - ->setFinder($finder); + '@Symfony' => true, + '@Symfony:risky' => true, + + // declare strict types must be on first line after opening tag + 'blank_line_after_opening_tag' => false, // overwrite @Symfony + 'linebreak_after_opening_tag' => false, // overwrite @Symfony + 'declare_strict_types' => true, // custom + + // allow throw's in multiple lines, so message can be a long string + 'single_line_throw' => false, // overwrite @Symfony + + // we want spaces + 'concat_space' => ['spacing' => 'one'], // overwrite @Symfony + + // we want to leave the choice to the developer, + // because some people have their own style of naming test methods + 'php_unit_method_casing' => false, // overwrite @Symfony + + // we want to leave the choice to the developer + 'php_unit_test_annotation' => false, // overwrite @Symfony:risky + ]); diff --git a/README.md b/README.md index 2e809c5..cb82a18 100644 --- a/README.md +++ b/README.md @@ -4,22 +4,43 @@ A default implementation of the Converter & Populator design pattern. ## Installation -Run `composer require teamneusta/converter-bundle` to install the bundle. +1. **Require the bundle** -Add the following line into your `bundles.php` file to activate it: + ```shell + composer require teamneusta/converter-bundle + ``` -```php -... -return [ - ... - Neusta\ConverterBundle\NeustaConverterBundle::class => ['all' => true], - ... -]; -``` +2. **Enable the bundle** + + Add the Bundle to your `config/bundles.php`: + + ```php + Neusta\ConverterBundle\NeustaConverterBundle::class => ['all' => true], + ``` -This is important for preloading the default configuration of provided converter implementations which can be reused -and simplify your code and further updates. + This is important for preloading the default configuration of provided converter implementations which can be reused + and simplify your code and further updates. ## [Usage](docs/usage.md) -## [Development](docs/development.md) +## Contribution + +Feel free to open issues for any bug, feature request, or other ideas. + +Please remember to create an issue before creating large pull requests. + +### Local Development + +To develop on local machine, the vendor dependencies are required. + +```shell +bin/composer install +``` + +We use composer scripts for our main quality tools. They can be executed via the `bin/composer` file as well. + +```shell +bin/composer cs:fix +bin/composer phpstan +bin/composer tests +``` diff --git a/bin/composer b/bin/composer new file mode 100755 index 0000000..8f3aff6 --- /dev/null +++ b/bin/composer @@ -0,0 +1,3 @@ +#!/bin/sh + +exec docker compose run --rm --user "$(id -u):$(id -g)" --no-deps php composer "$@" diff --git a/bin/run-tests b/bin/run-tests new file mode 100755 index 0000000..6370046 --- /dev/null +++ b/bin/run-tests @@ -0,0 +1,4 @@ +#!/bin/sh + +docker compose run --rm --user "$(id -u):$(id -g)" php composer tests +docker compose down diff --git a/compose.yaml b/compose.yaml new file mode 100644 index 0000000..885aa9e --- /dev/null +++ b/compose.yaml @@ -0,0 +1,27 @@ +services: + database: + image: mariadb:10.11.4 + command: [ "mysqld", "--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci" ] + environment: + MYSQL_ALLOW_EMPTY_PASSWORD: yes + MYSQL_DATABASE: pimcore + MYSQL_PASSWORD: pimcore + MYSQL_USER: pimcore + tmpfs: + - /tmp/ + - /var/lib/mysql/ + healthcheck: + test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ] + interval: 5s + timeout: 10s + + php: + image: pimcore/pimcore:php8.2-latest + volumes: + - ./:/var/www/html/ + - /home/ldschaak/.cache/composer:/.cache/composer + environment: + MYSQL_SERVER_VERSION: mariadb-10.11.4 + depends_on: + database: + condition: service_healthy diff --git a/composer.json b/composer.json index d3a3000..1c2c970 100644 --- a/composer.json +++ b/composer.json @@ -17,6 +17,12 @@ "role": "Developer" } ], + "config": { + "sort-packages": true, + "allow-plugins": { + "phpstan/extension-installer": true + } + }, "require": { "php": "^8.0", "symfony/config": "^5.4 || ^6.2", @@ -39,13 +45,6 @@ "symfony/test-pack": "^1.0", "symfony/yaml": "^5.4 || ^6.2" }, - "config": { - "preferred-install": "dist", - "sort-packages": true, - "allow-plugins": { - "phpstan/extension-installer": true - } - }, "autoload": { "psr-4": { "Neusta\\ConverterBundle\\": "src/" @@ -60,18 +59,24 @@ ] }, "scripts": { - "cs:check": "php-cs-fixer fix -v --diff --dry-run", - "cs:fix": "php-cs-fixer fix -v --diff", - "phpstan": "phpstan analyse --level=${PHPSTAN_LEVEL:-8} -c phpstan.neon", + "cs:check": "@cs:fix --dry-run", + "cs:check:gitlab-ci": "php-cs-fixer fix --dry-run --ansi --verbose --diff --format=gitlab > php-cs-fixer.json", + "cs:fix": "php-cs-fixer fix --ansi --verbose --diff", + "phpstan": "phpstan analyse --ansi", + "phpstan:gitlab-ci": "phpstan analyse --ansi --no-interaction --no-progress --error-format=gitlab > phpstan-report.json", "tests": "phpunit", + "tests:coverage:gitlab-ci": "phpunit --colors=never --coverage-text --coverage-cobertura .coverage/cobertura.xml --log-junit .coverage/junit.xml", "deptrac:analyse": "deptrac --config-file=depfile.yaml", "deptrac:analyse:visual": "deptrac --formatter=graphviz-html --output=deptrac.analyse-result.html --config-file=depfile.yaml" }, "scripts-descriptions": { "cs:check": "Checks code style (but doesn't fix anything)", - "cs:fix": "Fixes code style", - "phpstan": "PHPstan - find bugs and lacks in your type safety", - "tests": "Phpunit - write tests before you implement. That helps.", + "cs:check:gitlab-ci": "Checks code style and redirects the output into a GitLab readable file", + "cs:fix": "Checks and fixes code style", + "phpstan": "Checks for code smells", + "phpstan:gitlab-ci": "Checks for code smells and redirects the output into a GitLab readable file", + "tests": "Run all phpunit tests", + "tests:coverage:gitlab-ci": "Run all phpunit tests and create coverage reports", "deptrac:analyse": "Analyse your dependencies and follow the pre-defined rules and layers", "deptrac:analyse:visual": "Visualize your dependencies and follow the pre-defined rules and layers" } diff --git a/docs/development.md b/docs/development.md deleted file mode 100644 index 07b7914..0000000 --- a/docs/development.md +++ /dev/null @@ -1,11 +0,0 @@ -## Development - -### Running tests (incl. code coverage) - -If you want to run the tests (incl. code coverage) you can do so by configuring Phpstorm in the following way: -![phpstorm-settings.png](images/phpstorm-settings.png) - -You can see that we are using the image `pimcore/pimcore:php8.2-debug-latest` here. Of course this could be updated -after a while. -But with this image we can do code coverage by running all tests via phpunit.xml: -![img.png](images/phpstorm-run-configuration.png) diff --git a/docs/images/phpstorm-run-configuration.png b/docs/images/phpstorm-run-configuration.png deleted file mode 100644 index 09d8533bf66eb3dd72901e85ecae944b2ce0b1cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68240 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

GE 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 diff --git a/docs/images/phpstorm-settings.png b/docs/images/phpstorm-settings.png deleted file mode 100644 index a4400c43537e652e0819895a7c6ce1d6532df278..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64930 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�*Q=K#8)OBREA!+R3>_R5X!pe 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

7|wL=EZ0dd$wu6JZo0B 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 $factory + * @param TargetFactory $factory * @param array> $populators */ public function __construct( @@ -28,12 +28,12 @@ public function __construct( } /** - * @param TSource $source + * @param TSource $source * @param TContext $ctx * * @return TTarget */ - public function convert(object $source, ?object $ctx = null): object + public function convert(object $source, object $ctx = null): object { $target = $this->factory->create($ctx); diff --git a/src/Converter/StrategicConverter.php b/src/Converter/StrategicConverter.php index 87bbf3a..21695f7 100644 --- a/src/Converter/StrategicConverter.php +++ b/src/Converter/StrategicConverter.php @@ -19,7 +19,7 @@ final class StrategicConverter implements Converter { /** * @param array> $converters - * @param ConverterSelector $selector + * @param ConverterSelector $selector */ public function __construct( private array $converters, @@ -28,17 +28,17 @@ public function __construct( } /** - * @param TSource $source + * @param TSource $source * @param TContext $ctx * * @return TTarget */ - public function convert(object $source, ?object $ctx = null): object + public function convert(object $source, object $ctx = null): object { $selectedConverterKey = $this->selector->selectConverter($source, $ctx); - if (array_key_exists($selectedConverterKey, $this->converters)) { + if (\array_key_exists($selectedConverterKey, $this->converters)) { return $this->converters[$selectedConverterKey]->convert($source, $ctx); } - throw new ConverterException(sprintf("No converter found for key <%s>", $selectedConverterKey)); + throw new ConverterException(sprintf('No converter found for key <%s>', $selectedConverterKey)); } } diff --git a/src/Converter/Strategy/ConverterSelector.php b/src/Converter/Strategy/ConverterSelector.php index ad443fc..bf8fbbb 100644 --- a/src/Converter/Strategy/ConverterSelector.php +++ b/src/Converter/Strategy/ConverterSelector.php @@ -11,8 +11,8 @@ interface ConverterSelector { /** - * @param TSource $source + * @param TSource $source * @param TContext $ctx */ - public function selectConverter(object $source, ?object $ctx = null): string; + public function selectConverter(object $source, object $ctx = null): string; } diff --git a/src/DependencyInjection/NeustaConverterExtension.php b/src/DependencyInjection/NeustaConverterExtension.php index 3077f69..f1630ff 100644 --- a/src/DependencyInjection/NeustaConverterExtension.php +++ b/src/DependencyInjection/NeustaConverterExtension.php @@ -20,7 +20,7 @@ final class NeustaConverterExtension extends ConfigurableExtension */ public function loadInternal(array $mergedConfig, ContainerBuilder $container): void { - $loader = new YamlFileLoader($container, new FileLocator(dirname(__DIR__, 2) . '/config')); + $loader = new YamlFileLoader($container, new FileLocator(\dirname(__DIR__, 2) . '/config')); $loader->load('services.yaml'); foreach ($mergedConfig['converter'] as $converterId => $converter) { diff --git a/src/Exception/ConverterException.php b/src/Exception/ConverterException.php index dd27ad7..345d5e5 100644 --- a/src/Exception/ConverterException.php +++ b/src/Exception/ConverterException.php @@ -6,5 +6,4 @@ class ConverterException extends \Exception { - } diff --git a/src/Exception/PopulationException.php b/src/Exception/PopulationException.php index 1074dcc..95d61ee 100644 --- a/src/Exception/PopulationException.php +++ b/src/Exception/PopulationException.php @@ -9,7 +9,7 @@ class PopulationException extends \Exception public function __construct(string $sourcePropertyName, string $targetPropertyName, \Throwable $previous) { parent::__construct( - sprintf("Population Exception (%s -> %s): %s", + sprintf('Population Exception (%s -> %s): %s', $sourcePropertyName, $targetPropertyName, $previous->getMessage(), diff --git a/src/Populator.php b/src/Populator.php index dc7fae1..0978f68 100644 --- a/src/Populator.php +++ b/src/Populator.php @@ -12,9 +12,9 @@ interface Populator { /** - * @param TTarget $target - * @param TSource $source + * @param TTarget $target + * @param TSource $source * @param TContext $ctx */ - public function populate(object $target, object $source, ?object $ctx = null): void; + public function populate(object $target, object $source, object $ctx = null): void; } diff --git a/src/Populator/ArrayConvertingPopulator.php b/src/Populator/ArrayConvertingPopulator.php index be91fab..736893b 100644 --- a/src/Populator/ArrayConvertingPopulator.php +++ b/src/Populator/ArrayConvertingPopulator.php @@ -33,7 +33,7 @@ public function __construct( Converter $converter, string $sourceArrayPropertyName, string $targetPropertyName, - ?string $sourceArrayItemPropertyName = null, + string $sourceArrayItemPropertyName = null, PropertyAccessorInterface $arrayItemAccessor = null, PropertyAccessorInterface $accessor = null, ) { @@ -50,7 +50,7 @@ public function __construct( /** * @throws PopulationException */ - public function populate(object $target, object $source, ?object $ctx = null): void + public function populate(object $target, object $source, object $ctx = null): void { $this->populator->populate($target, $source, $ctx); } diff --git a/src/Populator/ArrayPropertyMappingPopulator.php b/src/Populator/ArrayPropertyMappingPopulator.php index ffe964d..1a4dffd 100644 --- a/src/Populator/ArrayPropertyMappingPopulator.php +++ b/src/Populator/ArrayPropertyMappingPopulator.php @@ -30,11 +30,11 @@ public function __construct( private string $targetProperty, private string $sourceArrayProperty, private ?string $sourceArrayItemProperty = null, - ?\Closure $mapper = null, + \Closure $mapper = null, PropertyAccessorInterface $arrayItemAccessor = null, PropertyAccessorInterface $accessor = null, ) { - $this->mapper = $mapper ?? static fn($v) => $v; + $this->mapper = $mapper ?? static fn ($v) => $v; $this->arrayItemAccessor = $arrayItemAccessor ?? PropertyAccess::createPropertyAccessor(); $this->accessor = $accessor ?? PropertyAccess::createPropertyAccessor(); } @@ -42,11 +42,11 @@ public function __construct( /** * @throws PopulationException */ - public function populate(object $target, object $source, ?object $ctx = null): void + public function populate(object $target, object $source, object $ctx = null): void { try { $unwrappedArray = array_map( - fn($item) => null !== $this->sourceArrayItemProperty + fn ($item) => null !== $this->sourceArrayItemProperty ? $this->arrayItemAccessor->getValue($item, $this->sourceArrayItemProperty) : $item, $this->accessor->getValue($source, $this->sourceArrayProperty), @@ -55,7 +55,7 @@ public function populate(object $target, object $source, ?object $ctx = null): v $this->accessor->setValue( $target, $this->targetProperty, - array_map(fn($item) => ($this->mapper)($item, $ctx), $unwrappedArray), + array_map(fn ($item) => ($this->mapper)($item, $ctx), $unwrappedArray), ); } catch (\Throwable $exception) { throw new PopulationException($this->sourceArrayProperty, $this->targetProperty, $exception); diff --git a/src/Populator/ContextMappingPopulator.php b/src/Populator/ContextMappingPopulator.php index 60dc11f..6f57522 100644 --- a/src/Populator/ContextMappingPopulator.php +++ b/src/Populator/ContextMappingPopulator.php @@ -29,7 +29,7 @@ final class ContextMappingPopulator implements Populator public function __construct( private string $targetProperty, private string $contextProperty, - ?\Closure $mapper = null, + \Closure $mapper = null, PropertyAccessorInterface $accessor = null, ) { $this->mapper = $mapper ?? static fn ($v) => $v; @@ -39,7 +39,7 @@ public function __construct( /** * @throws PopulationException */ - public function populate(object $target, object $source, ?object $ctx = null): void + public function populate(object $target, object $source, object $ctx = null): void { if (!$ctx || !$ctx->hasKey($this->contextProperty)) { return; diff --git a/src/Populator/ConvertingPopulator.php b/src/Populator/ConvertingPopulator.php index c72ac9d..5910361 100644 --- a/src/Populator/ConvertingPopulator.php +++ b/src/Populator/ConvertingPopulator.php @@ -46,7 +46,7 @@ public function __construct( /** * @throws PopulationException */ - public function populate(object $target, object $source, ?object $ctx = null): void + public function populate(object $target, object $source, object $ctx = null): void { $this->populator->populate($target, $source, $ctx); } diff --git a/src/Populator/PropertyMappingPopulator.php b/src/Populator/PropertyMappingPopulator.php index 36c2e90..af34a06 100644 --- a/src/Populator/PropertyMappingPopulator.php +++ b/src/Populator/PropertyMappingPopulator.php @@ -28,7 +28,7 @@ final class PropertyMappingPopulator implements Populator public function __construct( private string $targetProperty, private string $sourceProperty, - ?\Closure $mapper = null, + \Closure $mapper = null, PropertyAccessorInterface $accessor = null, ) { $this->mapper = $mapper ?? static fn ($v) => $v; @@ -38,7 +38,7 @@ public function __construct( /** * @throws PopulationException */ - public function populate(object $target, object $source, ?object $ctx = null): void + public function populate(object $target, object $source, object $ctx = null): void { try { $this->accessor->setValue( diff --git a/src/TargetFactory.php b/src/TargetFactory.php index 2620b86..100c8a2 100644 --- a/src/TargetFactory.php +++ b/src/TargetFactory.php @@ -15,5 +15,5 @@ interface TargetFactory * * @return TTarget */ - public function create(?object $ctx = null): object; + public function create(object $ctx = null): object; } diff --git a/tests/Converter/GenericConverterTest.php b/tests/Converter/GenericConverterTest.php index e03a943..65fd6db 100644 --- a/tests/Converter/GenericConverterTest.php +++ b/tests/Converter/GenericConverterTest.php @@ -5,12 +5,11 @@ namespace Neusta\ConverterBundle\Tests\Converter; use Neusta\ConverterBundle\Converter; -use Neusta\ConverterBundle\Converter\GenericConverter; use Neusta\ConverterBundle\Converter\Context\GenericContext; +use Neusta\ConverterBundle\Converter\GenericConverter; use Neusta\ConverterBundle\Populator\ContextMappingPopulator; -use Neusta\ConverterBundle\Populator\PropertyMappingPopulator; -use Neusta\ConverterBundle\Tests\Fixtures\Model\PersonFactory; use Neusta\ConverterBundle\Tests\Fixtures\Model\Person; +use Neusta\ConverterBundle\Tests\Fixtures\Model\PersonFactory; use Neusta\ConverterBundle\Tests\Fixtures\Model\User; use Neusta\ConverterBundle\Tests\Fixtures\Populator\PersonNamePopulator; use PHPUnit\Framework\TestCase; diff --git a/tests/Converter/StrategicConverterTest.php b/tests/Converter/StrategicConverterTest.php index f860491..e734e74 100644 --- a/tests/Converter/StrategicConverterTest.php +++ b/tests/Converter/StrategicConverterTest.php @@ -5,10 +5,10 @@ namespace Neusta\ConverterBundle\Tests\Converter; use Neusta\ConverterBundle\Converter; -use Neusta\ConverterBundle\Converter\StrategicConverter; use Neusta\ConverterBundle\Converter\Context\GenericContext; -use Neusta\ConverterBundle\Exception\ConverterException; +use Neusta\ConverterBundle\Converter\StrategicConverter; use Neusta\ConverterBundle\Converter\Strategy\ConverterSelector; +use Neusta\ConverterBundle\Exception\ConverterException; use Neusta\ConverterBundle\Tests\Fixtures\Model\Person; use Neusta\ConverterBundle\Tests\Fixtures\Model\User; use PHPUnit\Framework\TestCase; @@ -45,7 +45,6 @@ public function testConvert_regular_case(): void $this->converter->convert($user, null)->willReturn($person)->shouldBeCalled(); $this->strategyHandler->convert($user); - } public function testConvert_exceptional_case(): void @@ -67,9 +66,8 @@ public function testConvert_exceptional_case(): void $this->converter->convert($user, null)->willReturn($person)->shouldNotBeCalled(); $this->expectException(ConverterException::class); - $this->expectExceptionMessage("No converter found for key "); + $this->expectExceptionMessage('No converter found for key '); $this->strategyHandler->convert($user); - } } diff --git a/tests/Fixtures/Model/Address.php b/tests/Fixtures/Model/Address.php index 570e2bc..4bb79d0 100644 --- a/tests/Fixtures/Model/Address.php +++ b/tests/Fixtures/Model/Address.php @@ -16,9 +16,10 @@ public function getPostalCode(): string return $this->postalCode; } - public function setPostalCode(string $postalCode): Address + public function setPostalCode(string $postalCode): self { $this->postalCode = $postalCode; + return $this; } @@ -27,9 +28,10 @@ public function getCity(): string return $this->city; } - public function setCity(string $city): Address + public function setCity(string $city): self { $this->city = $city; + return $this; } @@ -38,9 +40,10 @@ public function getStreet(): string return $this->street; } - public function setStreet(string $street): Address + public function setStreet(string $street): self { $this->street = $street; + return $this; } @@ -49,9 +52,10 @@ public function getStreetNo(): string return $this->streetNo; } - public function setStreetNo(string $streetNo): Address + public function setStreetNo(string $streetNo): self { $this->streetNo = $streetNo; + return $this; } } diff --git a/tests/Fixtures/Model/AddressFactory.php b/tests/Fixtures/Model/AddressFactory.php index bdfc099..34d7132 100644 --- a/tests/Fixtures/Model/AddressFactory.php +++ b/tests/Fixtures/Model/AddressFactory.php @@ -12,7 +12,7 @@ */ class AddressFactory implements TargetFactory { - public function create(?object $ctx = null): PersonAddress + public function create(object $ctx = null): PersonAddress { return new PersonAddress(); } diff --git a/tests/Fixtures/Model/ContactNumber.php b/tests/Fixtures/Model/ContactNumber.php index 1b0ae76..75d71a3 100644 --- a/tests/Fixtures/Model/ContactNumber.php +++ b/tests/Fixtures/Model/ContactNumber.php @@ -8,22 +8,15 @@ class ContactNumber { private string $phoneNumber; - /** - * @return string - */ public function getPhoneNumber(): string { return $this->phoneNumber; } - /** - * @param string $phoneNumber - * @return ContactNumber - */ - public function setPhoneNumber(string $phoneNumber): ContactNumber + public function setPhoneNumber(string $phoneNumber): self { $this->phoneNumber = $phoneNumber; + return $this; } - } diff --git a/tests/Fixtures/Model/ContactNumberFactory.php b/tests/Fixtures/Model/ContactNumberFactory.php index e7dbeaf..cfb4dc9 100644 --- a/tests/Fixtures/Model/ContactNumberFactory.php +++ b/tests/Fixtures/Model/ContactNumberFactory.php @@ -12,7 +12,7 @@ */ class ContactNumberFactory implements TargetFactory { - public function create(?object $ctx = null): ContactNumber + public function create(object $ctx = null): ContactNumber { return new ContactNumber(); } diff --git a/tests/Fixtures/Model/Hobby.php b/tests/Fixtures/Model/Hobby.php index 23ac666..f5751fe 100644 --- a/tests/Fixtures/Model/Hobby.php +++ b/tests/Fixtures/Model/Hobby.php @@ -10,39 +10,27 @@ class Hobby private string $category; - /** - * @return string - */ public function getLabel(): string { return $this->label; } - /** - * @param string $label - * @return Hobby - */ - public function setLabel(string $label): Hobby + public function setLabel(string $label): self { $this->label = $label; + return $this; } - /** - * @return string - */ public function getCategory(): string { return $this->category; } - /** - * @param string $category - * @return Hobby - */ - public function setCategory(string $category): Hobby + public function setCategory(string $category): self { $this->category = $category; + return $this; } diff --git a/tests/Fixtures/Model/Person.php b/tests/Fixtures/Model/Person.php index ded0b51..a15a6d8 100644 --- a/tests/Fixtures/Model/Person.php +++ b/tests/Fixtures/Model/Person.php @@ -25,21 +25,15 @@ class Person /** @var array */ private array $contactNumbers; - /** - * @return array - */ public function getContactNumbers(): array { return $this->contactNumbers; } - /** - * @param array $contactNumbers - * @return Person - */ - public function setContactNumbers(array $contactNumbers): Person + public function setContactNumbers(array $contactNumbers): self { $this->contactNumbers = $contactNumbers; + return $this; } @@ -47,9 +41,11 @@ public function getFullName(): string { return $this->fullName; } - public function setFullName(?string $fullName): Person + + public function setFullName(?string $fullName): self { $this->fullName = $fullName; + return $this; } @@ -58,9 +54,10 @@ public function getAge(): ?int return $this->age; } - public function setAge(?int $age): Person + public function setAge(?int $age): self { $this->age = $age; + return $this; } @@ -69,57 +66,46 @@ public function getAddress(): ?PersonAddress return $this->address; } - public function setAddress(?PersonAddress $address): Person + public function setAddress(?PersonAddress $address): self { $this->address = $address; + return $this; } - /** - * @return array - */ public function getFavouriteMovies(): array { return $this->favouriteMovies; } - /** - * @param array $favouriteMovies - * @return Person - */ - public function setFavouriteMovies(array $favouriteMovies): Person + public function setFavouriteMovies(array $favouriteMovies): self { $this->favouriteMovies = $favouriteMovies; + return $this; } - /** - * @return array - */ public function getActivities(): array { return $this->activities; } - /** - * @param array $activities - * @return Person - */ - public function setActivities(array $activities): Person + public function setActivities(array $activities): self { $this->activities = $activities; + return $this; } - public function getLocale(): ?string { return $this->locale; } - public function setLocale(?string $locale): Person + public function setLocale(?string $locale): self { $this->locale = $locale; + return $this; } @@ -128,9 +114,10 @@ public function getGroup(): ?string return $this->group; } - public function setGroup(?string $group): Person + public function setGroup(?string $group): self { $this->group = $group; + return $this; } } diff --git a/tests/Fixtures/Model/PersonAddress.php b/tests/Fixtures/Model/PersonAddress.php index 20f336d..0e441d3 100644 --- a/tests/Fixtures/Model/PersonAddress.php +++ b/tests/Fixtures/Model/PersonAddress.php @@ -16,9 +16,10 @@ public function getPostalCode(): string return $this->postalCode; } - public function setPostalCode(string $postalCode): PersonAddress + public function setPostalCode(string $postalCode): self { $this->postalCode = $postalCode; + return $this; } @@ -27,9 +28,10 @@ public function getCity(): string return $this->city; } - public function setCity(string $city): PersonAddress + public function setCity(string $city): self { $this->city = $city; + return $this; } @@ -38,9 +40,10 @@ public function getStreet(): string return $this->street; } - public function setStreet(string $street): PersonAddress + public function setStreet(string $street): self { $this->street = $street; + return $this; } @@ -49,9 +52,10 @@ public function getStreetNo(): string return $this->streetNo; } - public function setStreetNo(string $streetNo): PersonAddress + public function setStreetNo(string $streetNo): self { $this->streetNo = $streetNo; + return $this; } } diff --git a/tests/Fixtures/Model/PersonFactory.php b/tests/Fixtures/Model/PersonFactory.php index 1c73976..163cfbd 100644 --- a/tests/Fixtures/Model/PersonFactory.php +++ b/tests/Fixtures/Model/PersonFactory.php @@ -12,7 +12,7 @@ */ class PersonFactory implements TargetFactory { - public function create(?object $ctx = null): Person + public function create(object $ctx = null): Person { return new Person(); } diff --git a/tests/Fixtures/Model/Phone.php b/tests/Fixtures/Model/Phone.php index 8c07fd8..8bdee72 100644 --- a/tests/Fixtures/Model/Phone.php +++ b/tests/Fixtures/Model/Phone.php @@ -9,40 +9,27 @@ class Phone private string $type; private string $number; - /** - * @return string - */ public function getType(): string { return $this->type; } - /** - * @param string $type - * @return Phone - */ - public function setType(string $type): Phone + public function setType(string $type): self { $this->type = $type; + return $this; } - /** - * @return string - */ public function getNumber(): string { return $this->number; } - /** - * @param string $number - * @return Phone - */ - public function setNumber(string $number): Phone + public function setNumber(string $number): self { $this->number = $number; + return $this; } - } diff --git a/tests/Fixtures/Model/UnknownType.php b/tests/Fixtures/Model/UnknownType.php index 3822212..7b834cb 100644 --- a/tests/Fixtures/Model/UnknownType.php +++ b/tests/Fixtures/Model/UnknownType.php @@ -6,5 +6,4 @@ class UnknownType { - -} \ No newline at end of file +} diff --git a/tests/Fixtures/Model/User.php b/tests/Fixtures/Model/User.php index c9a31f5..e463d83 100644 --- a/tests/Fixtures/Model/User.php +++ b/tests/Fixtures/Model/User.php @@ -29,7 +29,7 @@ public function getUuid(): int return $this->uuid; } - public function setUuid(int $uuid): User + public function setUuid(int $uuid): self { $this->uuid = $uuid; @@ -41,7 +41,7 @@ public function getFirstname(): string return $this->firstname; } - public function setFirstname(string $firstname): User + public function setFirstname(string $firstname): self { $this->firstname = $firstname; @@ -53,7 +53,7 @@ public function getLastname(): string return $this->lastname; } - public function setLastname(string $lastname): User + public function setLastname(string $lastname): self { $this->lastname = $lastname; @@ -65,9 +65,10 @@ public function getFullName(): string return $this->fullName; } - public function setFullName(string $fullName): User + public function setFullName(string $fullName): self { $this->fullName = $fullName; + return $this; } @@ -76,9 +77,10 @@ public function getAgeInYears(): int return $this->ageInYears; } - public function setAgeInYears($ageInYears): User + public function setAgeInYears($ageInYears): self { $this->ageInYears = $ageInYears; + return $this; } @@ -87,45 +89,34 @@ public function getAddress(): Address return $this->address; } - public function setAddress(Address $address): User + public function setAddress(Address $address): self { $this->address = $address; + return $this; } - /** - * @return array - */ public function getFavouriteMovies(): array { return $this->favouriteMovies; } - /** - * @param array $favouriteMovies - * @return User - */ - public function setFavouriteMovies(array $favouriteMovies): User + public function setFavouriteMovies(array $favouriteMovies): self { $this->favouriteMovies = $favouriteMovies; + return $this; } - /** - * @return array - */ public function getHobbies(): array { return $this->hobbies; } - /** - * @param array $hobbies - * @return User - */ - public function setHobbies(array $hobbies): User + public function setHobbies(array $hobbies): self { $this->hobbies = $hobbies; + return $this; } @@ -133,9 +124,11 @@ public function getFieldWithUnknownType(): UnknownType { return $this->fieldWithUnknownType; } - public function setFieldWithUnknownType(UnknownType $fieldWithUnknownType): User + + public function setFieldWithUnknownType(UnknownType $fieldWithUnknownType): self { $this->fieldWithUnknownType = $fieldWithUnknownType; + return $this; } @@ -149,12 +142,11 @@ public function getPhones(): array /** * @param array $phones - * @return User */ - public function setPhones(array $phones): User + public function setPhones(array $phones): self { $this->phones = $phones; + return $this; } - } diff --git a/tests/Fixtures/Populator/AddressPopulator.php b/tests/Fixtures/Populator/AddressPopulator.php index 8f67145..2104032 100644 --- a/tests/Fixtures/Populator/AddressPopulator.php +++ b/tests/Fixtures/Populator/AddressPopulator.php @@ -6,15 +6,15 @@ use Neusta\ConverterBundle\Converter\Context\GenericContext; use Neusta\ConverterBundle\Populator; -use Neusta\ConverterBundle\Tests\Fixtures\Model\PersonAddress; use Neusta\ConverterBundle\Tests\Fixtures\Model\Address; +use Neusta\ConverterBundle\Tests\Fixtures\Model\PersonAddress; /** * @implements Populator */ class AddressPopulator implements Populator { - public function populate(object $target, object $source, ?object $ctx = null): void + public function populate(object $target, object $source, object $ctx = null): void { $target->setStreet($source->getStreet()); $target->setStreetNo($source->getStreetNo()); diff --git a/tests/Fixtures/Populator/PersonNamePopulator.php b/tests/Fixtures/Populator/PersonNamePopulator.php index b04b77a..2a9931e 100644 --- a/tests/Fixtures/Populator/PersonNamePopulator.php +++ b/tests/Fixtures/Populator/PersonNamePopulator.php @@ -14,7 +14,7 @@ */ class PersonNamePopulator implements Populator { - public function populate(object $target, object $source, ?object $ctx = null): void + public function populate(object $target, object $source, object $ctx = null): void { $separator = ' '; if ($ctx?->hasKey('separator')) { @@ -25,7 +25,7 @@ public function populate(object $target, object $source, ?object $ctx = null): v $separator, [ $source->getFirstname(), - $source->getLastname() + $source->getLastname(), ] )); } diff --git a/tests/NeustaConverterBundleTest.php b/tests/NeustaConverterBundleTest.php index 2057169..4d35444 100644 --- a/tests/NeustaConverterBundleTest.php +++ b/tests/NeustaConverterBundleTest.php @@ -11,6 +11,6 @@ class NeustaConverterBundleTest extends TestCase { public function testThatBundlePathIsCurrentDir(): void { - self::assertStringEndsWith('src', (new NeustaConverterBundle)->getPath()); + self::assertStringEndsWith('src', (new NeustaConverterBundle())->getPath()); } } diff --git a/tests/Populator/ArrayConvertingPopulatorIntegrationTest.php b/tests/Populator/ArrayConvertingPopulatorIntegrationTest.php index 5192c4f..3004005 100644 --- a/tests/Populator/ArrayConvertingPopulatorIntegrationTest.php +++ b/tests/Populator/ArrayConvertingPopulatorIntegrationTest.php @@ -5,9 +5,6 @@ namespace Neusta\ConverterBundle\Tests\Populator; use Neusta\ConverterBundle\Populator\ArrayConvertingPopulator; -use Neusta\ConverterBundle\Populator\ArrayPropertyMappingPopulator; -use Neusta\ConverterBundle\Populator\PropertyMappingPopulator; -use Neusta\ConverterBundle\Tests\Fixtures\Model\Hobby; use Neusta\ConverterBundle\Tests\Fixtures\Model\Person; use Neusta\ConverterBundle\Tests\Fixtures\Model\Phone; use Neusta\ConverterBundle\Tests\Fixtures\Model\User; @@ -29,7 +26,7 @@ public function testPopulate(): void $phone2 = (new Phone())->setType('mobile')->setNumber('0172 2456543'); $phone3 = (new Phone())->setType('home')->setNumber('0421 2456543'); - $user = (new User())->setPhones([$phone1, $phone2, $phone3,]); + $user = (new User())->setPhones([$phone1, $phone2, $phone3]); $person = new Person(); $this->populator->populate($person, $user); diff --git a/tests/Populator/ArrayPropertyMappingPopulatorIntegrationTest.php b/tests/Populator/ArrayPropertyMappingPopulatorIntegrationTest.php index b9571f6..b4f9089 100644 --- a/tests/Populator/ArrayPropertyMappingPopulatorIntegrationTest.php +++ b/tests/Populator/ArrayPropertyMappingPopulatorIntegrationTest.php @@ -4,9 +4,7 @@ namespace Neusta\ConverterBundle\Tests\Populator; -use Neusta\ConverterBundle\Populator\ArrayConvertingPopulator; use Neusta\ConverterBundle\Populator\ArrayPropertyMappingPopulator; -use Neusta\ConverterBundle\Populator\PropertyMappingPopulator; use Neusta\ConverterBundle\Tests\Fixtures\Model\Hobby; use Neusta\ConverterBundle\Tests\Fixtures\Model\Person; use Neusta\ConverterBundle\Tests\Fixtures\Model\User; diff --git a/tests/Populator/ArrayPropertyMappingPopulatorTest.php b/tests/Populator/ArrayPropertyMappingPopulatorTest.php index 3e995f1..a82a666 100644 --- a/tests/Populator/ArrayPropertyMappingPopulatorTest.php +++ b/tests/Populator/ArrayPropertyMappingPopulatorTest.php @@ -34,7 +34,7 @@ public function test_populateWithoutInnerProperty(): void public function test_populateWithInnerProperty(): void { - $populator = new ArrayPropertyMappingPopulator('activities', 'hobbies','label'); + $populator = new ArrayPropertyMappingPopulator('activities', 'hobbies', 'label'); $user = (new User())->setHobbies([ (new Hobby())->setLabel('reading'), (new Hobby())->setLabel('swimming'), diff --git a/tests/Populator/ContextMappingPopulatorTest.php b/tests/Populator/ContextMappingPopulatorTest.php index 6aec648..5f9a635 100644 --- a/tests/Populator/ContextMappingPopulatorTest.php +++ b/tests/Populator/ContextMappingPopulatorTest.php @@ -7,7 +7,6 @@ use Neusta\ConverterBundle\Converter\Context\GenericContext; use Neusta\ConverterBundle\Exception\PopulationException; use Neusta\ConverterBundle\Populator\ContextMappingPopulator; -use Neusta\ConverterBundle\Populator\PropertyMappingPopulator; use Neusta\ConverterBundle\Tests\Fixtures\Model\Person; use Neusta\ConverterBundle\Tests\Fixtures\Model\User; use PHPUnit\Framework\TestCase; From 1e3cec5aaf8bb26089b2bdd6c726756a6c25e07b Mon Sep 17 00:00:00 2001 From: Luka Dschaak Date: Fri, 8 Sep 2023 15:14:08 +0200 Subject: [PATCH 2/7] update phpunit.xml.dist --- phpunit.xml.dist | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/phpunit.xml.dist b/phpunit.xml.dist index d5cfbbc..9e7d999 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -3,7 +3,8 @@ - + ./tests/ From 3525dbb4fb480880f900a80699f91aad1daf9644 Mon Sep 17 00:00:00 2001 From: Luka Dschaak Date: Mon, 11 Sep 2023 08:38:10 +0200 Subject: [PATCH 3/7] fix typo in .php-cs-fixer.php Co-authored-by: Jacob Dreesen --- .php-cs-fixer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.php-cs-fixer.php b/.php-cs-fixer.php index cd6d8fa..4795d19 100644 --- a/.php-cs-fixer.php +++ b/.php-cs-fixer.php @@ -3,7 +3,7 @@ /* * This document has been initially generated with * https://mlocati.github.io/php-cs-fixer-configurator/#version:3.5.0|configurator - * and then adapted be our needs + * and then adapted to our needs */ return (new PhpCsFixer\Config) From 698f99b1de3bf441e0236698891287696f7b5fd3 Mon Sep 17 00:00:00 2001 From: Luka Dschaak Date: Mon, 11 Sep 2023 08:48:04 +0200 Subject: [PATCH 4/7] chore: change base path of bundle to bundle root --- src/NeustaConverterBundle.php | 2 +- tests/NeustaConverterBundleTest.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NeustaConverterBundle.php b/src/NeustaConverterBundle.php index 5b78695..35e0a9e 100644 --- a/src/NeustaConverterBundle.php +++ b/src/NeustaConverterBundle.php @@ -10,6 +10,6 @@ class NeustaConverterBundle extends Bundle { public function getPath(): string { - return __DIR__; + return \dirname(__DIR__); } } diff --git a/tests/NeustaConverterBundleTest.php b/tests/NeustaConverterBundleTest.php index 4d35444..7dd4d6d 100644 --- a/tests/NeustaConverterBundleTest.php +++ b/tests/NeustaConverterBundleTest.php @@ -11,6 +11,6 @@ class NeustaConverterBundleTest extends TestCase { public function testThatBundlePathIsCurrentDir(): void { - self::assertStringEndsWith('src', (new NeustaConverterBundle())->getPath()); + self::assertStringEndsNotWith('src', (new NeustaConverterBundle())->getPath()); } } From 28f8e6d179aeeb1c2356be6a65cb0bf9f69b1389 Mon Sep 17 00:00:00 2001 From: Luka Dschaak Date: Mon, 11 Sep 2023 08:48:41 +0200 Subject: [PATCH 5/7] ci: add 'workflow_dispatch' to GitHub actions --- .github/workflows/test-and-qa.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test-and-qa.yaml b/.github/workflows/test-and-qa.yaml index bb294bb..0b336af 100644 --- a/.github/workflows/test-and-qa.yaml +++ b/.github/workflows/test-and-qa.yaml @@ -5,6 +5,7 @@ on: branches: [ "main" ] pull_request: branches: [ "main" ] + workflow_dispatch: permissions: contents: read From 01a0b3490437f15fe372b44efa4e34bd5be75614 Mon Sep 17 00:00:00 2001 From: Luka Dschaak Date: Mon, 11 Sep 2023 08:48:56 +0200 Subject: [PATCH 6/7] chore: fix yaml indentation --- config/services.yaml | 60 ++++++++--------- docs/usage.md | 82 +++++++++++------------ tests/app/config/services.yaml | 116 ++++++++++++++++----------------- 3 files changed, 129 insertions(+), 129 deletions(-) diff --git a/config/services.yaml b/config/services.yaml index 0eb1f1f..355a49e 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -1,37 +1,37 @@ services: - _defaults: - autowire: false - autoconfigure: false + _defaults: + autowire: false + autoconfigure: false - ############################################################ - # Generic Converter - ############################################################ - neusta_converter.generic_converter: - abstract: true - class: Neusta\ConverterBundle\Converter\GenericConverter + ############################################################ + # Generic Converter + ############################################################ + neusta_converter.generic_converter: + abstract: true + class: Neusta\ConverterBundle\Converter\GenericConverter - ############################################################ - # Strategic Converter - ############################################################ - neusta_converter.strategic_converter: - abstract: true - class: Neusta\ConverterBundle\Converter\StrategicConverter + ############################################################ + # Strategic Converter + ############################################################ + neusta_converter.strategic_converter: + abstract: true + class: Neusta\ConverterBundle\Converter\StrategicConverter - ############################################################ - # Populators - ############################################################ - neusta_converter.property_mapping_populator: - abstract: true - class: Neusta\ConverterBundle\Populator\PropertyMappingPopulator + ############################################################ + # Populators + ############################################################ + neusta_converter.property_mapping_populator: + abstract: true + class: Neusta\ConverterBundle\Populator\PropertyMappingPopulator - neusta_converter.converting_populator: - abstract: true - class: Neusta\ConverterBundle\Populator\ConvertingPopulator + neusta_converter.converting_populator: + abstract: true + class: Neusta\ConverterBundle\Populator\ConvertingPopulator - neusta_converter.array_property_mapping_populator: - abstract: true - class: Neusta\ConverterBundle\Populator\ArrayPropertyMappingPopulator + neusta_converter.array_property_mapping_populator: + abstract: true + class: Neusta\ConverterBundle\Populator\ArrayPropertyMappingPopulator - neusta_converter.array_converting_populator: - abstract: true - class: Neusta\ConverterBundle\Populator\ArrayConvertingPopulator + neusta_converter.array_converting_populator: + abstract: true + class: Neusta\ConverterBundle\Populator\ArrayConvertingPopulator diff --git a/docs/usage.md b/docs/usage.md index 3a1b4f0..3e6b581 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -98,8 +98,8 @@ To put things together, register the factory and populator as services: ```yaml # config/services.yaml services: - YourNamespace\PersonFactory: ~ - YourNamespace\PersonNamePopulator: ~ + YourNamespace\PersonFactory: ~ + YourNamespace\PersonNamePopulator: ~ ``` And then declare the following converter in your package config: @@ -107,12 +107,12 @@ And then declare the following converter in your package config: ```yaml # config/packages/neusta_converter.yaml neusta_converter: - converter: - person.converter: - target_factory: YourNamespace\PersonFactory - populators: - - YourNamespace\PersonNamePopulator - # additional populators may follow + converter: + person.converter: + target_factory: YourNamespace\PersonFactory + populators: + - YourNamespace\PersonNamePopulator + # additional populators may follow ``` > Note: You can use a custom implementation of the `Converter` interface via the `converter` keyword. @@ -129,12 +129,12 @@ You can use it in your converter config via the `properties` keyword: ```yaml # config/packages/neusta_converter.yaml neusta_converter: - converter: - person.converter: - ... - properties: - email: ~ - phoneNumber: phone + converter: + person.converter: + # ... + properties: + email: ~ + phoneNumber: phone ``` Which will populate @@ -164,7 +164,7 @@ You can use it in your converter config via the `context` keyword: neusta_converter: converter: person.converter: - ... + # ... context: group: ~ locale: language @@ -251,22 +251,22 @@ Therefore, we have a `ConvertingPopulator` which can be used as follows: ```yaml # config/packages/neusta_converter.yaml neusta_converter: - converter: - person.converter: - ... - populators: - - person.address.populator + converter: + person.converter: + # ... + populators: + - person.address.populator - address.converter: - ... + address.converter: + # ... -... +# ... person.address.populator: - class: Neusta\ConverterBundle\Populator\ConvertingPopulator - arguments: - $converter: '@address.converter' - $sourcePropertyName: 'address' - $targetPropertyName: 'address' + class: Neusta\ConverterBundle\Populator\ConvertingPopulator + arguments: + $converter: '@address.converter' + $sourcePropertyName: 'address' + $targetPropertyName: 'address' ``` Be aware - that both properties have the same name should not lead you think they have the same type. @@ -323,22 +323,22 @@ Now you have to declare the following populator: ```yaml # config/packages/neusta_converter.yaml neusta_converter: - converter: - person.converter: - ... - populators: - - person.addresses.populator + converter: + person.converter: + # ... + populators: + - person.addresses.populator - address.converter: - ... + address.converter: + # ... -... +# ... person.addresses.populator: - class: Neusta\ConverterBundle\Populator\ArrayConvertingPopulator - arguments: - $converter: '@address.converter' - $sourcePropertyName: 'addresses' - $targetPropertyName: 'addresses' + class: Neusta\ConverterBundle\Populator\ArrayConvertingPopulator + arguments: + $converter: '@address.converter' + $sourcePropertyName: 'addresses' + $targetPropertyName: 'addresses' ``` There is no new converter but a different populator implementation for this. diff --git a/tests/app/config/services.yaml b/tests/app/config/services.yaml index e7498cc..8ea99eb 100644 --- a/tests/app/config/services.yaml +++ b/tests/app/config/services.yaml @@ -1,69 +1,69 @@ services: - _defaults: - autowire: true - autoconfigure: true - # for tests only - public: true + _defaults: + autowire: true + autoconfigure: true + # for tests only + public: true - test.address.converter: - parent: 'neusta_converter.generic_converter' - public: true - arguments: - $factory: '@Neusta\ConverterBundle\Tests\Fixtures\Model\AddressFactory' - $populators: - - '@Neusta\ConverterBundle\Tests\Fixtures\Populator\AddressPopulator' + test.address.converter: + parent: 'neusta_converter.generic_converter' + public: true + arguments: + $factory: '@Neusta\ConverterBundle\Tests\Fixtures\Model\AddressFactory' + $populators: + - '@Neusta\ConverterBundle\Tests\Fixtures\Populator\AddressPopulator' - Neusta\ConverterBundle\Tests\Fixtures\Populator\PersonNamePopulator: ~ - Neusta\ConverterBundle\Tests\Fixtures\Populator\AddressPopulator: ~ + Neusta\ConverterBundle\Tests\Fixtures\Populator\PersonNamePopulator: ~ + Neusta\ConverterBundle\Tests\Fixtures\Populator\AddressPopulator: ~ - test.person.address.populator: - parent: 'neusta_converter.converting_populator' - public: true - arguments: - $converter: '@test.address.converter' - $sourcePropertyName: 'address' - $targetPropertyName: 'address' + test.person.address.populator: + parent: 'neusta_converter.converting_populator' + public: true + arguments: + $converter: '@test.address.converter' + $sourcePropertyName: 'address' + $targetPropertyName: 'address' - test.person.wrong.source.type.populator: - parent: 'neusta_converter.converting_populator' - public: true - arguments: - $converter: '@test.address.converter' - $sourcePropertyName: 'fieldWithUnknownType' - $targetPropertyName: 'address' + test.person.wrong.source.type.populator: + parent: 'neusta_converter.converting_populator' + public: true + arguments: + $converter: '@test.address.converter' + $sourcePropertyName: 'fieldWithUnknownType' + $targetPropertyName: 'address' - test.person.wrong.converter.populator: - parent: 'neusta_converter.converting_populator' - public: true - arguments: - $converter: '@test.person.converter' # wrong converter for testing - $sourcePropertyName: 'address' - $targetPropertyName: 'address' + test.person.wrong.converter.populator: + parent: 'neusta_converter.converting_populator' + public: true + arguments: + $converter: '@test.person.converter' # wrong converter for testing + $sourcePropertyName: 'address' + $targetPropertyName: 'address' - test.person.fullName.populator: - parent: 'neusta_converter.property_mapping_populator' - public: true - arguments: - $targetProperty: 'fullName' - $sourceProperty: 'fullName' + test.person.fullName.populator: + parent: 'neusta_converter.property_mapping_populator' + public: true + arguments: + $targetProperty: 'fullName' + $sourceProperty: 'fullName' - test.person.activities.populator: - parent: 'neusta_converter.array_property_mapping_populator' - public: true - arguments: - $sourceArrayItemProperty: 'label' - $sourceArrayProperty: 'hobbies' - $targetProperty: 'activities' + test.person.activities.populator: + parent: 'neusta_converter.array_property_mapping_populator' + public: true + arguments: + $sourceArrayItemProperty: 'label' + $sourceArrayProperty: 'hobbies' + $targetProperty: 'activities' - test.person.contactnumbers.populator: - parent: 'neusta_converter.array_converting_populator' - public: true - arguments: - $converter: '@test.contactnumber.converter' - $sourceArrayPropertyName: 'phones' - $targetPropertyName: 'contactNumbers' + test.person.contactnumbers.populator: + parent: 'neusta_converter.array_converting_populator' + public: true + arguments: + $converter: '@test.contactnumber.converter' + $sourceArrayPropertyName: 'phones' + $targetPropertyName: 'contactNumbers' - Neusta\ConverterBundle\Tests\Fixtures\Model\PersonFactory: ~ - Neusta\ConverterBundle\Tests\Fixtures\Model\AddressFactory: ~ - Neusta\ConverterBundle\Tests\Fixtures\Model\ContactNumberFactory: ~ + Neusta\ConverterBundle\Tests\Fixtures\Model\PersonFactory: ~ + Neusta\ConverterBundle\Tests\Fixtures\Model\AddressFactory: ~ + Neusta\ConverterBundle\Tests\Fixtures\Model\ContactNumberFactory: ~ From ef50b8642ad0e637e459b40d63f0ee76a4885906 Mon Sep 17 00:00:00 2001 From: Luka Dschaak Date: Mon, 11 Sep 2023 11:20:36 +0200 Subject: [PATCH 7/7] chore: re-add symfony.containerXmlPath to phpstan.neon --- phpstan.neon | 3 +++ 1 file changed, 3 insertions(+) diff --git a/phpstan.neon b/phpstan.neon index 689b0bc..393aff3 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -5,4 +5,7 @@ parameters: paths: - src + symfony: + containerXmlPath: tests/app/var/cache/test/TestKernelTestDebugContainer.xml + checkGenericClassInNonGenericObjectType: false