Skip to content

Commit 65b2466

Browse files
authored
Merge pull request #29 from picamator/development
Release 2.2.3
2 parents 7d88bda + 7fe84ca commit 65b2466

25 files changed

Lines changed: 216 additions & 166 deletions

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ Definition Files and Transfer Object generators have been tested against the fol
122122
4. Transfer Object is converted back to the array
123123
5. The converted array is compared with the API response
124124

125-
✅ In all cases, data are matched.
125+
For all APIs, data are matched.
126126

127127
For detailed information, please check [DefinitionGeneratorFacadeTest](/tests/integration/DefinitionGenerator/DefinitionGeneratorFacadeTest.php).
128128

@@ -134,12 +134,12 @@ For more details, please visit [project's wiki](https://github.com/picamator/tra
134134
Acknowledgment
135135
--------------
136136

137-
Many thanks for your contribution, support, feedback and simply using the Transfer Object Generator! ❤️
137+
Many thanks ❤️ for your contribution, support, feedback and simply using the Transfer Object Generator!
138138

139139
Contribution
140140
------------
141141

142-
If you find this project useful, please star ⭐ the repository.
142+
If you find this project useful, please ⭐ star the repository.
143143
Follow the project to stay updated with all activities.
144144

145145
If you have suggestions for improvements or new features, feel free to:

composer.lock

Lines changed: 14 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

phpstan.neon

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ parameters:
1717
-
1818
identifier: encapsedStringPart.nonString
1919
path: src/TransferGenerator/Generator/Render/Template/Template.php
20+
-
21+
identifier: return.type
22+
path: src/*/*Factory.php
2023
rules:
2124
- PHPStan\Rules\DisallowedConstructs\DisallowedBacktickRule
2225
- PHPStan\Rules\StrictCalls\StrictFunctionCallsRule
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Picamator\TransferObject\DefinitionGenerator\Builder;
6+
7+
use Picamator\TransferObject\DefinitionGenerator\Builder\Expander\BuilderExpanderInterface;
8+
use Picamator\TransferObject\DefinitionGenerator\Builder\Expander\BuildInTypeBuilderExpander;
9+
use Picamator\TransferObject\DefinitionGenerator\Builder\Expander\CollectionTypeBuilderExpander;
10+
use Picamator\TransferObject\DefinitionGenerator\Builder\Expander\TransferTypeBuilderExpander;
11+
use Picamator\TransferObject\Shared\CachedFactoryTrait;
12+
13+
class DefinitionBuilderFactory
14+
{
15+
use CachedFactoryTrait;
16+
17+
public function createDefinitionBuilder(): DefinitionBuilderInterface
18+
{
19+
return $this->getCached(
20+
key: 'definition-builder',
21+
factory: fn (): DefinitionBuilderInterface => new DefinitionBuilder(
22+
$this->createDefinitionContentBuilder(),
23+
$this->createBuilderExpander(),
24+
),
25+
);
26+
}
27+
28+
protected function createDefinitionContentBuilder(): DefinitionContentBuilderInterface
29+
{
30+
return new DefinitionContentBuilder();
31+
}
32+
33+
protected function createBuilderExpander(): BuilderExpanderInterface
34+
{
35+
$builderExpander = $this->createTransferTypeBuilderExpander();
36+
37+
$builderExpander
38+
->setNextExpander($this->createCollectionTypeBuilderExpander())
39+
->setNextExpander($this->createBuildInTypeBuilderExpander());
40+
41+
return $builderExpander;
42+
}
43+
44+
protected function createBuildInTypeBuilderExpander(): BuilderExpanderInterface
45+
{
46+
return new BuildInTypeBuilderExpander();
47+
}
48+
49+
protected function createCollectionTypeBuilderExpander(): BuilderExpanderInterface
50+
{
51+
return new CollectionTypeBuilderExpander();
52+
}
53+
54+
protected function createTransferTypeBuilderExpander(): BuilderExpanderInterface
55+
{
56+
return new TransferTypeBuilderExpander();
57+
}
58+
}

src/DefinitionGenerator/Generator/DefinitionGeneratorFactory.php

Lines changed: 7 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,8 @@
55
namespace Picamator\TransferObject\DefinitionGenerator\Generator;
66

77
// phpcs:disable Generic.Files.LineLength
8-
use Picamator\TransferObject\DefinitionGenerator\Builder\DefinitionBuilder;
8+
use Picamator\TransferObject\DefinitionGenerator\Builder\DefinitionBuilderFactory;
99
use Picamator\TransferObject\DefinitionGenerator\Builder\DefinitionBuilderInterface;
10-
use Picamator\TransferObject\DefinitionGenerator\Builder\DefinitionContentBuilder;
11-
use Picamator\TransferObject\DefinitionGenerator\Builder\DefinitionContentBuilderInterface;
12-
use Picamator\TransferObject\DefinitionGenerator\Builder\Expander\BuilderExpanderInterface;
13-
use Picamator\TransferObject\DefinitionGenerator\Builder\Expander\BuildInTypeBuilderExpander;
14-
use Picamator\TransferObject\DefinitionGenerator\Builder\Expander\CollectionTypeBuilderExpander;
15-
use Picamator\TransferObject\DefinitionGenerator\Builder\Expander\TransferTypeBuilderExpander;
1610
use Picamator\TransferObject\DefinitionGenerator\Generator\Builder\DefinitionGeneratorBuilder;
1711
use Picamator\TransferObject\DefinitionGenerator\Generator\Builder\DefinitionGeneratorBuilderInterface;
1812
use Picamator\TransferObject\DefinitionGenerator\Generator\Filesystem\DefinitionFilesystem;
@@ -37,9 +31,10 @@ class DefinitionGeneratorFactory
3731
use SharedFactoryTrait;
3832
use CachedFactoryTrait;
3933

34+
private static DefinitionBuilderFactory $definitionBuilderFactory;
35+
4036
public function createDefinitionGeneratorService(): DefinitionGeneratorServiceInterface
4137
{
42-
/** @phpstan-ignore return.type */
4338
return $this->getCached(
4439
key: 'definition-generator-service',
4540
factory: fn (): DefinitionGeneratorServiceInterface => new DefinitionGeneratorService(
@@ -50,7 +45,6 @@ public function createDefinitionGeneratorService(): DefinitionGeneratorServiceIn
5045

5146
public function createDefinitionGeneratorBuilder(): DefinitionGeneratorBuilderInterface
5247
{
53-
/** @phpstan-ignore return.type */
5448
return $this->getCached(
5549
key: 'definition-generator-builder',
5650
factory: fn (): DefinitionGeneratorBuilderInterface => new DefinitionGeneratorBuilder(
@@ -96,7 +90,6 @@ protected function createPreDefinitionProcessCommand(): PreDefinitionProcessComm
9690

9791
protected function createDefinitionFilesystem(): DefinitionFilesystemInterface
9892
{
99-
/** @phpstan-ignore return.type */
10093
return $this->getCached(
10194
key: 'definition-filesystem',
10295
factory: fn (): DefinitionFilesystemInterface => new DefinitionFilesystem(
@@ -108,7 +101,6 @@ protected function createDefinitionFilesystem(): DefinitionFilesystemInterface
108101

109102
protected function createDefinitionRender(): DefinitionRenderInterface
110103
{
111-
/** @phpstan-ignore return.type */
112104
return $this->getCached(
113105
key: 'definition-render',
114106
factory: fn (): DefinitionRenderInterface => new DefinitionRender()
@@ -117,40 +109,12 @@ protected function createDefinitionRender(): DefinitionRenderInterface
117109

118110
protected function createDefinitionBuilder(): DefinitionBuilderInterface
119111
{
120-
return new DefinitionBuilder(
121-
$this->createDefinitionContentBuilder(),
122-
$this->createBuilderExpander(),
123-
);
124-
}
125-
126-
protected function createDefinitionContentBuilder(): DefinitionContentBuilderInterface
127-
{
128-
return new DefinitionContentBuilder();
129-
}
130-
131-
protected function createBuilderExpander(): BuilderExpanderInterface
132-
{
133-
$builderExpander = $this->createTransferTypeBuilderExpander();
134-
135-
$builderExpander
136-
->setNextExpander($this->createCollectionTypeBuilderExpander())
137-
->setNextExpander($this->createBuildInTypeBuilderExpander());
138-
139-
return $builderExpander;
140-
}
141-
142-
protected function createBuildInTypeBuilderExpander(): BuilderExpanderInterface
143-
{
144-
return new BuildInTypeBuilderExpander();
145-
}
146-
147-
protected function createCollectionTypeBuilderExpander(): BuilderExpanderInterface
148-
{
149-
return new CollectionTypeBuilderExpander();
112+
return $this->getDefinitionBuilderFactory()
113+
->createDefinitionBuilder();
150114
}
151115

152-
protected function createTransferTypeBuilderExpander(): BuilderExpanderInterface
116+
protected function getDefinitionBuilderFactory(): DefinitionBuilderFactory
153117
{
154-
return new TransferTypeBuilderExpander();
118+
return self::$definitionBuilderFactory ??= new DefinitionBuilderFactory();
155119
}
156120
}

src/TransferGenerator/Config/ConfigFactory.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ class ConfigFactory
3636

3737
public function createConfigLoader(): ConfigLoaderInterface
3838
{
39-
/** @phpstan-ignore return.type */
4039
return $this->getCached(
4140
key: 'config-loader',
4241
factory: fn(): ConfigLoaderInterface =>

src/TransferGenerator/Definition/DefinitionFactory.php

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
namespace Picamator\TransferObject\TransferGenerator\Definition;
66

77
use Picamator\TransferObject\Shared\CachedFactoryTrait;
8+
use Picamator\TransferObject\Shared\SharedFactoryTrait;
9+
use Picamator\TransferObject\TransferGenerator\Config\ConfigFactoryTrait;
10+
use Picamator\TransferObject\TransferGenerator\Definition\Filesystem\DefinitionFinder;
811
use Picamator\TransferObject\TransferGenerator\Definition\Filesystem\DefinitionFinderInterface;
912
use Picamator\TransferObject\TransferGenerator\Definition\Parser\DefinitionParserInterface;
1013
use Picamator\TransferObject\TransferGenerator\Definition\Parser\ParserFactory;
@@ -15,6 +18,8 @@
1518

1619
class DefinitionFactory
1720
{
21+
use ConfigFactoryTrait;
22+
use SharedFactoryTrait;
1823
use CachedFactoryTrait;
1924

2025
private static ValidatorFactory $validatorFactory;
@@ -23,7 +28,6 @@ class DefinitionFactory
2328

2429
public function createDefinitionReader(): DefinitionReaderInterface
2530
{
26-
/** @phpstan-ignore return.type */
2731
return $this->getCached(
2832
key: 'definition-reader',
2933
factory: fn (): DefinitionReaderInterface =>
@@ -42,7 +46,10 @@ protected function createDefinitionValidator(): DefinitionValidatorInterface
4246

4347
protected function createDefinitionFinder(): DefinitionFinderInterface
4448
{
45-
return $this->getParserFactory()->createDefinitionFinder();
49+
return new DefinitionFinder(
50+
$this->getFinder(),
51+
$this->getConfig(),
52+
);
4653
}
4754

4855
protected function createDefinitionParser(): DefinitionParserInterface

src/TransferGenerator/Definition/Enum/TypeSuffixEnum.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,9 @@
77
enum TypeSuffixEnum: string
88
{
99
case TRANSFER = 'Transfer';
10+
11+
public function getClassName(string $className): string
12+
{
13+
return $className . $this->value;
14+
}
1015
}

src/TransferGenerator/Definition/Parser/ContentBuilder.php

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
readonly class ContentBuilder implements ContentBuilderInterface
1313
{
14+
private const TypeSuffixEnum CLASS_SUFFIX = TypeSuffixEnum::TRANSFER;
15+
1416
public function __construct(
1517
private PropertyExpanderInterface $propertyExpander,
1618
) {
@@ -19,7 +21,7 @@ public function __construct(
1921
public function createContentTransfer(string $className, array $properties): DefinitionContentTransfer
2022
{
2123
$contentTransfer = new DefinitionContentTransfer();
22-
$contentTransfer->className = $this->getTransferClassName($className);
24+
$contentTransfer->className = self::CLASS_SUFFIX->getClassName($className);
2325

2426
foreach ($properties as $propertyName => $propertyType) {
2527
$contentTransfer->properties[] = $this->createPropertyTransfer((string)$propertyName, $propertyType);
@@ -40,9 +42,4 @@ private function createPropertyTransfer(string $propertyName, array $propertyTyp
4042

4143
return $propertyTransfer;
4244
}
43-
44-
private function getTransferClassName(string $className): string
45-
{
46-
return $className . TypeSuffixEnum::TRANSFER->value;
47-
}
4845
}

src/TransferGenerator/Definition/Parser/Expander/AbstractPropertyExpander.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,18 @@ public function setNextExpander(PropertyExpanderInterface $expander): PropertyEx
1919

2020
public function expandPropertyTransfer(array $propertyType, DefinitionPropertyTransfer $propertyTransfer): void
2121
{
22-
$this->handleExpander($propertyType, $propertyTransfer);
22+
$matchedType = $this->matchType($propertyType);
23+
if ($matchedType !== null) {
24+
$this->handleExpander($matchedType, $propertyTransfer);
25+
}
2326

2427
$this->nextExpander?->expandPropertyTransfer($propertyType, $propertyTransfer);
2528
}
2629

2730
/**
2831
* @param array<string,string|null> $propertyType
2932
*/
30-
abstract protected function handleExpander(array $propertyType, DefinitionPropertyTransfer $propertyTransfer): void;
33+
abstract protected function matchType(array $propertyType): ?string;
34+
35+
abstract protected function handleExpander(string $matchedType, DefinitionPropertyTransfer $propertyTransfer): void;
3136
}

0 commit comments

Comments
 (0)