From ecf729f1732fec27db8637b92e2c15e44cbd68e4 Mon Sep 17 00:00:00 2001 From: Sergii Pryz Date: Tue, 3 Feb 2026 19:41:07 +0100 Subject: [PATCH 01/19] Microoptimized php functions to use global namespace (for transfer objects only) --- src/Transfer/AbstractTransfer.php | 8 ++++---- src/Transfer/Attribute/AttributeTrait.php | 6 +++--- .../Transformer/CollectionTransformerAttribute.php | 2 +- .../Transformer/DateTimeTransformerAttribute.php | 4 ++-- .../Attribute/Transformer/NumberTransformerAttribute.php | 4 ++-- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Transfer/AbstractTransfer.php b/src/Transfer/AbstractTransfer.php index d06cdece..4250425a 100644 --- a/src/Transfer/AbstractTransfer.php +++ b/src/Transfer/AbstractTransfer.php @@ -49,7 +49,7 @@ final public function __construct(?array $data = null) { $this->initData(); - if ($data !== null && count($data) > 0) { + if ($data !== null && \count($data) > 0) { $this->hydrateData($data); } } @@ -101,7 +101,7 @@ final public function getIterator(): Traversable final public function __clone(): void { /** @var \SplFixedArray $data */ - $data = unserialize(serialize($this->_data)); + $data = \unserialize(\serialize($this->_data)); $this->_data = $data; } @@ -131,7 +131,7 @@ final public function fromArray(array $data): static { $this->initData(); - if (count($data) > 0) { + if (\count($data) > 0) { $this->hydrateData($data); } @@ -155,7 +155,7 @@ private function hydrateData(array $data): void { $this->filterData($data); - if (count($data) === 0) { + if (\count($data) === 0) { return; } diff --git a/src/Transfer/Attribute/AttributeTrait.php b/src/Transfer/Attribute/AttributeTrait.php index 6209ba7f..ef51da68 100644 --- a/src/Transfer/Attribute/AttributeTrait.php +++ b/src/Transfer/Attribute/AttributeTrait.php @@ -54,7 +54,7 @@ final protected function getTransformerAttribute(string $constantName): Transfor private function getAttributeInstance( ReflectionAttribute $reflectionAttribute, ): TransformerAttributeInterface|InitiatorAttributeInterface { - if (count($reflectionAttribute->getArguments()) !== 0) { + if (\count($reflectionAttribute->getArguments()) !== 0) { return $reflectionAttribute->newInstance(); } @@ -76,10 +76,10 @@ private function getConstantReflection(string $constantName, string $attributeNa ); /** @var \ReflectionAttribute|null $firstReflectionAttribute */ - $firstReflectionAttribute = array_first($reflectionAttributes); + $firstReflectionAttribute = \array_first($reflectionAttributes); if ($firstReflectionAttribute === null) { throw new AttributeTransferException( - sprintf('Constant\'s "%s" attribute "%s" not found.', $constantName, $attributeName), + \sprintf('Constant\'s "%s" attribute "%s" not found.', $constantName, $attributeName), ); } diff --git a/src/Transfer/Attribute/Transformer/CollectionTransformerAttribute.php b/src/Transfer/Attribute/Transformer/CollectionTransformerAttribute.php index 141b62e0..9a1326f5 100644 --- a/src/Transfer/Attribute/Transformer/CollectionTransformerAttribute.php +++ b/src/Transfer/Attribute/Transformer/CollectionTransformerAttribute.php @@ -50,7 +50,7 @@ public function fromArray(mixed $data): ArrayObject */ public function toArray(mixed $data): array { - return array_map( + return \array_map( fn(TransferInterface $transfer): array => $transfer->toArray(), $data->getArrayCopy() ); diff --git a/src/Transfer/Attribute/Transformer/DateTimeTransformerAttribute.php b/src/Transfer/Attribute/Transformer/DateTimeTransformerAttribute.php index 4cff6bbd..973d3589 100644 --- a/src/Transfer/Attribute/Transformer/DateTimeTransformerAttribute.php +++ b/src/Transfer/Attribute/Transformer/DateTimeTransformerAttribute.php @@ -27,9 +27,9 @@ public function __construct(private string $typeName) public function fromArray(mixed $data): DateTimeInterface { return match (true) { - is_string($data) => new $this->typeName($data), + \is_string($data) => new $this->typeName($data), - is_int($data) || is_float($data) => $this->typeName::createFromTimestamp($data), + \is_int($data) || \is_float($data) => $this->typeName::createFromTimestamp($data), $data instanceof DateTimeInterface => $data, diff --git a/src/Transfer/Attribute/Transformer/NumberTransformerAttribute.php b/src/Transfer/Attribute/Transformer/NumberTransformerAttribute.php index 3cda4007..ecebd7d0 100644 --- a/src/Transfer/Attribute/Transformer/NumberTransformerAttribute.php +++ b/src/Transfer/Attribute/Transformer/NumberTransformerAttribute.php @@ -25,9 +25,9 @@ public function __construct(private string $typeName) public function fromArray(mixed $data): Number { return match (true) { - is_float($data) => new $this->typeName((string)$data), + \is_float($data) => new $this->typeName((string)$data), - is_numeric($data) => new $this->typeName($data), + \is_numeric($data) => new $this->typeName($data), $data instanceof Number => $data, From 35c5da8bb0c512f6556db3c8414d2ba36f9772b9 Mon Sep 17 00:00:00 2001 From: Sergii Pryz Date: Tue, 3 Feb 2026 20:15:55 +0100 Subject: [PATCH 02/19] Added trailing function call comma --- src/Transfer/Attribute/AttributeTrait.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Transfer/Attribute/AttributeTrait.php b/src/Transfer/Attribute/AttributeTrait.php index ef51da68..7941eee0 100644 --- a/src/Transfer/Attribute/AttributeTrait.php +++ b/src/Transfer/Attribute/AttributeTrait.php @@ -22,7 +22,7 @@ final protected function getInitiatorAttribute(string $constantName): InitiatorA /** @var \ReflectionAttribute $reflectionAttribute */ $reflectionAttribute = $this->getConstantReflection( constantName: $constantName, - attributeName: InitiatorAttributeInterface::class + attributeName: InitiatorAttributeInterface::class, ); /** @var InitiatorAttributeInterface $attributeInstance */ @@ -39,7 +39,7 @@ final protected function getTransformerAttribute(string $constantName): Transfor /** @var \ReflectionAttribute $reflectionAttribute */ $reflectionAttribute = $this->getConstantReflection( constantName: $constantName, - attributeName: TransformerAttributeInterface::class + attributeName: TransformerAttributeInterface::class, ); /** @var TransformerAttributeInterface $attributeInstance */ From df5e16d126b795f1caa5816c86514eba524f8dba Mon Sep 17 00:00:00 2001 From: Sergii Pryz Date: Tue, 3 Feb 2026 20:38:56 +0100 Subject: [PATCH 03/19] Microoptimized php functions to use global namespace (for transfer adapters) --- .../Adapter/DummyTransferAdapterTrait.php | 2 +- src/Transfer/Adapter/TransferAdapterTrait.php | 24 +++++++++---------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/Transfer/Adapter/DummyTransferAdapterTrait.php b/src/Transfer/Adapter/DummyTransferAdapterTrait.php index 1d67e99d..ebb9ca69 100644 --- a/src/Transfer/Adapter/DummyTransferAdapterTrait.php +++ b/src/Transfer/Adapter/DummyTransferAdapterTrait.php @@ -29,7 +29,7 @@ public function getIterator(): Traversable public function count(): int { - return iterator_count($this); + return \iterator_count($this); } /** diff --git a/src/Transfer/Adapter/TransferAdapterTrait.php b/src/Transfer/Adapter/TransferAdapterTrait.php index 25ad035a..a0a9281c 100644 --- a/src/Transfer/Adapter/TransferAdapterTrait.php +++ b/src/Transfer/Adapter/TransferAdapterTrait.php @@ -61,7 +61,7 @@ public function getIterator(): Traversable */ public function count(): int { - return count($this->getPublicProperties()); + return \count($this->getPublicProperties()); } /** @@ -119,21 +119,21 @@ public function fromArray(array $data): static private function resolveValue(string $typeReflection, mixed $value): mixed { - $type = str_replace('?', '', $typeReflection); + $type = \str_replace('?', '', $typeReflection); - if (is_string($value)) { + if (\is_string($value)) { return $this->resolveStringValue($type, $value); } - if (is_int($value)) { + if (\is_int($value)) { return $this->resolveIntValue($type, $value); } - if (is_array($value)) { + if (\is_array($value)) { return $this->resolveArrayValue($type, $value); } - if (is_float($value)) { + if (\is_float($value)) { return $this->resolveFloatValue($type, $value); } @@ -155,7 +155,7 @@ private function resolveFloatValue(string $type, float $value): object|float|nul private function resolveIntValue(string $type, int $value): object|int|null { - if (is_subclass_of($type, BackedEnum::class)) { + if (\is_subclass_of($type, BackedEnum::class)) { return $type::tryFrom($value); } @@ -184,11 +184,11 @@ private function resolveStringValue(string $type, string $value): object|string| return new DateTimeImmutable($value); } - if (is_subclass_of($type, BackedEnum::class)) { + if (\is_subclass_of($type, BackedEnum::class)) { return $type::tryFrom($value); } - if (is_numeric($value) && $this->isBcMathType($type)) { + if (\is_numeric($value) && $this->isBcMathType($type)) { return new Number($value); } @@ -202,11 +202,11 @@ private function resolveStringValue(string $type, string $value): object|string| */ private function resolveArrayValue(string $type, array $value): object|array { - if (is_subclass_of($type, AbstractTransfer::class)) { + if (\is_subclass_of($type, AbstractTransfer::class)) { return new $type($value); } - if (is_subclass_of($type, TransferInterface::class)) { + if (\is_subclass_of($type, TransferInterface::class)) { /** @var array $value */ return new $type()->fromArray($value); } @@ -263,7 +263,7 @@ private function isBcMathType(mixed $type): bool private function isBcMathLoaded(): bool { /** @var bool $isLoaded */ - static $isLoaded = extension_loaded('bcmath'); + static $isLoaded = \extension_loaded('bcmath'); return $isLoaded; } From a997d2ffb16860492dd2866e06959c1f2bc116b2 Mon Sep 17 00:00:00 2001 From: Sergii Pryz Date: Tue, 3 Feb 2026 20:42:20 +0100 Subject: [PATCH 04/19] Microoptimized php functions to use global namespace (data assert trait) --- .../Attribute/Transformer/DataAssertTrait.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Transfer/Attribute/Transformer/DataAssertTrait.php b/src/Transfer/Attribute/Transformer/DataAssertTrait.php index 15fb3fbd..2ad16087 100644 --- a/src/Transfer/Attribute/Transformer/DataAssertTrait.php +++ b/src/Transfer/Attribute/Transformer/DataAssertTrait.php @@ -13,12 +13,12 @@ trait DataAssertTrait */ final protected function assertArray(mixed $data): void { - if (is_array($data)) { + if (\is_array($data)) { return; } throw new DataAssertTransferException( - sprintf( + \sprintf( 'Data must be of type array, "%s" given.', get_debug_type($data), ), @@ -31,10 +31,10 @@ final protected function assertArray(mixed $data): void final protected function assertInvalidType(mixed $data, string $expectedType): never { throw new DataAssertTransferException( - sprintf( + \sprintf( 'Data must be of type %s, "%s" given.', $expectedType, - get_debug_type($data), + \get_debug_type($data), ), ); } @@ -44,14 +44,14 @@ final protected function assertInvalidType(mixed $data, string $expectedType): n */ final protected function assertStringOrInt(mixed $data): void { - if (is_string($data) || is_int($data)) { + if (\is_string($data) || \is_int($data)) { return; } throw new DataAssertTransferException( sprintf( 'Data must be of type string or integer, "%s" given.', - get_debug_type($data), + \get_debug_type($data), ), ); } From 63c1e6b727dbf715020cde9a3a52edaaabbb359c Mon Sep 17 00:00:00 2001 From: Sergii Pryz Date: Tue, 3 Feb 2026 20:52:57 +0100 Subject: [PATCH 05/19] Microoptimized php functions to use global namespace (data assert trait) --- src/Transfer/Attribute/Transformer/DataAssertTrait.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Transfer/Attribute/Transformer/DataAssertTrait.php b/src/Transfer/Attribute/Transformer/DataAssertTrait.php index 2ad16087..6ee7f691 100644 --- a/src/Transfer/Attribute/Transformer/DataAssertTrait.php +++ b/src/Transfer/Attribute/Transformer/DataAssertTrait.php @@ -20,7 +20,7 @@ final protected function assertArray(mixed $data): void throw new DataAssertTransferException( \sprintf( 'Data must be of type array, "%s" given.', - get_debug_type($data), + \get_debug_type($data), ), ); } @@ -49,7 +49,7 @@ final protected function assertStringOrInt(mixed $data): void } throw new DataAssertTransferException( - sprintf( + \sprintf( 'Data must be of type string or integer, "%s" given.', \get_debug_type($data), ), From fedb05391aa6a96dde9249e957e174af42a61db4 Mon Sep 17 00:00:00 2001 From: Sergii Pryz Date: Tue, 3 Feb 2026 21:00:13 +0100 Subject: [PATCH 06/19] Upgraded composer dependencies --- composer.lock | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/composer.lock b/composer.lock index e0476549..c97edd93 100644 --- a/composer.lock +++ b/composer.lock @@ -1654,16 +1654,16 @@ }, { "name": "phpunit/php-file-iterator", - "version": "6.0.0", + "version": "6.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "961bc913d42fe24a257bfff826a5068079ac7782" + "reference": "3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/961bc913d42fe24a257bfff826a5068079ac7782", - "reference": "961bc913d42fe24a257bfff826a5068079ac7782", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5", + "reference": "3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5", "shasum": "" }, "require": { @@ -1703,15 +1703,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/6.0.0" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/6.0.1" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-file-iterator", + "type": "tidelift" } ], - "time": "2025-02-07T04:58:37+00:00" + "time": "2026-02-02T14:04:18+00:00" }, { "name": "phpunit/php-invoker", From 72e796defa4652ac47bb8e90e90e07aa7dd856d3 Mon Sep 17 00:00:00 2001 From: Sergii Pryz Date: Tue, 3 Feb 2026 21:40:27 +0100 Subject: [PATCH 07/19] Replaced array_first function with direct array access in AttributeTrait --- src/Transfer/Attribute/AttributeTrait.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Transfer/Attribute/AttributeTrait.php b/src/Transfer/Attribute/AttributeTrait.php index 7941eee0..ef5a9747 100644 --- a/src/Transfer/Attribute/AttributeTrait.php +++ b/src/Transfer/Attribute/AttributeTrait.php @@ -76,7 +76,7 @@ private function getConstantReflection(string $constantName, string $attributeNa ); /** @var \ReflectionAttribute|null $firstReflectionAttribute */ - $firstReflectionAttribute = \array_first($reflectionAttributes); + $firstReflectionAttribute = $reflectionAttributes[0] ?? null; if ($firstReflectionAttribute === null) { throw new AttributeTransferException( \sprintf('Constant\'s "%s" attribute "%s" not found.', $constantName, $attributeName), From 89b0cfb1b952236634cf38fd8264d113677baccd Mon Sep 17 00:00:00 2001 From: Sergii Pryz Date: Fri, 6 Feb 2026 20:52:24 +0100 Subject: [PATCH 08/19] Removed DataAssertTrait usage from attributers to simplify implementation --- .../ArrayObjectTransformerAttribute.php | 20 ++++++- .../CollectionTransformerAttribute.php | 35 ++++++++--- .../Attribute/Transformer/DataAssertTrait.php | 58 ------------------- .../DateTimeTransformerAttribute.php | 36 +++++++++--- .../Transformer/EnumTransformerAttribute.php | 20 ++++++- .../NumberTransformerAttribute.php | 33 ++++++++--- .../Transformer/TransferBuilderTrait.php | 20 ++++++- 7 files changed, 135 insertions(+), 87 deletions(-) delete mode 100644 src/Transfer/Attribute/Transformer/DataAssertTrait.php diff --git a/src/Transfer/Attribute/Transformer/ArrayObjectTransformerAttribute.php b/src/Transfer/Attribute/Transformer/ArrayObjectTransformerAttribute.php index 61df9bca..1c3246b8 100644 --- a/src/Transfer/Attribute/Transformer/ArrayObjectTransformerAttribute.php +++ b/src/Transfer/Attribute/Transformer/ArrayObjectTransformerAttribute.php @@ -6,6 +6,7 @@ use ArrayObject; use Attribute; +use Picamator\TransferObject\Transfer\Exception\DataAssertTransferException; /** * @api @@ -13,8 +14,6 @@ #[Attribute(Attribute::TARGET_CLASS_CONSTANT)] final readonly class ArrayObjectTransformerAttribute implements TransformerAttributeInterface { - use DataAssertTrait; - /** * @inheritDoc * @@ -37,4 +36,21 @@ public function toArray(mixed $data): array { return $data->getArrayCopy(); } + + /** + * @throws \Picamator\TransferObject\Transfer\Exception\DataAssertTransferException + */ + private function assertArray(mixed $data): void + { + if (\is_array($data)) { + return; + } + + throw new DataAssertTransferException( + \sprintf( + 'Data must be of type array, "%s" given.', + \get_debug_type($data), + ), + ); + } } diff --git a/src/Transfer/Attribute/Transformer/CollectionTransformerAttribute.php b/src/Transfer/Attribute/Transformer/CollectionTransformerAttribute.php index 9a1326f5..d42ef6b3 100644 --- a/src/Transfer/Attribute/Transformer/CollectionTransformerAttribute.php +++ b/src/Transfer/Attribute/Transformer/CollectionTransformerAttribute.php @@ -6,7 +6,7 @@ use ArrayObject; use Attribute; -use Picamator\TransferObject\Transfer\TransferInterface; +use Picamator\TransferObject\Transfer\Exception\DataAssertTransferException; /** * @api @@ -17,7 +17,9 @@ use TransferBuilderTrait; /** - * @param class-string<\Picamator\TransferObject\Transfer\AbstractTransfer|TransferInterface> $typeName + * phpcs:disable Generic.Files.LineLength + * + * @param class-string<\Picamator\TransferObject\Transfer\AbstractTransfer|\Picamator\TransferObject\Transfer\TransferInterface> $typeName */ public function __construct(private string $typeName) { @@ -37,22 +39,41 @@ public function fromArray(mixed $data): ArrayObject /** @var array $data */ foreach ($data as $key => $item) { - $collection->offsetSet($key, $this->createTransfer($item)); + $collection[$key] = $this->createTransfer($item); } return $collection; } /** - * @param \ArrayObject $data + * @param \ArrayObject $data * * @return array */ public function toArray(mixed $data): array { - return \array_map( - fn(TransferInterface $transfer): array => $transfer->toArray(), - $data->getArrayCopy() + $collection = []; + foreach ($data as $key => $transfer) { + $collection[$key] = $transfer->toArray(); + } + + return $collection; + } + + /** + * @throws \Picamator\TransferObject\Transfer\Exception\DataAssertTransferException + */ + private function assertArray(mixed $data): void + { + if (\is_array($data)) { + return; + } + + throw new DataAssertTransferException( + \sprintf( + 'Data must be of type array, "%s" given.', + \get_debug_type($data), + ), ); } } diff --git a/src/Transfer/Attribute/Transformer/DataAssertTrait.php b/src/Transfer/Attribute/Transformer/DataAssertTrait.php deleted file mode 100644 index 6ee7f691..00000000 --- a/src/Transfer/Attribute/Transformer/DataAssertTrait.php +++ /dev/null @@ -1,58 +0,0 @@ - new $this->typeName($data), + $type = \gettype($data); + if ($type === 'string') { + /** @var string $data */ + return new $this->typeName($data); + } - \is_int($data) || \is_float($data) => $this->typeName::createFromTimestamp($data), + if ($type === 'integer' || $type === 'double') { + /** @var int|float $data */ + return $this->typeName::createFromTimestamp($data); + } - $data instanceof DateTimeInterface => $data, + if ($type === 'object' && $data instanceof DateTimeInterface) { + return $data; + } - default => $this->assertInvalidType($data, $this->typeName), - }; + $this->assertInvalidType($data); } /** @@ -44,4 +50,18 @@ public function toArray(mixed $data): ?string { return $data?->format(self::DATE_TIME_FORMAT); } + + /** + * @throws \Picamator\TransferObject\Transfer\Exception\DataAssertTransferException + */ + private function assertInvalidType(mixed $data): never + { + throw new DataAssertTransferException( + \sprintf( + 'Data must be of type %s, "%s" given.', + $this->typeName, + \get_debug_type($data), + ), + ); + } } diff --git a/src/Transfer/Attribute/Transformer/EnumTransformerAttribute.php b/src/Transfer/Attribute/Transformer/EnumTransformerAttribute.php index 9ccbad95..8a01d1c0 100644 --- a/src/Transfer/Attribute/Transformer/EnumTransformerAttribute.php +++ b/src/Transfer/Attribute/Transformer/EnumTransformerAttribute.php @@ -6,6 +6,7 @@ use Attribute; use BackedEnum; +use Picamator\TransferObject\Transfer\Exception\DataAssertTransferException; /** * @api @@ -13,8 +14,6 @@ #[Attribute(Attribute::TARGET_CLASS_CONSTANT)] final readonly class EnumTransformerAttribute implements TransformerAttributeInterface { - use DataAssertTrait; - /** * @param \BackedEnum|class-string<\BackedEnum> $typeName */ @@ -42,4 +41,21 @@ public function toArray(mixed $data): string|int|null { return $data?->value; } + + /** + * @throws \Picamator\TransferObject\Transfer\Exception\DataAssertTransferException + */ + private function assertStringOrInt(mixed $data): void + { + if (\is_string($data) || \is_int($data)) { + return; + } + + throw new DataAssertTransferException( + \sprintf( + 'Data must be of type string or integer, "%s" given.', + \get_debug_type($data), + ), + ); + } } diff --git a/src/Transfer/Attribute/Transformer/NumberTransformerAttribute.php b/src/Transfer/Attribute/Transformer/NumberTransformerAttribute.php index ecebd7d0..1ca9d585 100644 --- a/src/Transfer/Attribute/Transformer/NumberTransformerAttribute.php +++ b/src/Transfer/Attribute/Transformer/NumberTransformerAttribute.php @@ -6,6 +6,7 @@ use Attribute; use BcMath\Number; +use Picamator\TransferObject\Transfer\Exception\DataAssertTransferException; /** * @api @@ -13,8 +14,6 @@ #[Attribute(Attribute::TARGET_CLASS_CONSTANT)] final readonly class NumberTransformerAttribute implements TransformerAttributeInterface { - use DataAssertTrait; - /** * @param class-string<\BcMath\Number> $typeName */ @@ -24,15 +23,19 @@ public function __construct(private string $typeName) public function fromArray(mixed $data): Number { - return match (true) { - \is_float($data) => new $this->typeName((string)$data), + if (\is_float($data)) { + return new $this->typeName((string)$data); + } - \is_numeric($data) => new $this->typeName($data), + if (\is_numeric($data)) { + return new $this->typeName($data); + } - $data instanceof Number => $data, + if ($data instanceof Number) { + return $data; + } - default => $this->assertInvalidType($data, $this->typeName), - }; + $this->assertInvalidType($data); } /** @@ -42,4 +45,18 @@ public function toArray(mixed $data): ?string { return $data?->__toString(); } + + /** + * @throws \Picamator\TransferObject\Transfer\Exception\DataAssertTransferException + */ + private function assertInvalidType(mixed $data): never + { + throw new DataAssertTransferException( + \sprintf( + 'Data must be of type %s, "%s" given.', + $this->typeName, + \get_debug_type($data), + ), + ); + } } diff --git a/src/Transfer/Attribute/Transformer/TransferBuilderTrait.php b/src/Transfer/Attribute/Transformer/TransferBuilderTrait.php index 3b9e8392..f50888e0 100644 --- a/src/Transfer/Attribute/Transformer/TransferBuilderTrait.php +++ b/src/Transfer/Attribute/Transformer/TransferBuilderTrait.php @@ -5,6 +5,7 @@ namespace Picamator\TransferObject\Transfer\Attribute\Transformer; use Picamator\TransferObject\Transfer\AbstractTransfer; +use Picamator\TransferObject\Transfer\Exception\DataAssertTransferException; use Picamator\TransferObject\Transfer\TransferInterface; use ReflectionClass; @@ -19,8 +20,6 @@ */ trait TransferBuilderTrait { - use DataAssertTrait; - final protected function createTransfer(mixed $data): TransferInterface { $this->assertArray($data); @@ -63,4 +62,21 @@ private function createLazyAbstractTransfer(ReflectionClass $reflection, array $ return $transfer; } + + /** + * @throws \Picamator\TransferObject\Transfer\Exception\DataAssertTransferException + */ + private function assertArray(mixed $data): void + { + if (\is_array($data)) { + return; + } + + throw new DataAssertTransferException( + \sprintf( + 'Data must be of type array, "%s" given.', + \get_debug_type($data), + ), + ); + } } From b5992b62b4f0e99841ad7cd0b40dc8c7eb0a02dc Mon Sep 17 00:00:00 2001 From: Sergii Pryz Date: Fri, 6 Feb 2026 21:41:45 +0100 Subject: [PATCH 09/19] Extracted duplicate asserts to two separate traits --- .../Transformer/ArrayAssertTrait.php | 27 +++++++++++++++++++ .../ArrayObjectTransformerAttribute.php | 20 ++------------ .../CollectionTransformerAttribute.php | 18 ------------- .../DateTimeTransformerAttribute.php | 17 ++---------- .../Transformer/InvalidTypeAssertTrait.php | 27 +++++++++++++++++++ .../NumberTransformerAttribute.php | 17 ++---------- .../Transformer/TransferBuilderTrait.php | 20 ++------------ 7 files changed, 62 insertions(+), 84 deletions(-) create mode 100644 src/Transfer/Attribute/Transformer/ArrayAssertTrait.php create mode 100644 src/Transfer/Attribute/Transformer/InvalidTypeAssertTrait.php diff --git a/src/Transfer/Attribute/Transformer/ArrayAssertTrait.php b/src/Transfer/Attribute/Transformer/ArrayAssertTrait.php new file mode 100644 index 00000000..429decde --- /dev/null +++ b/src/Transfer/Attribute/Transformer/ArrayAssertTrait.php @@ -0,0 +1,27 @@ +getArrayCopy(); } - - /** - * @throws \Picamator\TransferObject\Transfer\Exception\DataAssertTransferException - */ - private function assertArray(mixed $data): void - { - if (\is_array($data)) { - return; - } - - throw new DataAssertTransferException( - \sprintf( - 'Data must be of type array, "%s" given.', - \get_debug_type($data), - ), - ); - } } diff --git a/src/Transfer/Attribute/Transformer/CollectionTransformerAttribute.php b/src/Transfer/Attribute/Transformer/CollectionTransformerAttribute.php index d42ef6b3..6ab7de2c 100644 --- a/src/Transfer/Attribute/Transformer/CollectionTransformerAttribute.php +++ b/src/Transfer/Attribute/Transformer/CollectionTransformerAttribute.php @@ -6,7 +6,6 @@ use ArrayObject; use Attribute; -use Picamator\TransferObject\Transfer\Exception\DataAssertTransferException; /** * @api @@ -59,21 +58,4 @@ public function toArray(mixed $data): array return $collection; } - - /** - * @throws \Picamator\TransferObject\Transfer\Exception\DataAssertTransferException - */ - private function assertArray(mixed $data): void - { - if (\is_array($data)) { - return; - } - - throw new DataAssertTransferException( - \sprintf( - 'Data must be of type array, "%s" given.', - \get_debug_type($data), - ), - ); - } } diff --git a/src/Transfer/Attribute/Transformer/DateTimeTransformerAttribute.php b/src/Transfer/Attribute/Transformer/DateTimeTransformerAttribute.php index cf63d3c9..b38e4911 100644 --- a/src/Transfer/Attribute/Transformer/DateTimeTransformerAttribute.php +++ b/src/Transfer/Attribute/Transformer/DateTimeTransformerAttribute.php @@ -6,7 +6,6 @@ use Attribute; use DateTimeInterface; -use Picamator\TransferObject\Transfer\Exception\DataAssertTransferException; /** * @api @@ -14,6 +13,8 @@ #[Attribute(Attribute::TARGET_CLASS_CONSTANT)] final readonly class DateTimeTransformerAttribute implements TransformerAttributeInterface { + use InvalidTypeAssertTrait; + private const string DATE_TIME_FORMAT = DateTimeInterface::ATOM; /** @@ -50,18 +51,4 @@ public function toArray(mixed $data): ?string { return $data?->format(self::DATE_TIME_FORMAT); } - - /** - * @throws \Picamator\TransferObject\Transfer\Exception\DataAssertTransferException - */ - private function assertInvalidType(mixed $data): never - { - throw new DataAssertTransferException( - \sprintf( - 'Data must be of type %s, "%s" given.', - $this->typeName, - \get_debug_type($data), - ), - ); - } } diff --git a/src/Transfer/Attribute/Transformer/InvalidTypeAssertTrait.php b/src/Transfer/Attribute/Transformer/InvalidTypeAssertTrait.php new file mode 100644 index 00000000..90ea6725 --- /dev/null +++ b/src/Transfer/Attribute/Transformer/InvalidTypeAssertTrait.php @@ -0,0 +1,27 @@ +typeName, + \get_debug_type($data), + ), + ); + } +} diff --git a/src/Transfer/Attribute/Transformer/NumberTransformerAttribute.php b/src/Transfer/Attribute/Transformer/NumberTransformerAttribute.php index 1ca9d585..a0fc4ede 100644 --- a/src/Transfer/Attribute/Transformer/NumberTransformerAttribute.php +++ b/src/Transfer/Attribute/Transformer/NumberTransformerAttribute.php @@ -6,7 +6,6 @@ use Attribute; use BcMath\Number; -use Picamator\TransferObject\Transfer\Exception\DataAssertTransferException; /** * @api @@ -14,6 +13,8 @@ #[Attribute(Attribute::TARGET_CLASS_CONSTANT)] final readonly class NumberTransformerAttribute implements TransformerAttributeInterface { + use InvalidTypeAssertTrait; + /** * @param class-string<\BcMath\Number> $typeName */ @@ -45,18 +46,4 @@ public function toArray(mixed $data): ?string { return $data?->__toString(); } - - /** - * @throws \Picamator\TransferObject\Transfer\Exception\DataAssertTransferException - */ - private function assertInvalidType(mixed $data): never - { - throw new DataAssertTransferException( - \sprintf( - 'Data must be of type %s, "%s" given.', - $this->typeName, - \get_debug_type($data), - ), - ); - } } diff --git a/src/Transfer/Attribute/Transformer/TransferBuilderTrait.php b/src/Transfer/Attribute/Transformer/TransferBuilderTrait.php index f50888e0..d7406802 100644 --- a/src/Transfer/Attribute/Transformer/TransferBuilderTrait.php +++ b/src/Transfer/Attribute/Transformer/TransferBuilderTrait.php @@ -5,7 +5,6 @@ namespace Picamator\TransferObject\Transfer\Attribute\Transformer; use Picamator\TransferObject\Transfer\AbstractTransfer; -use Picamator\TransferObject\Transfer\Exception\DataAssertTransferException; use Picamator\TransferObject\Transfer\TransferInterface; use ReflectionClass; @@ -20,6 +19,8 @@ */ trait TransferBuilderTrait { + use ArrayAssertTrait; + final protected function createTransfer(mixed $data): TransferInterface { $this->assertArray($data); @@ -62,21 +63,4 @@ private function createLazyAbstractTransfer(ReflectionClass $reflection, array $ return $transfer; } - - /** - * @throws \Picamator\TransferObject\Transfer\Exception\DataAssertTransferException - */ - private function assertArray(mixed $data): void - { - if (\is_array($data)) { - return; - } - - throw new DataAssertTransferException( - \sprintf( - 'Data must be of type array, "%s" given.', - \get_debug_type($data), - ), - ); - } } From 6059078db647467fb306cc1f2f9af2d5909f64de Mon Sep 17 00:00:00 2001 From: Sergii Pryz Date: Sat, 7 Feb 2026 11:54:12 +0100 Subject: [PATCH 10/19] Covered with tests bcMath and transfer object construct, refactored assert traits --- .../Transformer/ArrayAssertTrait.php | 5 ++ .../CollectionTransformerAttribute.php | 4 ++ .../DateTimeTransformerAttribute.php | 2 +- .../Transformer/InvalidTypeAssertTrait.php | 2 +- .../NumberTransformerAttribute.php | 2 +- tests/integration/Transfer/TransferTest.php | 54 +++++++++++++++++-- 6 files changed, 62 insertions(+), 7 deletions(-) diff --git a/src/Transfer/Attribute/Transformer/ArrayAssertTrait.php b/src/Transfer/Attribute/Transformer/ArrayAssertTrait.php index 429decde..a100d3b9 100644 --- a/src/Transfer/Attribute/Transformer/ArrayAssertTrait.php +++ b/src/Transfer/Attribute/Transformer/ArrayAssertTrait.php @@ -17,6 +17,11 @@ final protected function assertArray(mixed $data): void return; } + $this->throwInvalidArray($data); + } + + final protected function throwInvalidArray(mixed $data): never + { throw new DataAssertTransferException( \sprintf( 'Data must be of type array, "%s" given.', diff --git a/src/Transfer/Attribute/Transformer/CollectionTransformerAttribute.php b/src/Transfer/Attribute/Transformer/CollectionTransformerAttribute.php index 6ab7de2c..a42502f4 100644 --- a/src/Transfer/Attribute/Transformer/CollectionTransformerAttribute.php +++ b/src/Transfer/Attribute/Transformer/CollectionTransformerAttribute.php @@ -38,6 +38,10 @@ public function fromArray(mixed $data): ArrayObject /** @var array $data */ foreach ($data as $key => $item) { + if ($item === null) { + continue; + } + $collection[$key] = $this->createTransfer($item); } diff --git a/src/Transfer/Attribute/Transformer/DateTimeTransformerAttribute.php b/src/Transfer/Attribute/Transformer/DateTimeTransformerAttribute.php index b38e4911..9795a9ee 100644 --- a/src/Transfer/Attribute/Transformer/DateTimeTransformerAttribute.php +++ b/src/Transfer/Attribute/Transformer/DateTimeTransformerAttribute.php @@ -41,7 +41,7 @@ public function fromArray(mixed $data): DateTimeInterface return $data; } - $this->assertInvalidType($data); + $this->throwInvalidType($data); } /** diff --git a/src/Transfer/Attribute/Transformer/InvalidTypeAssertTrait.php b/src/Transfer/Attribute/Transformer/InvalidTypeAssertTrait.php index 90ea6725..ec14a766 100644 --- a/src/Transfer/Attribute/Transformer/InvalidTypeAssertTrait.php +++ b/src/Transfer/Attribute/Transformer/InvalidTypeAssertTrait.php @@ -14,7 +14,7 @@ trait InvalidTypeAssertTrait /** * @throws \Picamator\TransferObject\Transfer\Exception\DataAssertTransferException */ - final protected function assertInvalidType(mixed $data): never + final protected function throwInvalidType(mixed $data): never { throw new DataAssertTransferException( \sprintf( diff --git a/src/Transfer/Attribute/Transformer/NumberTransformerAttribute.php b/src/Transfer/Attribute/Transformer/NumberTransformerAttribute.php index a0fc4ede..18ae171b 100644 --- a/src/Transfer/Attribute/Transformer/NumberTransformerAttribute.php +++ b/src/Transfer/Attribute/Transformer/NumberTransformerAttribute.php @@ -36,7 +36,7 @@ public function fromArray(mixed $data): Number return $data; } - $this->assertInvalidType($data); + $this->throwInvalidType($data); } /** diff --git a/tests/integration/Transfer/TransferTest.php b/tests/integration/Transfer/TransferTest.php index cb157236..357cbc20 100644 --- a/tests/integration/Transfer/TransferTest.php +++ b/tests/integration/Transfer/TransferTest.php @@ -7,6 +7,7 @@ use ArrayObject; use Generator; use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Depends; use PHPUnit\Framework\Attributes\Group; use PHPUnit\Framework\Attributes\RequiresPhpExtension; use PHPUnit\Framework\Attributes\TestDox; @@ -42,6 +43,22 @@ public static function setUpBeforeClass(): void static::generateTransfersOrFail(self::GENERATOR_CONFIG_PATH); } + /** + * @param array|null $data + */ + #[TestWith([null], 'Create transfer without data')] + #[TestWith([[]], 'Create transfer with empty array data')] + #[TestWith([[null]], 'Create transfer with array data containing null')] + #[TestWith([['something' => 'unknown']], 'Create transfer with array data containing unknown property')] + public function testCreateTransfer(?array $data): void + { + // Act + $itemTransfer = new ItemTransfer($data); + + // Assert + $this->assertNull($itemTransfer->iAmBool); + } + /** * @param array $data * @param array $expected @@ -425,6 +442,21 @@ public function testTransferClone(): void } #[RequiresPhpExtension('bcmath')] + #[TestDox('Generate transfer object BcMath')] + public function testGenerateBcMathTransfer(): void + { + // Arrange + static::generateTransfersOrFail(self::GENERATOR_BC_MATH_CONFIG_PATH); + + // Act + $numberTransfer = new BcMathNumberTransfer(); + + // Assert + $this->assertNull($numberTransfer->iAmNumber); + } + + #[RequiresPhpExtension('bcmath')] + #[Depends('testGenerateBcMathTransfer')] #[TestDox('Transformation transfer object BcMath fromArray with $number to toArray expecting $number')] #[TestWith(['12.123', '12.123'], 'Transformation from string to BcMath')] #[TestWith([12, '12'], 'Transformation from integer to BcMath')] @@ -432,8 +464,6 @@ public function testTransferClone(): void public function testTransformationBcMathFromToArray(string|int|float $number, string $expected): void { // Arrange - static::generateTransfersOrFail(self::GENERATOR_BC_MATH_CONFIG_PATH); - $numberTransfer = new BcMathNumberTransfer(); // Act @@ -448,12 +478,28 @@ public function testTransformationBcMathFromToArray(string|int|float $number, st } #[RequiresPhpExtension('bcmath')] + #[Depends('testGenerateBcMathTransfer')] + #[TestDox('Transformation transfer object BcMath fromArray with invalid type should throw exception')] + public function testTransformationBcMathFromToArrayWithInvalidTypeShouldThrowException(): void + { + // Arrange + $numberTransfer = new BcMathNumberTransfer(); + + // Expect + $this->expectException(DataAssertTransferException::class); + + // Act + $numberTransfer->fromArray([ + BcMathNumberTransfer::I_AM_NUMBER_PROP => new ArrayObject(), + ]); + } + + #[RequiresPhpExtension('bcmath')] + #[Depends('testGenerateBcMathTransfer')] #[TestDox('Transformation transfer object BcMath fromArray to toArray with BcMath')] public function testTransformationBcMathFromToArrayWhereArrayHasBcMath(): void { // Arrange - static::generateTransfersOrFail(self::GENERATOR_BC_MATH_CONFIG_PATH); - $numberTransfer = new BcMathNumberTransfer(); $expected = '12.123'; From 34c304a49d61347e4d7298b6a8602aa82f0c997e Mon Sep 17 00:00:00 2001 From: Sergii Pryz Date: Sat, 7 Feb 2026 12:11:41 +0100 Subject: [PATCH 11/19] Covered by test backed enum with integer value --- tests/integration/Transfer/Enum/YesNoEnum.php | 11 ++++ .../Transfer/Generated/EnumTransfer.php | 58 +++++++++++++++++++ tests/integration/Transfer/TransferTest.php | 21 +++++++ .../data/config/definition/enum.transfer.yml | 6 ++ 4 files changed, 96 insertions(+) create mode 100644 tests/integration/Transfer/Enum/YesNoEnum.php create mode 100644 tests/integration/Transfer/Generated/EnumTransfer.php create mode 100644 tests/integration/Transfer/data/config/definition/enum.transfer.yml diff --git a/tests/integration/Transfer/Enum/YesNoEnum.php b/tests/integration/Transfer/Enum/YesNoEnum.php new file mode 100644 index 00000000..da162b10 --- /dev/null +++ b/tests/integration/Transfer/Enum/YesNoEnum.php @@ -0,0 +1,11 @@ + self::COUNTRY_INDEX, + self::YES_NO_PROP => self::YES_NO_INDEX, + ]; + + protected const array META_TRANSFORMERS = [ + self::COUNTRY_PROP => 'COUNTRY_PROP', + self::YES_NO_PROP => 'YES_NO_PROP', + ]; + + // country + #[EnumTransformerAttribute(CountryEnum::class)] + public const string COUNTRY_PROP = 'country'; + private const int COUNTRY_INDEX = 0; + + public ?CountryEnum $country { + get => $this->getData(self::COUNTRY_INDEX); + set { + $this->setData(self::COUNTRY_INDEX, $value); + } + } + + // yesNo + #[EnumTransformerAttribute(YesNoEnum::class)] + public const string YES_NO_PROP = 'yesNo'; + private const int YES_NO_INDEX = 1; + + public ?YesNoEnum $yesNo { + get => $this->getData(self::YES_NO_INDEX); + set { + $this->setData(self::YES_NO_INDEX, $value); + } + } +} diff --git a/tests/integration/Transfer/TransferTest.php b/tests/integration/Transfer/TransferTest.php index 357cbc20..8585129c 100644 --- a/tests/integration/Transfer/TransferTest.php +++ b/tests/integration/Transfer/TransferTest.php @@ -16,8 +16,11 @@ use PHPUnit\Framework\Attributes\WithoutErrorHandler; use PHPUnit\Framework\TestCase; use Picamator\Tests\Integration\TransferObject\Helper\TransferGeneratorTrait; +use Picamator\Tests\Integration\TransferObject\Transfer\Enum\CountryEnum; use Picamator\Tests\Integration\TransferObject\Transfer\Enum\ImBackedEnum; +use Picamator\Tests\Integration\TransferObject\Transfer\Enum\YesNoEnum; use Picamator\Tests\Integration\TransferObject\Transfer\Generated\BcMath\BcMathNumberTransfer; +use Picamator\Tests\Integration\TransferObject\Transfer\Generated\EnumTransfer; use Picamator\Tests\Integration\TransferObject\Transfer\Generated\ItemCollectionTransfer; use Picamator\Tests\Integration\TransferObject\Transfer\Generated\ItemTransfer; use Picamator\Tests\Integration\TransferObject\Transfer\Generated\NamespaceTransfer; @@ -245,6 +248,24 @@ public function testDateTimeTransformationFromToArray(array $data, array $expect $this->assertSame($expected, $actual); } + #[TestDox('Enum transformation from and to array')] + public function testEnumTransformationFromToArray(): void + { + // Arrange + $expected = [ + EnumTransfer::COUNTRY_PROP => CountryEnum::PL->value, + EnumTransfer::YES_NO_PROP => YesNoEnum::YES->value, + ]; + + $enumTransfer = new EnumTransfer($expected); + + // Act + $actual = $enumTransfer->toArray(); + + // Assert + $this->assertSame($expected, $actual); + } + #[TestDox('Transfer serialize')] public function testTransferSerialize(): void { diff --git a/tests/integration/Transfer/data/config/definition/enum.transfer.yml b/tests/integration/Transfer/data/config/definition/enum.transfer.yml new file mode 100644 index 00000000..b6e43481 --- /dev/null +++ b/tests/integration/Transfer/data/config/definition/enum.transfer.yml @@ -0,0 +1,6 @@ +# $schema: ./../../../../../../schema/definition.schema.json +Enum: + country: + enumType: "Picamator\\Tests\\Integration\\TransferObject\\Transfer\\Enum\\CountryEnum" + yesNo: + enumType: "Picamator\\Tests\\Integration\\TransferObject\\Transfer\\Enum\\YesNoEnum" From 74d1fb33d0a34053a9c35163dbf9f8eb584fd7ee Mon Sep 17 00:00:00 2001 From: Sergii Pryz Date: Sat, 7 Feb 2026 12:18:25 +0100 Subject: [PATCH 12/19] Covered skipping null on collection transformation --- tests/integration/Transfer/TransferTest.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/integration/Transfer/TransferTest.php b/tests/integration/Transfer/TransferTest.php index 8585129c..01a6f9ff 100644 --- a/tests/integration/Transfer/TransferTest.php +++ b/tests/integration/Transfer/TransferTest.php @@ -199,6 +199,16 @@ public static function fromToArrayDataProvider(): Generator ], ]; + yield 'collection transfer object is an array with one null item' => [ + [ + ItemCollectionTransfer::ITEMS_PROP => [null], + ], + [ + ItemCollectionTransfer::ITEMS_PROP => [], + ItemCollectionTransfer::ITEM_PROP => null, + ], + ]; + yield 'data does not have any matched to transfer object properties' => [ [ 'some-property' => 'some-value', From cd5c819c6fee33d8a276802e30bed55c295c3240 Mon Sep 17 00:00:00 2001 From: Sergii Pryz Date: Sat, 7 Feb 2026 12:38:37 +0100 Subject: [PATCH 13/19] Covered TransferAdapterTrait by tests --- .../Transfer/Adapter/TransferAdapterTest.php | 15 ++++++++++++++- tests/integration/Transfer/Advanced/BookData.php | 6 ++++++ .../Transfer/Generated/EnumTransfer.php | 16 ++++++++-------- tests/integration/Transfer/TransferTest.php | 2 +- .../data/config/definition/enum.transfer.yml | 2 +- 5 files changed, 30 insertions(+), 11 deletions(-) diff --git a/tests/integration/Transfer/Adapter/TransferAdapterTest.php b/tests/integration/Transfer/Adapter/TransferAdapterTest.php index 83320e74..c6fd2f9d 100644 --- a/tests/integration/Transfer/Adapter/TransferAdapterTest.php +++ b/tests/integration/Transfer/Adapter/TransferAdapterTest.php @@ -4,6 +4,7 @@ namespace Picamator\Tests\Integration\TransferObject\Transfer\Adapter; +use ArrayObject; use PHPUnit\Framework\Attributes\Group; use PHPUnit\Framework\Attributes\RequiresPhpExtension; use PHPUnit\Framework\Attributes\TestDox; @@ -13,6 +14,7 @@ use Picamator\Tests\Integration\TransferObject\Transfer\Advanced\BookAuthorData; use Picamator\Tests\Integration\TransferObject\Transfer\Advanced\BookData; use Picamator\Tests\Integration\TransferObject\Transfer\Enum\CountryEnum; +use Picamator\Tests\Integration\TransferObject\Transfer\Enum\YesNoEnum; use Picamator\Tests\Integration\TransferObject\Transfer\Generated\AuthorTransfer; use Picamator\Tests\Integration\TransferObject\Transfer\Generated\ReservedAdvancedTransfer; @@ -40,11 +42,18 @@ public function testTransformationFromArrayToArray(): void 'title' => 'wishlist', ], 'bookmarkPage' => null, + 'isActive' => YesNoEnum::YES->value, + 'price' => 12.34, + 'publishYear' => 1889, + 'inventory' => [1, 2, 3], 'reference' => 'some reference', ]; + $data = $expected; + $data['labels'] = new ArrayObject($expected['labels']); + $bookData = new BookData() - ->fromArray($expected); + ->fromArray($data); // Act $actual = $bookData->toArray(); @@ -155,6 +164,10 @@ public function testTransferClone(): void 'title' => 'wishlist', ], 'bookmarkPage' => null, + 'isActive' => YesNoEnum::YES->value, + 'price' => 12.34, + 'publishYear' => 1889, + 'inventory' => [1, 2, 3], 'reference' => 'some reference', ]; diff --git a/tests/integration/Transfer/Advanced/BookData.php b/tests/integration/Transfer/Advanced/BookData.php index 3d721a8f..3ddc1b97 100644 --- a/tests/integration/Transfer/Advanced/BookData.php +++ b/tests/integration/Transfer/Advanced/BookData.php @@ -8,6 +8,7 @@ use DateTime; use DateTimeImmutable; use Picamator\Tests\Integration\TransferObject\Transfer\Enum\CountryEnum; +use Picamator\Tests\Integration\TransferObject\Transfer\Enum\YesNoEnum; use Picamator\Tests\Integration\TransferObject\Transfer\Generated\AuthorTransfer; use Picamator\TransferObject\Transfer\Adapter\TransferAdapterTrait; use Picamator\TransferObject\Transfer\TransferInterface; @@ -19,6 +20,7 @@ class BookData implements TransferInterface /** * @param \ArrayObject|null $labels + * @param array $inventory * @param string|null $reference */ public function __construct( @@ -31,6 +33,10 @@ public function __construct( public ?DateTimeImmutable $createdAt = null, public ?stdClass $notes = null, public ?int $bookmarkPage = 1, + public ?YesNoEnum $isActive = null, + public ?float $price = null, + public ?int $publishYear = null, + public ?array $inventory = [], public $reference = null, ) { } diff --git a/tests/integration/Transfer/Generated/EnumTransfer.php b/tests/integration/Transfer/Generated/EnumTransfer.php index b04b8bef..1530338a 100644 --- a/tests/integration/Transfer/Generated/EnumTransfer.php +++ b/tests/integration/Transfer/Generated/EnumTransfer.php @@ -24,12 +24,12 @@ final class EnumTransfer extends AbstractTransfer protected const array META_DATA = [ self::COUNTRY_PROP => self::COUNTRY_INDEX, - self::YES_NO_PROP => self::YES_NO_INDEX, + self::IS_ACTIVE_PROP => self::IS_ACTIVE_INDEX, ]; protected const array META_TRANSFORMERS = [ self::COUNTRY_PROP => 'COUNTRY_PROP', - self::YES_NO_PROP => 'YES_NO_PROP', + self::IS_ACTIVE_PROP => 'IS_ACTIVE_PROP', ]; // country @@ -44,15 +44,15 @@ final class EnumTransfer extends AbstractTransfer } } - // yesNo + // isActive #[EnumTransformerAttribute(YesNoEnum::class)] - public const string YES_NO_PROP = 'yesNo'; - private const int YES_NO_INDEX = 1; + public const string IS_ACTIVE_PROP = 'isActive'; + private const int IS_ACTIVE_INDEX = 1; - public ?YesNoEnum $yesNo { - get => $this->getData(self::YES_NO_INDEX); + public ?YesNoEnum $isActive { + get => $this->getData(self::IS_ACTIVE_INDEX); set { - $this->setData(self::YES_NO_INDEX, $value); + $this->setData(self::IS_ACTIVE_INDEX, $value); } } } diff --git a/tests/integration/Transfer/TransferTest.php b/tests/integration/Transfer/TransferTest.php index 01a6f9ff..a572cc1c 100644 --- a/tests/integration/Transfer/TransferTest.php +++ b/tests/integration/Transfer/TransferTest.php @@ -264,7 +264,7 @@ public function testEnumTransformationFromToArray(): void // Arrange $expected = [ EnumTransfer::COUNTRY_PROP => CountryEnum::PL->value, - EnumTransfer::YES_NO_PROP => YesNoEnum::YES->value, + EnumTransfer::IS_ACTIVE_PROP => YesNoEnum::YES->value, ]; $enumTransfer = new EnumTransfer($expected); diff --git a/tests/integration/Transfer/data/config/definition/enum.transfer.yml b/tests/integration/Transfer/data/config/definition/enum.transfer.yml index b6e43481..8e78fd65 100644 --- a/tests/integration/Transfer/data/config/definition/enum.transfer.yml +++ b/tests/integration/Transfer/data/config/definition/enum.transfer.yml @@ -2,5 +2,5 @@ Enum: country: enumType: "Picamator\\Tests\\Integration\\TransferObject\\Transfer\\Enum\\CountryEnum" - yesNo: + isActive: enumType: "Picamator\\Tests\\Integration\\TransferObject\\Transfer\\Enum\\YesNoEnum" From 37fed556acc5d5693a579a081ea960d504ae7011 Mon Sep 17 00:00:00 2001 From: Sergii Pryz Date: Sat, 7 Feb 2026 12:53:59 +0100 Subject: [PATCH 14/19] Covered RequiredTypePropertyValidator with tests --- .../TransferGenerator/TransferGeneratorFacadeErrorTest.php | 5 +++++ .../definition/address-statistics.transfer.yml | 5 +++++ .../error/duplicate-type-definition/generator.config.yml | 4 ++++ 3 files changed, 14 insertions(+) create mode 100644 tests/integration/TransferGenerator/data/config/error/duplicate-type-definition/definition/address-statistics.transfer.yml create mode 100644 tests/integration/TransferGenerator/data/config/error/duplicate-type-definition/generator.config.yml diff --git a/tests/integration/TransferGenerator/TransferGeneratorFacadeErrorTest.php b/tests/integration/TransferGenerator/TransferGeneratorFacadeErrorTest.php index db3c1a36..22505bb8 100644 --- a/tests/integration/TransferGenerator/TransferGeneratorFacadeErrorTest.php +++ b/tests/integration/TransferGenerator/TransferGeneratorFacadeErrorTest.php @@ -182,6 +182,11 @@ public static function invalidDefinitionDataProvider(): Generator 'configCaseName' => 'invalid-attribute-target', 'expectedMessage' => 'is not allowed', ]; + + yield 'duplicate type definition' => [ + 'configCaseName' => 'duplicate-type-definition', + 'expectedMessage' => 'type definition is missing or set multiple times.', + ]; } #[TestDox('Fail generate transfer objects')] diff --git a/tests/integration/TransferGenerator/data/config/error/duplicate-type-definition/definition/address-statistics.transfer.yml b/tests/integration/TransferGenerator/data/config/error/duplicate-type-definition/definition/address-statistics.transfer.yml new file mode 100644 index 00000000..d7d085a7 --- /dev/null +++ b/tests/integration/TransferGenerator/data/config/error/duplicate-type-definition/definition/address-statistics.transfer.yml @@ -0,0 +1,5 @@ +AddressStatistics: + addressBookUuid: + type: string + enumType: "Picamator\\Tests\\Integration\\TransferObject\\TransferGenerator\\Enum\\AddressLabelEnum" + diff --git a/tests/integration/TransferGenerator/data/config/error/duplicate-type-definition/generator.config.yml b/tests/integration/TransferGenerator/data/config/error/duplicate-type-definition/generator.config.yml new file mode 100644 index 00000000..f86e3513 --- /dev/null +++ b/tests/integration/TransferGenerator/data/config/error/duplicate-type-definition/generator.config.yml @@ -0,0 +1,4 @@ +generator: + transferNamespace: "Picamator\\Tests\\Integration\\TransferObject\\TransferGenerator\\Generated\\Error" + transferPath: "${PROJECT_ROOT}/tests/integration/TransferGenerator/Generated/Error" + definitionPath: "${PROJECT_ROOT}/tests/integration/TransferGenerator/data/config/error/duplicate-type-definition/definition" From c333530383dcaa935e18f1cdb821debf1a7c56e3 Mon Sep 17 00:00:00 2001 From: Sergii Pryz Date: Sat, 7 Feb 2026 13:02:51 +0100 Subject: [PATCH 15/19] Covered CollectionTypePropertyValidator with tests --- .../Transfer/Generated/NamespaceTransfer.php | 41 +++++++++++++++++-- tests/integration/Transfer/TransferTest.php | 4 ++ .../config/definition/namespace.transfer.yml | 4 ++ 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/tests/integration/Transfer/Generated/NamespaceTransfer.php b/tests/integration/Transfer/Generated/NamespaceTransfer.php index 16264e44..ed3314e1 100644 --- a/tests/integration/Transfer/Generated/NamespaceTransfer.php +++ b/tests/integration/Transfer/Generated/NamespaceTransfer.php @@ -6,6 +6,8 @@ use ArrayObject; use Picamator\Tests\Integration\TransferObject\Transfer\Generated\ItemTransfer; +use Picamator\Tests\Integration\TransferObject\Transfer\Generated\ItemTransfer as ItemAlias; +use Picamator\Tests\Integration\TransferObject\Transfer\Generated\RequiredTransfer; use Picamator\Tests\Integration\TransferObject\Transfer\Generated\RequiredTransfer as RequiredAlias; use Picamator\TransferObject\Transfer\AbstractTransfer; use Picamator\TransferObject\Transfer\Attribute\Initiator\ArrayObjectInitiatorAttribute; @@ -24,20 +26,25 @@ */ final class NamespaceTransfer extends AbstractTransfer { - protected const int META_DATA_SIZE = 2; + protected const int META_DATA_SIZE = 4; protected const array META_DATA = [ self::ITEMS_PROP => self::ITEMS_INDEX, + self::ITEMS_WITH_ALIAS_PROP => self::ITEMS_WITH_ALIAS_INDEX, self::REQUIRED_PROP => self::REQUIRED_INDEX, + self::REQUIRED_WITH_ALIAS_PROP => self::REQUIRED_WITH_ALIAS_INDEX, ]; protected const array META_INITIATORS = [ self::ITEMS_PROP => 'ITEMS_PROP', + self::ITEMS_WITH_ALIAS_PROP => 'ITEMS_WITH_ALIAS_PROP', ]; protected const array META_TRANSFORMERS = [ self::ITEMS_PROP => 'ITEMS_PROP', + self::ITEMS_WITH_ALIAS_PROP => 'ITEMS_WITH_ALIAS_PROP', self::REQUIRED_PROP => 'REQUIRED_PROP', + self::REQUIRED_WITH_ALIAS_PROP => 'REQUIRED_WITH_ALIAS_PROP', ]; // items @@ -54,15 +61,41 @@ final class NamespaceTransfer extends AbstractTransfer } } + // itemsWithAlias + #[ArrayObjectInitiatorAttribute] + #[CollectionTransformerAttribute(ItemAlias::class)] + public const string ITEMS_WITH_ALIAS_PROP = 'itemsWithAlias'; + private const int ITEMS_WITH_ALIAS_INDEX = 1; + + /** @var \ArrayObject */ + public ArrayObject $itemsWithAlias { + get => $this->getData(self::ITEMS_WITH_ALIAS_INDEX); + set { + $this->setData(self::ITEMS_WITH_ALIAS_INDEX, $value); + } + } + // required - #[TransferTransformerAttribute(RequiredAlias::class)] + #[TransferTransformerAttribute(RequiredTransfer::class)] public const string REQUIRED_PROP = 'required'; - private const int REQUIRED_INDEX = 1; + private const int REQUIRED_INDEX = 2; - public TransferInterface&RequiredAlias $required { + public TransferInterface&RequiredTransfer $required { get => $this->getData(self::REQUIRED_INDEX); set { $this->setData(self::REQUIRED_INDEX, $value); } } + + // requiredWithAlias + #[TransferTransformerAttribute(RequiredAlias::class)] + public const string REQUIRED_WITH_ALIAS_PROP = 'requiredWithAlias'; + private const int REQUIRED_WITH_ALIAS_INDEX = 3; + + public TransferInterface&RequiredAlias $requiredWithAlias { + get => $this->getData(self::REQUIRED_WITH_ALIAS_INDEX); + set { + $this->setData(self::REQUIRED_WITH_ALIAS_INDEX, $value); + } + } } diff --git a/tests/integration/Transfer/TransferTest.php b/tests/integration/Transfer/TransferTest.php index a572cc1c..f6b091db 100644 --- a/tests/integration/Transfer/TransferTest.php +++ b/tests/integration/Transfer/TransferTest.php @@ -425,10 +425,14 @@ public function testTypeWithNamespace(): void // Arrange $namespaceTransfer = new NamespaceTransfer(); $namespaceTransfer->items[] = new ItemTransfer(); + $namespaceTransfer->itemsWithAlias[] = new ItemTransfer(); + $namespaceTransfer->required = new RequiredTransfer(); + $namespaceTransfer->requiredWithAlias = new RequiredTransfer(); // Act $this->assertCount(1, $namespaceTransfer->items); + $this->assertCount(1, $namespaceTransfer->itemsWithAlias); } #[TestDox('Protected property')] diff --git a/tests/integration/Transfer/data/config/definition/namespace.transfer.yml b/tests/integration/Transfer/data/config/definition/namespace.transfer.yml index af719046..bd4e2f11 100644 --- a/tests/integration/Transfer/data/config/definition/namespace.transfer.yml +++ b/tests/integration/Transfer/data/config/definition/namespace.transfer.yml @@ -2,5 +2,9 @@ Namespace: items: collectionType: "Picamator\\Tests\\Integration\\TransferObject\\Transfer\\Generated\\ItemTransfer" + itemsWithAlias: + collectionType: "Picamator\\Tests\\Integration\\TransferObject\\Transfer\\Generated\\ItemTransfer as ItemAlias" required: + type: "Picamator\\Tests\\Integration\\TransferObject\\Transfer\\Generated\\RequiredTransfer" + requiredWithAlias: type: "Picamator\\Tests\\Integration\\TransferObject\\Transfer\\Generated\\RequiredTransfer as RequiredAlias" From 93b1f94b8aa18f4d72c3f3a33e8a50992934a9db Mon Sep 17 00:00:00 2001 From: Sergii Pryz Date: Sat, 7 Feb 2026 13:21:13 +0100 Subject: [PATCH 16/19] Changed variable names on TransferTypeTemplateExpander to be consistance with CollectionTypeTemplateExpander --- .../Render/Expander/TransferTypeTemplateExpander.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/TransferGenerator/Generator/Render/Expander/TransferTypeTemplateExpander.php b/src/TransferGenerator/Generator/Render/Expander/TransferTypeTemplateExpander.php index 48633e8e..15cf13ed 100644 --- a/src/TransferGenerator/Generator/Render/Expander/TransferTypeTemplateExpander.php +++ b/src/TransferGenerator/Generator/Render/Expander/TransferTypeTemplateExpander.php @@ -37,12 +37,14 @@ protected function handleExpander( ); } - private function getPropertyType(DefinitionEmbeddedTypeTransfer $typeTransfer): string + private function getPropertyType(DefinitionEmbeddedTypeTransfer $embeddedTypeTransfer): string { - if ($typeTransfer->namespace === null) { - return $typeTransfer->name; + $propertyType = $embeddedTypeTransfer->name; + + if ($embeddedTypeTransfer->namespace !== null) { + return $this->enforceTransferInterface($propertyType); } - return $this->enforceTransferInterface($typeTransfer->name); + return $propertyType; } } From 98d08baa14e8828a0ed06f8accf4fc2e1293559e Mon Sep 17 00:00:00 2001 From: Sergii Pryz Date: Sat, 7 Feb 2026 13:26:21 +0100 Subject: [PATCH 17/19] Upgraded composer dependencies --- composer.lock | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/composer.lock b/composer.lock index c97edd93..b0caae8b 100644 --- a/composer.lock +++ b/composer.lock @@ -1565,16 +1565,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "12.5.2", + "version": "12.5.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "4a9739b51cbcb355f6e95659612f92e282a7077b" + "reference": "b015312f28dd75b75d3422ca37dff2cd1a565e8d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/4a9739b51cbcb355f6e95659612f92e282a7077b", - "reference": "4a9739b51cbcb355f6e95659612f92e282a7077b", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/b015312f28dd75b75d3422ca37dff2cd1a565e8d", + "reference": "b015312f28dd75b75d3422ca37dff2cd1a565e8d", "shasum": "" }, "require": { @@ -1630,7 +1630,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.5.2" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.5.3" }, "funding": [ { @@ -1650,7 +1650,7 @@ "type": "tidelift" } ], - "time": "2025-12-24T07:03:04+00:00" + "time": "2026-02-06T06:01:44+00:00" }, { "name": "phpunit/php-file-iterator", @@ -1911,16 +1911,16 @@ }, { "name": "phpunit/phpunit", - "version": "12.5.8", + "version": "12.5.9", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "37ddb96c14bfee10304825edbb7e66d341ec6889" + "reference": "83d4c158526c879b4c5cf7149d27958b6d912373" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/37ddb96c14bfee10304825edbb7e66d341ec6889", - "reference": "37ddb96c14bfee10304825edbb7e66d341ec6889", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/83d4c158526c879b4c5cf7149d27958b6d912373", + "reference": "83d4c158526c879b4c5cf7149d27958b6d912373", "shasum": "" }, "require": { @@ -1935,7 +1935,7 @@ "phar-io/version": "^3.2.1", "php": ">=8.3", "phpunit/php-code-coverage": "^12.5.2", - "phpunit/php-file-iterator": "^6.0.0", + "phpunit/php-file-iterator": "^6.0.1", "phpunit/php-invoker": "^6.0.0", "phpunit/php-text-template": "^5.0.0", "phpunit/php-timer": "^8.0.0", @@ -1946,6 +1946,7 @@ "sebastian/exporter": "^7.0.2", "sebastian/global-state": "^8.0.2", "sebastian/object-enumerator": "^7.0.0", + "sebastian/recursion-context": "^7.0.1", "sebastian/type": "^6.0.3", "sebastian/version": "^6.0.0", "staabm/side-effects-detector": "^1.0.5" @@ -1988,7 +1989,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/12.5.8" + "source": "https://github.com/sebastianbergmann/phpunit/tree/12.5.9" }, "funding": [ { @@ -2012,7 +2013,7 @@ "type": "tidelift" } ], - "time": "2026-01-27T06:12:29+00:00" + "time": "2026-02-05T08:01:09+00:00" }, { "name": "sebastian/cli-parser", From 4840eeccf136b1f24b1ab318513713e464d8b766 Mon Sep 17 00:00:00 2001 From: Sergii Pryz Date: Sat, 7 Feb 2026 14:28:19 +0100 Subject: [PATCH 18/19] Fixed typo on readme and variable name on the factory --- README.md | 2 +- .../Generator/Generator/GeneratorFactory.php | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index bf797be5..a85f56fc 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ $customerTransfer->lastName = 'Kowalski'; Key Features ------------ -**Symfony Compatability:** +**Symfony Compatibility:** * Provides Symfony console command: * [TransferGeneratorCommand](/src/Command/TransferGeneratorCommand.php) diff --git a/src/TransferGenerator/Generator/Generator/GeneratorFactory.php b/src/TransferGenerator/Generator/Generator/GeneratorFactory.php index 140f71f2..f5f71eec 100644 --- a/src/TransferGenerator/Generator/Generator/GeneratorFactory.php +++ b/src/TransferGenerator/Generator/Generator/GeneratorFactory.php @@ -77,8 +77,8 @@ protected function createPreProcessCommand(): PreProcessCommandInterface protected function createGeneratorFilesystem(): GeneratorFilesystemInterface { - /** @var GeneratorFilesystemInterface $generatorFileSystem */ - $generatorFileSystem = $this->getLazyGhost( + /** @var GeneratorFilesystemInterface $generatorFilesystem */ + $generatorFilesystem = $this->getLazyGhost( className: GeneratorFilesystem::class, initializer: function (GeneratorFilesystem $ghost): void { $ghost->__construct( @@ -89,7 +89,7 @@ className: GeneratorFilesystem::class, } ); - return $generatorFileSystem; + return $generatorFilesystem; } protected function createTransferGeneratorBuilder(): TransferGeneratorBuilderInterface From ca26f5a251348db0d0048ce979679114ffc9edce Mon Sep 17 00:00:00 2001 From: Sergii Pryz Date: Sat, 7 Feb 2026 15:09:03 +0100 Subject: [PATCH 19/19] Remaned classes and variables contained BuildIn to BuiltIn --- .../transfer-generator.transfer.yml | 8 +++---- .../Content/DefinitionContentFactory.php | 8 +++---- ...der.php => BuiltInTypeBuilderExpander.php} | 20 ++++++++--------- .../Generator/Render/TemplateRender.php | 18 +++++++-------- ....php => DefinitionBuiltInTypeTransfer.php} | 8 +++---- src/Generated/DefinitionPropertyTransfer.php | 18 +++++++-------- ...uildInTypeEnum.php => BuiltInTypeEnum.php} | 2 +- .../Expander/AttributesPropertyExpander.php | 8 +++---- .../Expander/RequiredPropertyExpander.php | 4 ++-- .../Parser/Expander/TypePropertyExpander.php | 22 +++++++++---------- ...r.php => BuiltInTypePropertyValidator.php} | 16 +++++++------- .../RequiredTypePropertyValidator.php | 2 +- .../Definition/Validator/ValidatorFactory.php | 8 +++---- ...er.php => BuiltInTypeTemplateExpander.php} | 20 ++++++++--------- .../CollectionTypeTemplateExpander.php | 6 ++--- .../Generator/Render/RenderFactory.php | 8 +++---- ...php => BuiltInTypeBuilderExpanderTest.php} | 6 ++--- .../Generator/Render/DefinitionRenderTest.php | 6 ++--- 18 files changed, 94 insertions(+), 94 deletions(-) rename src/DefinitionGenerator/Content/Expander/{BuildInTypeBuilderExpander.php => BuiltInTypeBuilderExpander.php} (90%) rename src/Generated/{DefinitionBuildInTypeTransfer.php => DefinitionBuiltInTypeTransfer.php} (89%) rename src/TransferGenerator/Definition/Enum/{BuildInTypeEnum.php => BuiltInTypeEnum.php} (97%) rename src/TransferGenerator/Definition/Validator/Content/Property/{BuildInTypePropertyValidator.php => BuiltInTypePropertyValidator.php} (71%) rename src/TransferGenerator/Generator/Render/Expander/{BuildInTypeTemplateExpander.php => BuiltInTypeTemplateExpander.php} (84%) rename tests/unit/DefinitionGenerator/Content/Expander/{BuildInTypeBuilderExpanderTest.php => BuiltInTypeBuilderExpanderTest.php} (90%) diff --git a/config/definition/transfer-generator.transfer.yml b/config/definition/transfer-generator.transfer.yml index 21aa3f09..81597837 100644 --- a/config/definition/transfer-generator.transfer.yml +++ b/config/definition/transfer-generator.transfer.yml @@ -43,8 +43,8 @@ DefinitionProperty: propertyName: type: string required: - buildInType: - type: DefinitionBuildInType + builtInType: + type: DefinitionBuiltInType transferType: type: DefinitionEmbeddedType collectionType: @@ -71,9 +71,9 @@ DefinitionAttribute: type: DefinitionNamespace required: -DefinitionBuildInType: +DefinitionBuiltInType: name: - enumType: "Picamator\\TransferObject\\TransferGenerator\\Definition\\Enum\\BuildInTypeEnum" + enumType: "Picamator\\TransferObject\\TransferGenerator\\Definition\\Enum\\BuiltInTypeEnum" required: docBlock: type: string diff --git a/src/DefinitionGenerator/Content/DefinitionContentFactory.php b/src/DefinitionGenerator/Content/DefinitionContentFactory.php index 0db450e7..ca6b2513 100644 --- a/src/DefinitionGenerator/Content/DefinitionContentFactory.php +++ b/src/DefinitionGenerator/Content/DefinitionContentFactory.php @@ -7,7 +7,7 @@ use Picamator\TransferObject\DefinitionGenerator\Content\Builder\ContentBuilder; use Picamator\TransferObject\DefinitionGenerator\Content\Builder\ContentBuilderInterface; use Picamator\TransferObject\DefinitionGenerator\Content\Expander\BuilderExpanderInterface; -use Picamator\TransferObject\DefinitionGenerator\Content\Expander\BuildInTypeBuilderExpander; +use Picamator\TransferObject\DefinitionGenerator\Content\Expander\BuiltInTypeBuilderExpander; use Picamator\TransferObject\DefinitionGenerator\Content\Expander\CollectionTypeBuilderExpander; use Picamator\TransferObject\DefinitionGenerator\Content\Expander\TransferTypeBuilderExpander; use Picamator\TransferObject\DefinitionGenerator\Content\Reader\ContentReader; @@ -40,14 +40,14 @@ protected function createBuilderExpander(): BuilderExpanderInterface $builderExpander ->setNextExpander($this->createCollectionTypeBuilderExpander()) - ->setNextExpander($this->createBuildInTypeBuilderExpander()); + ->setNextExpander($this->createBuiltInTypeBuilderExpander()); return $builderExpander; } - protected function createBuildInTypeBuilderExpander(): BuilderExpanderInterface + protected function createBuiltInTypeBuilderExpander(): BuilderExpanderInterface { - return new BuildInTypeBuilderExpander(); + return new BuiltInTypeBuilderExpander(); } protected function createCollectionTypeBuilderExpander(): BuilderExpanderInterface diff --git a/src/DefinitionGenerator/Content/Expander/BuildInTypeBuilderExpander.php b/src/DefinitionGenerator/Content/Expander/BuiltInTypeBuilderExpander.php similarity index 90% rename from src/DefinitionGenerator/Content/Expander/BuildInTypeBuilderExpander.php rename to src/DefinitionGenerator/Content/Expander/BuiltInTypeBuilderExpander.php index 742c40a8..dfa0c63f 100644 --- a/src/DefinitionGenerator/Content/Expander/BuildInTypeBuilderExpander.php +++ b/src/DefinitionGenerator/Content/Expander/BuiltInTypeBuilderExpander.php @@ -12,13 +12,13 @@ use Picamator\TransferObject\DefinitionGenerator\Content\Enum\ObjectTypeEnum; use Picamator\TransferObject\DefinitionGenerator\Exception\DefinitionGeneratorException; use Picamator\TransferObject\Generated\DefinitionBuilderTransfer; -use Picamator\TransferObject\Generated\DefinitionBuildInTypeTransfer; +use Picamator\TransferObject\Generated\DefinitionBuiltInTypeTransfer; use Picamator\TransferObject\Generated\DefinitionEmbeddedTypeTransfer; use Picamator\TransferObject\Generated\DefinitionPropertyTransfer; use Picamator\TransferObject\Shared\Parser\DocBlockParserTrait; -use Picamator\TransferObject\TransferGenerator\Definition\Enum\BuildInTypeEnum; +use Picamator\TransferObject\TransferGenerator\Definition\Enum\BuiltInTypeEnum; -final class BuildInTypeBuilderExpander extends AbstractBuilderExpander +final class BuiltInTypeBuilderExpander extends AbstractBuilderExpander { use DocBlockParserTrait; @@ -130,23 +130,23 @@ private function createDateTimePropertyTransfer(string $propertyName): Definitio return $propertyTransfer; } - private function createPropertyTransfer(string $propertyName, string $buildInType): DefinitionPropertyTransfer + private function createPropertyTransfer(string $propertyName, string $builtInType): DefinitionPropertyTransfer { - $tapeWithDocBlock = $this->parseTypeWithDocBlock($buildInType) ?? []; + $tapeWithDocBlock = $this->parseTypeWithDocBlock($builtInType) ?? []; /** @var string $type */ $type = array_key_first($tapeWithDocBlock); - $type = BuildInTypeEnum::from($type); + $type = BuiltInTypeEnum::from($type); $docBlock = array_first($tapeWithDocBlock); - $buildInTypeTransfer = new DefinitionBuildInTypeTransfer(); - $buildInTypeTransfer->name = $type; - $buildInTypeTransfer->docBlock = $docBlock; + $builtInTypeTransfer = new DefinitionBuiltInTypeTransfer(); + $builtInTypeTransfer->name = $type; + $builtInTypeTransfer->docBlock = $docBlock; $propertyTransfer = new DefinitionPropertyTransfer(); $propertyTransfer->propertyName = $propertyName; - $propertyTransfer->buildInType = $buildInTypeTransfer; + $propertyTransfer->builtInType = $builtInTypeTransfer; return $propertyTransfer; } diff --git a/src/DefinitionGenerator/Generator/Render/TemplateRender.php b/src/DefinitionGenerator/Generator/Render/TemplateRender.php index d4890a8e..4ea21b33 100644 --- a/src/DefinitionGenerator/Generator/Render/TemplateRender.php +++ b/src/DefinitionGenerator/Generator/Render/TemplateRender.php @@ -69,8 +69,8 @@ public function renderContent(DefinitionContentTransfer $contentTransfer): strin private function renderProperty(DefinitionPropertyTransfer $propertyTransfer): string { return match (true) { - $propertyTransfer->buildInType !== null - => $this->renderBuildInType($propertyTransfer), + $propertyTransfer->builtInType !== null + => $this->renderBuiltInType($propertyTransfer), $propertyTransfer->transferType !== null => $this->renderTransferType($propertyTransfer), @@ -125,22 +125,22 @@ private function renderTransferType(DefinitionPropertyTransfer $propertyTransfer ); } - private function renderBuildInType(DefinitionPropertyTransfer $propertyTransfer): string + private function renderBuiltInType(DefinitionPropertyTransfer $propertyTransfer): string { - /** @var \Picamator\TransferObject\Generated\DefinitionBuildInTypeTransfer $buildInType */ - $buildInType = $propertyTransfer->buildInType; + /** @var \Picamator\TransferObject\Generated\DefinitionBuiltInTypeTransfer $builtInType */ + $builtInType = $propertyTransfer->builtInType; - return $buildInType->docBlock + return $builtInType->docBlock ? sprintf( self::TYPE_WITH_DOC_BLOCK_TEMPLATE, $propertyTransfer->propertyName, - $buildInType->name->value, - $buildInType->docBlock, + $builtInType->name->value, + $builtInType->docBlock, ) : sprintf( self::TYPE_TEMPLATE, $propertyTransfer->propertyName, - $buildInType->name->value, + $builtInType->name->value, ); } } diff --git a/src/Generated/DefinitionBuildInTypeTransfer.php b/src/Generated/DefinitionBuiltInTypeTransfer.php similarity index 89% rename from src/Generated/DefinitionBuildInTypeTransfer.php rename to src/Generated/DefinitionBuiltInTypeTransfer.php index 3ccc5c7a..891700cf 100644 --- a/src/Generated/DefinitionBuildInTypeTransfer.php +++ b/src/Generated/DefinitionBuiltInTypeTransfer.php @@ -4,7 +4,7 @@ namespace Picamator\TransferObject\Generated; -use Picamator\TransferObject\TransferGenerator\Definition\Enum\BuildInTypeEnum; +use Picamator\TransferObject\TransferGenerator\Definition\Enum\BuiltInTypeEnum; use Picamator\TransferObject\Transfer\AbstractTransfer; use Picamator\TransferObject\Transfer\Attribute\Transformer\EnumTransformerAttribute; @@ -17,7 +17,7 @@ * * @see /config/definition/transfer-generator.transfer.yml Definition file path. */ -final class DefinitionBuildInTypeTransfer extends AbstractTransfer +final class DefinitionBuiltInTypeTransfer extends AbstractTransfer { protected const int META_DATA_SIZE = 2; @@ -42,11 +42,11 @@ final class DefinitionBuildInTypeTransfer extends AbstractTransfer } // name - #[EnumTransformerAttribute(BuildInTypeEnum::class)] + #[EnumTransformerAttribute(BuiltInTypeEnum::class)] public const string NAME_PROP = 'name'; private const int NAME_INDEX = 1; - public BuildInTypeEnum $name { + public BuiltInTypeEnum $name { get => $this->getData(self::NAME_INDEX); set { $this->setData(self::NAME_INDEX, $value); diff --git a/src/Generated/DefinitionPropertyTransfer.php b/src/Generated/DefinitionPropertyTransfer.php index 720b18c8..974020d7 100644 --- a/src/Generated/DefinitionPropertyTransfer.php +++ b/src/Generated/DefinitionPropertyTransfer.php @@ -25,7 +25,7 @@ final class DefinitionPropertyTransfer extends AbstractTransfer protected const array META_DATA = [ self::ATTRIBUTES_PROP => self::ATTRIBUTES_INDEX, - self::BUILD_IN_TYPE_PROP => self::BUILD_IN_TYPE_INDEX, + self::BUILT_IN_TYPE_PROP => self::BUILT_IN_TYPE_INDEX, self::COLLECTION_TYPE_PROP => self::COLLECTION_TYPE_INDEX, self::DATE_TIME_TYPE_PROP => self::DATE_TIME_TYPE_INDEX, self::ENUM_TYPE_PROP => self::ENUM_TYPE_INDEX, @@ -42,7 +42,7 @@ final class DefinitionPropertyTransfer extends AbstractTransfer protected const array META_TRANSFORMERS = [ self::ATTRIBUTES_PROP => 'ATTRIBUTES_PROP', - self::BUILD_IN_TYPE_PROP => 'BUILD_IN_TYPE_PROP', + self::BUILT_IN_TYPE_PROP => 'BUILT_IN_TYPE_PROP', self::COLLECTION_TYPE_PROP => 'COLLECTION_TYPE_PROP', self::DATE_TIME_TYPE_PROP => 'DATE_TIME_TYPE_PROP', self::ENUM_TYPE_PROP => 'ENUM_TYPE_PROP', @@ -64,15 +64,15 @@ final class DefinitionPropertyTransfer extends AbstractTransfer } } - // buildInType - #[TransferTransformerAttribute(DefinitionBuildInTypeTransfer::class)] - public const string BUILD_IN_TYPE_PROP = 'buildInType'; - private const int BUILD_IN_TYPE_INDEX = 1; + // builtInType + #[TransferTransformerAttribute(DefinitionBuiltInTypeTransfer::class)] + public const string BUILT_IN_TYPE_PROP = 'builtInType'; + private const int BUILT_IN_TYPE_INDEX = 1; - public ?DefinitionBuildInTypeTransfer $buildInType { - get => $this->getData(self::BUILD_IN_TYPE_INDEX); + public ?DefinitionBuiltInTypeTransfer $builtInType { + get => $this->getData(self::BUILT_IN_TYPE_INDEX); set { - $this->setData(self::BUILD_IN_TYPE_INDEX, $value); + $this->setData(self::BUILT_IN_TYPE_INDEX, $value); } } diff --git a/src/TransferGenerator/Definition/Enum/BuildInTypeEnum.php b/src/TransferGenerator/Definition/Enum/BuiltInTypeEnum.php similarity index 97% rename from src/TransferGenerator/Definition/Enum/BuildInTypeEnum.php rename to src/TransferGenerator/Definition/Enum/BuiltInTypeEnum.php index 1c9fe0c8..6b03bffb 100644 --- a/src/TransferGenerator/Definition/Enum/BuildInTypeEnum.php +++ b/src/TransferGenerator/Definition/Enum/BuiltInTypeEnum.php @@ -4,7 +4,7 @@ namespace Picamator\TransferObject\TransferGenerator\Definition\Enum; -enum BuildInTypeEnum: string +enum BuiltInTypeEnum: string { case BOOL = 'bool'; case TRUE = 'true'; diff --git a/src/TransferGenerator/Definition/Parser/Expander/AttributesPropertyExpander.php b/src/TransferGenerator/Definition/Parser/Expander/AttributesPropertyExpander.php index 4017a453..20eeb248 100644 --- a/src/TransferGenerator/Definition/Parser/Expander/AttributesPropertyExpander.php +++ b/src/TransferGenerator/Definition/Parser/Expander/AttributesPropertyExpander.php @@ -58,10 +58,10 @@ private function getAttributeTransfer(string $attribute): ?DefinitionAttributeTr $namespace = $matches['namespace'] ?? ''; $namespaceTransfer = $this->namespaceBuilder->createNamespaceTransfer($namespace); - $buildInTypeTransfer = new DefinitionAttributeTransfer(); - $buildInTypeTransfer->arguments = $matches['arguments'] ?? null; - $buildInTypeTransfer->namespace = $namespaceTransfer; + $builtInTypeTransfer = new DefinitionAttributeTransfer(); + $builtInTypeTransfer->arguments = $matches['arguments'] ?? null; + $builtInTypeTransfer->namespace = $namespaceTransfer; - return $buildInTypeTransfer; + return $builtInTypeTransfer; } } diff --git a/src/TransferGenerator/Definition/Parser/Expander/RequiredPropertyExpander.php b/src/TransferGenerator/Definition/Parser/Expander/RequiredPropertyExpander.php index 8b88db05..2334b9f6 100644 --- a/src/TransferGenerator/Definition/Parser/Expander/RequiredPropertyExpander.php +++ b/src/TransferGenerator/Definition/Parser/Expander/RequiredPropertyExpander.php @@ -28,8 +28,8 @@ protected function handleExpander(string $matchedType, DefinitionPropertyTransfe private function isNullableAllowed(DefinitionPropertyTransfer $propertyTransfer): bool { - $buildInType = $propertyTransfer->buildInType?->name; - if ($buildInType !== null && ($buildInType->isArray() || $buildInType->isArrayObject())) { + $builtInType = $propertyTransfer->builtInType?->name; + if ($builtInType !== null && ($builtInType->isArray() || $builtInType->isArrayObject())) { return false; } diff --git a/src/TransferGenerator/Definition/Parser/Expander/TypePropertyExpander.php b/src/TransferGenerator/Definition/Parser/Expander/TypePropertyExpander.php index 3870c8c3..1eb14798 100644 --- a/src/TransferGenerator/Definition/Parser/Expander/TypePropertyExpander.php +++ b/src/TransferGenerator/Definition/Parser/Expander/TypePropertyExpander.php @@ -4,10 +4,10 @@ namespace Picamator\TransferObject\TransferGenerator\Definition\Parser\Expander; -use Picamator\TransferObject\Generated\DefinitionBuildInTypeTransfer; +use Picamator\TransferObject\Generated\DefinitionBuiltInTypeTransfer; use Picamator\TransferObject\Generated\DefinitionPropertyTransfer; use Picamator\TransferObject\Shared\Parser\DocBlockParserTrait; -use Picamator\TransferObject\TransferGenerator\Definition\Enum\BuildInTypeEnum; +use Picamator\TransferObject\TransferGenerator\Definition\Enum\BuiltInTypeEnum; use Picamator\TransferObject\TransferGenerator\Definition\Parser\Expander\Builder\EmbeddedTypeBuilderInterface; final class TypePropertyExpander extends AbstractPropertyExpander @@ -29,9 +29,9 @@ protected function matchType(array $propertyType): ?string protected function handleExpander(string $matchedType, DefinitionPropertyTransfer $propertyTransfer): void { - $buildInTypeTransfer = $this->getBuildInTypeTransfer($matchedType); - if ($buildInTypeTransfer !== null) { - $propertyTransfer->buildInType = $buildInTypeTransfer; + $builtInTypeTransfer = $this->getBuiltInTypeTransfer($matchedType); + if ($builtInTypeTransfer !== null) { + $propertyTransfer->builtInType = $builtInTypeTransfer; return; } @@ -39,7 +39,7 @@ protected function handleExpander(string $matchedType, DefinitionPropertyTransfe $propertyTransfer->transferType = $this->typeBuilder->createPrefixTypeTransfer($matchedType); } - private function getBuildInTypeTransfer(string $matchedType): ?DefinitionBuildInTypeTransfer + private function getBuiltInTypeTransfer(string $matchedType): ?DefinitionBuiltInTypeTransfer { $tapeWithDocBlock = $this->parseTypeWithDocBlock($matchedType); if ($tapeWithDocBlock === null) { @@ -48,16 +48,16 @@ private function getBuildInTypeTransfer(string $matchedType): ?DefinitionBuildIn /** @var string $type */ $type = array_key_first($tapeWithDocBlock); - $type = BuildInTypeEnum::tryFrom($type); + $type = BuiltInTypeEnum::tryFrom($type); if ($type === null) { return null; } - $buildInTypeTransfer = new DefinitionBuildInTypeTransfer(); - $buildInTypeTransfer->name = $type; - $buildInTypeTransfer->docBlock = array_first($tapeWithDocBlock); + $builtInTypeTransfer = new DefinitionBuiltInTypeTransfer(); + $builtInTypeTransfer->name = $type; + $builtInTypeTransfer->docBlock = array_first($tapeWithDocBlock); - return $buildInTypeTransfer; + return $builtInTypeTransfer; } } diff --git a/src/TransferGenerator/Definition/Validator/Content/Property/BuildInTypePropertyValidator.php b/src/TransferGenerator/Definition/Validator/Content/Property/BuiltInTypePropertyValidator.php similarity index 71% rename from src/TransferGenerator/Definition/Validator/Content/Property/BuildInTypePropertyValidator.php rename to src/TransferGenerator/Definition/Validator/Content/Property/BuiltInTypePropertyValidator.php index 0d8bb85e..3a90765e 100644 --- a/src/TransferGenerator/Definition/Validator/Content/Property/BuildInTypePropertyValidator.php +++ b/src/TransferGenerator/Definition/Validator/Content/Property/BuiltInTypePropertyValidator.php @@ -8,7 +8,7 @@ use Picamator\TransferObject\Generated\ValidatorMessageTransfer; use Picamator\TransferObject\Shared\Validator\ValidatorMessageTrait; -class BuildInTypePropertyValidator implements PropertyValidatorInterface +class BuiltInTypePropertyValidator implements PropertyValidatorInterface { use ValidatorMessageTrait; @@ -21,18 +21,18 @@ class BuildInTypePropertyValidator implements PropertyValidatorInterface public function isApplicable(DefinitionPropertyTransfer $propertyTransfer): bool { - $buildInType = $propertyTransfer->buildInType; + $builtInType = $propertyTransfer->builtInType; - return $buildInType !== null && !isset(self::$successCache[$buildInType->name->value]); + return $builtInType !== null && !isset(self::$successCache[$builtInType->name->value]); } public function validate(DefinitionPropertyTransfer $propertyTransfer): ?ValidatorMessageTransfer { - /** @var \Picamator\TransferObject\Generated\DefinitionBuildInTypeTransfer $buildInTypeTransfer */ - $buildInTypeTransfer = $propertyTransfer->buildInType; + /** @var \Picamator\TransferObject\Generated\DefinitionBuiltInTypeTransfer $builtInTypeTransfer */ + $builtInTypeTransfer = $propertyTransfer->builtInType; - if ($buildInTypeTransfer->name->isAllowed()) { - self::$successCache[$buildInTypeTransfer->name->value] = true; + if ($builtInTypeTransfer->name->isAllowed()) { + self::$successCache[$builtInTypeTransfer->name->value] = true; return null; } @@ -47,7 +47,7 @@ private function getErrorMessage(DefinitionPropertyTransfer $propertyTransfer): return sprintf( self::UNSUPPORTED_TYPE_ERROR_MESSAGE_TEMPLATE, $propertyTransfer->propertyName, - $propertyTransfer->buildInType?->name->value ?? '', + $propertyTransfer->builtInType?->name->value ?? '', ); } } diff --git a/src/TransferGenerator/Definition/Validator/Content/Property/RequiredTypePropertyValidator.php b/src/TransferGenerator/Definition/Validator/Content/Property/RequiredTypePropertyValidator.php index ea4d619d..c25d3959 100644 --- a/src/TransferGenerator/Definition/Validator/Content/Property/RequiredTypePropertyValidator.php +++ b/src/TransferGenerator/Definition/Validator/Content/Property/RequiredTypePropertyValidator.php @@ -16,7 +16,7 @@ = 'Property "%s" type definition is missing or set multiple times.'; private const array TYPE_KEYS = [ - DefinitionPropertyTransfer::BUILD_IN_TYPE_PROP, + DefinitionPropertyTransfer::BUILT_IN_TYPE_PROP, DefinitionPropertyTransfer::TRANSFER_TYPE_PROP, DefinitionPropertyTransfer::COLLECTION_TYPE_PROP, DefinitionPropertyTransfer::ENUM_TYPE_PROP, diff --git a/src/TransferGenerator/Definition/Validator/ValidatorFactory.php b/src/TransferGenerator/Definition/Validator/ValidatorFactory.php index fe5bc261..2c81a960 100644 --- a/src/TransferGenerator/Definition/Validator/ValidatorFactory.php +++ b/src/TransferGenerator/Definition/Validator/ValidatorFactory.php @@ -12,7 +12,7 @@ use Picamator\TransferObject\TransferGenerator\Definition\Validator\Content\EmptyPropertiesContentValidator; use Picamator\TransferObject\TransferGenerator\Definition\Validator\Content\PropertiesContentValidator; use Picamator\TransferObject\TransferGenerator\Definition\Validator\Content\Property\AttributesPropertyValidator; -use Picamator\TransferObject\TransferGenerator\Definition\Validator\Content\Property\BuildInTypePropertyValidator; +use Picamator\TransferObject\TransferGenerator\Definition\Validator\Content\Property\BuiltInTypePropertyValidator; use Picamator\TransferObject\TransferGenerator\Definition\Validator\Content\Property\CollectionTypePropertyValidator; use Picamator\TransferObject\TransferGenerator\Definition\Validator\Content\Property\DateTimeTypePropertyValidator; use Picamator\TransferObject\TransferGenerator\Definition\Validator\Content\Property\EnumTypePropertyValidator; @@ -62,7 +62,7 @@ protected function createPropertyValidators(): ArrayObject $this->createReservedNamePropertyValidator(), $this->createNamePropertyValidator(), $this->createRequiredTypePropertyValidator(), - $this->createBuildInTypePropertyValidator(), + $this->createBuiltInTypePropertyValidator(), $this->createTransferTypePropertyValidator(), $this->createCollectionTypePropertyValidator(), $this->createEnumTypePropertyValidator(), @@ -108,9 +108,9 @@ protected function createTransferTypePropertyValidator(): PropertyValidatorInter ); } - protected function createBuildInTypePropertyValidator(): PropertyValidatorInterface + protected function createBuiltInTypePropertyValidator(): PropertyValidatorInterface { - return new BuildInTypePropertyValidator(); + return new BuiltInTypePropertyValidator(); } protected function createRequiredTypePropertyValidator(): PropertyValidatorInterface diff --git a/src/TransferGenerator/Generator/Render/Expander/BuildInTypeTemplateExpander.php b/src/TransferGenerator/Generator/Render/Expander/BuiltInTypeTemplateExpander.php similarity index 84% rename from src/TransferGenerator/Generator/Render/Expander/BuildInTypeTemplateExpander.php rename to src/TransferGenerator/Generator/Render/Expander/BuiltInTypeTemplateExpander.php index a2e20a18..19493dfb 100644 --- a/src/TransferGenerator/Generator/Render/Expander/BuildInTypeTemplateExpander.php +++ b/src/TransferGenerator/Generator/Render/Expander/BuiltInTypeTemplateExpander.php @@ -4,39 +4,39 @@ namespace Picamator\TransferObject\TransferGenerator\Generator\Render\Expander; -use Picamator\TransferObject\TransferGenerator\Definition\Enum\BuildInTypeEnum; +use Picamator\TransferObject\TransferGenerator\Definition\Enum\BuiltInTypeEnum; use Picamator\TransferObject\TransferGenerator\Generator\Enum\DocBlockTemplateEnum; use Picamator\TransferObject\TransferGenerator\Generator\Enum\InitiatorAttributeEnum; use Picamator\TransferObject\TransferGenerator\Generator\Enum\TransformerAttributeEnum; use Picamator\TransferObject\Generated\DefinitionPropertyTransfer; use Picamator\TransferObject\Generated\TemplateTransfer; -final class BuildInTypeTemplateExpander extends AbstractTemplateExpander +final class BuiltInTypeTemplateExpander extends AbstractTemplateExpander { use TemplateExpanderTrait; protected function isApplicable(DefinitionPropertyTransfer $propertyTransfer): bool { - return $propertyTransfer->buildInType !== null; + return $propertyTransfer->builtInType !== null; } protected function handleExpander( DefinitionPropertyTransfer $propertyTransfer, TemplateTransfer $templateTransfer, ): void { - /** @var \Picamator\TransferObject\Generated\DefinitionBuildInTypeTransfer $buildInTypeTransfer */ - $buildInTypeTransfer = $propertyTransfer->buildInType; + /** @var \Picamator\TransferObject\Generated\DefinitionBuiltInTypeTransfer $builtInTypeTransfer */ + $builtInTypeTransfer = $propertyTransfer->builtInType; $propertyName = $propertyTransfer->propertyName; - $templateTransfer->properties[$propertyName] = $buildInTypeTransfer->name->value; + $templateTransfer->properties[$propertyName] = $builtInTypeTransfer->name->value; - if ($buildInTypeTransfer->name->isArrayObject()) { + if ($builtInTypeTransfer->name->isArrayObject()) { $this->expandArrayObjectType($propertyTransfer, $templateTransfer); return; } - if ($buildInTypeTransfer->name->isArray()) { + if ($builtInTypeTransfer->name->isArray()) { $this->expandArrayType($propertyTransfer, $templateTransfer); } } @@ -62,7 +62,7 @@ private function expandArrayObjectType( DefinitionPropertyTransfer $propertyTransfer, TemplateTransfer $templateTransfer, ): void { - $this->expandImports(BuildInTypeEnum::ARRAY_OBJECT->value, $templateTransfer); + $this->expandImports(BuiltInTypeEnum::ARRAY_OBJECT->value, $templateTransfer); $this->expandInitiatorAttribute( propertyTransfer: $propertyTransfer, @@ -88,7 +88,7 @@ private function expandDocBlocs( DocBlockTemplateEnum $docBlockEnum, TemplateTransfer $templateTransfer, ): void { - $docBlock = $propertyTransfer->buildInType?->docBlock; + $docBlock = $propertyTransfer->builtInType?->docBlock; $propertyName = $propertyTransfer->propertyName; $templateTransfer->docBlocks[$propertyName] = $docBlockEnum->renderTemplate($docBlock); diff --git a/src/TransferGenerator/Generator/Render/Expander/CollectionTypeTemplateExpander.php b/src/TransferGenerator/Generator/Render/Expander/CollectionTypeTemplateExpander.php index 52449d82..2a13243e 100644 --- a/src/TransferGenerator/Generator/Render/Expander/CollectionTypeTemplateExpander.php +++ b/src/TransferGenerator/Generator/Render/Expander/CollectionTypeTemplateExpander.php @@ -7,7 +7,7 @@ use Picamator\TransferObject\Generated\DefinitionEmbeddedTypeTransfer; use Picamator\TransferObject\Generated\DefinitionPropertyTransfer; use Picamator\TransferObject\Generated\TemplateTransfer; -use Picamator\TransferObject\TransferGenerator\Definition\Enum\BuildInTypeEnum; +use Picamator\TransferObject\TransferGenerator\Definition\Enum\BuiltInTypeEnum; use Picamator\TransferObject\TransferGenerator\Generator\Enum\InitiatorAttributeEnum; use Picamator\TransferObject\TransferGenerator\Generator\Enum\TransformerAttributeTemplateEnum; use Picamator\TransferObject\TransferGenerator\Generator\Enum\DocBlockTemplateEnum; @@ -27,13 +27,13 @@ protected function handleExpander( DefinitionPropertyTransfer $propertyTransfer, TemplateTransfer $templateTransfer, ): void { - $this->expandImports(BuildInTypeEnum::ARRAY_OBJECT->value, $templateTransfer); + $this->expandImports(BuiltInTypeEnum::ARRAY_OBJECT->value, $templateTransfer); /** @var \Picamator\TransferObject\Generated\DefinitionEmbeddedTypeTransfer $typeTransfer */ $typeTransfer = $propertyTransfer->collectionType; $propertyName = $propertyTransfer->propertyName; - $templateTransfer->properties[$propertyName] = BuildInTypeEnum::ARRAY_OBJECT->value; + $templateTransfer->properties[$propertyName] = BuiltInTypeEnum::ARRAY_OBJECT->value; $templateTransfer->docBlocks[$propertyName] = $this->getPropertyDocBlock($typeTransfer); $this->expandInitiatorAttribute( diff --git a/src/TransferGenerator/Generator/Render/RenderFactory.php b/src/TransferGenerator/Generator/Render/RenderFactory.php index 9cab60b7..f4c96267 100644 --- a/src/TransferGenerator/Generator/Render/RenderFactory.php +++ b/src/TransferGenerator/Generator/Render/RenderFactory.php @@ -8,7 +8,7 @@ use Picamator\TransferObject\Shared\Initializer\LazyGhostInitializerTrait; use Picamator\TransferObject\TransferGenerator\Config\ConfigFactoryTrait; use Picamator\TransferObject\TransferGenerator\Generator\Render\Expander\AttributesTemplateExpander; -use Picamator\TransferObject\TransferGenerator\Generator\Render\Expander\BuildInTypeTemplateExpander; +use Picamator\TransferObject\TransferGenerator\Generator\Render\Expander\BuiltInTypeTemplateExpander; use Picamator\TransferObject\TransferGenerator\Generator\Render\Expander\CollectionTypeTemplateExpander; use Picamator\TransferObject\TransferGenerator\Generator\Render\Expander\DateTimeTypeTemplateExpander; use Picamator\TransferObject\TransferGenerator\Generator\Render\Expander\EnumTypeTemplateExpander; @@ -69,7 +69,7 @@ protected function createTemplateExpander(): TemplateExpanderInterface $templateExpander ->setNextExpander($this->createTransferTypeTemplateExpander()) - ->setNextExpander($this->createBuildInTypeTemplateExpander()) + ->setNextExpander($this->createBuiltInTypeTemplateExpander()) ->setNextExpander($this->createEnumTypeTemplateExpander()) ->setNextExpander($this->createNamespaceTemplateExpander()) ->setNextExpander($this->createMetaConstantsTemplateExpander()) @@ -122,9 +122,9 @@ protected function createEnumTypeTemplateExpander(): TemplateExpanderInterface return new EnumTypeTemplateExpander(); } - protected function createBuildInTypeTemplateExpander(): TemplateExpanderInterface + protected function createBuiltInTypeTemplateExpander(): TemplateExpanderInterface { - return new BuildInTypeTemplateExpander(); + return new BuiltInTypeTemplateExpander(); } protected function createTransferTypeTemplateExpander(): TemplateExpanderInterface diff --git a/tests/unit/DefinitionGenerator/Content/Expander/BuildInTypeBuilderExpanderTest.php b/tests/unit/DefinitionGenerator/Content/Expander/BuiltInTypeBuilderExpanderTest.php similarity index 90% rename from tests/unit/DefinitionGenerator/Content/Expander/BuildInTypeBuilderExpanderTest.php rename to tests/unit/DefinitionGenerator/Content/Expander/BuiltInTypeBuilderExpanderTest.php index 845256d1..54d179ad 100644 --- a/tests/unit/DefinitionGenerator/Content/Expander/BuildInTypeBuilderExpanderTest.php +++ b/tests/unit/DefinitionGenerator/Content/Expander/BuiltInTypeBuilderExpanderTest.php @@ -10,19 +10,19 @@ use Picamator\TransferObject\DefinitionGenerator\Content\Builder\Content; use Picamator\TransferObject\DefinitionGenerator\Content\Enum\GetTypeEnum; use Picamator\TransferObject\DefinitionGenerator\Content\Expander\BuilderExpanderInterface; -use Picamator\TransferObject\DefinitionGenerator\Content\Expander\BuildInTypeBuilderExpander; +use Picamator\TransferObject\DefinitionGenerator\Content\Expander\BuiltInTypeBuilderExpander; use Picamator\TransferObject\DefinitionGenerator\Exception\DefinitionGeneratorException; use Picamator\TransferObject\Generated\DefinitionBuilderTransfer; use stdClass; #[Group('definition-generator')] -class BuildInTypeBuilderExpanderTest extends TestCase +class BuiltInTypeBuilderExpanderTest extends TestCase { private BuilderExpanderInterface $expander; protected function setUp(): void { - $this->expander = new BuildInTypeBuilderExpander(); + $this->expander = new BuiltInTypeBuilderExpander(); } #[TestDox('Unsupported type should throw exception')] diff --git a/tests/unit/DefinitionGenerator/Generator/Render/DefinitionRenderTest.php b/tests/unit/DefinitionGenerator/Generator/Render/DefinitionRenderTest.php index c608f148..46641eb1 100644 --- a/tests/unit/DefinitionGenerator/Generator/Render/DefinitionRenderTest.php +++ b/tests/unit/DefinitionGenerator/Generator/Render/DefinitionRenderTest.php @@ -13,7 +13,7 @@ use Picamator\TransferObject\DefinitionGenerator\Exception\DefinitionGeneratorException; use Picamator\TransferObject\DefinitionGenerator\Generator\Render\TemplateRender; use Picamator\TransferObject\DefinitionGenerator\Generator\Render\TemplateRenderInterface; -use Picamator\TransferObject\Generated\DefinitionBuildInTypeTransfer; +use Picamator\TransferObject\Generated\DefinitionBuiltInTypeTransfer; use Picamator\TransferObject\Generated\DefinitionContentTransfer; use Picamator\TransferObject\Generated\DefinitionEmbeddedTypeTransfer; use Picamator\TransferObject\Generated\DefinitionPropertyTransfer; @@ -66,8 +66,8 @@ public static function successfulRenderDataProvider(): Generator yield 'transfer object with build in property type' => [ 'propertyData' => [ DefinitionPropertyTransfer::PROPERTY_NAME_PROP => 'testProperty', - DefinitionPropertyTransfer::BUILD_IN_TYPE_PROP => [ - DefinitionBuildInTypeTransfer::NAME_PROP => 'string', + DefinitionPropertyTransfer::BUILT_IN_TYPE_PROP => [ + DefinitionBuiltInTypeTransfer::NAME_PROP => 'string', ], ], 'expected' => <<<'DEFINITION'