Skip to content

Commit 409debf

Browse files
committed
Move transforming filter serialization methods to SerializationPostProcessor
1 parent 469b733 commit 409debf

File tree

5 files changed

+68
-85
lines changed

5 files changed

+68
-85
lines changed

src/Model/Property/Serializer/TransformingFilterSerializer.php

Lines changed: 0 additions & 73 deletions
This file was deleted.

src/Model/Validator/FilterValidator.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ class FilterValidator extends PropertyTemplateValidator
2424
{
2525
/** @var FilterInterface $filter */
2626
protected $filter;
27+
/** @var array */
28+
protected $filterOptions;
2729

2830
/**
2931
* FilterValidator constructor.
@@ -45,6 +47,7 @@ public function __construct(
4547
?TransformingFilterInterface $transformingFilter = null
4648
) {
4749
$this->filter = $filter;
50+
$this->filterOptions = $filterOptions;
4851

4952
$transformingFilter === null
5053
? $this->validateFilterCompatibilityWithBaseType($filter, $property)
@@ -199,4 +202,20 @@ private function mapDataTypes(array $acceptedTypes): array
199202
}
200203
}, $acceptedTypes);
201204
}
205+
206+
/**
207+
* @return FilterInterface
208+
*/
209+
public function getFilter(): FilterInterface
210+
{
211+
return $this->filter;
212+
}
213+
214+
/**
215+
* @return array
216+
*/
217+
public function getFilterOptions(): array
218+
{
219+
return $this->filterOptions;
220+
}
202221
}

src/PropertyProcessor/Filter/FilterProcessor.php

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -100,18 +100,6 @@ public function process(
100100
if (!$typeAfterFilter->isBuiltin()) {
101101
$schema->addUsedClass($typeAfterFilter->getName());
102102
}
103-
104-
if ($generatorConfiguration->hasSerializationEnabled()) {
105-
$schema->addMethod(
106-
"serialize{$property->getAttribute()}",
107-
new TransformingFilterSerializer(
108-
$property->getAttribute(),
109-
$filter,
110-
$filterOptions,
111-
$generatorConfiguration
112-
)
113-
);
114-
}
115103
}
116104
}
117105
}

src/SchemaProcessor/PostProcessor/SerializationPostProcessor.php

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@
77
use JsonSerializable;
88
use PHPModelGenerator\Interfaces\SerializationInterface;
99
use PHPModelGenerator\Model\GeneratorConfiguration;
10+
use PHPModelGenerator\Model\Property\Serializer\TransformingFilterSerializer;
1011
use PHPModelGenerator\Model\Schema;
12+
use PHPModelGenerator\Model\Validator\FilterValidator;
13+
use PHPModelGenerator\PropertyProcessor\Filter\TransformingFilterInterface;
1114
use PHPModelGenerator\Traits\SerializableTrait;
1215

1316
/**
@@ -17,11 +20,57 @@
1720
*/
1821
class SerializationPostProcessor implements PostProcessorInterface
1922
{
23+
/**
24+
* Add serialization support to the provided schema
25+
*
26+
* @param Schema $schema
27+
* @param GeneratorConfiguration $generatorConfiguration
28+
*/
2029
public function process(Schema $schema, GeneratorConfiguration $generatorConfiguration): void
2130
{
2231
$schema
2332
->addTrait(SerializableTrait::class)
2433
->addInterface(JsonSerializable::class)
2534
->addInterface(SerializationInterface::class);
35+
36+
$this->addSerializeFunctionsForTransformingFilters($schema, $generatorConfiguration);
37+
}
38+
39+
/**
40+
* Each transforming filter must provide a method to serialize the value. Add a method to the schema to call the
41+
* serialization for each property with a transforming filter
42+
*
43+
* @param Schema $schema
44+
* @param GeneratorConfiguration $generatorConfiguration
45+
*/
46+
private function addSerializeFunctionsForTransformingFilters(
47+
Schema $schema,
48+
GeneratorConfiguration $generatorConfiguration
49+
): void {
50+
foreach ($schema->getProperties() as $property) {
51+
foreach ($property->getValidators() as $validator) {
52+
$validator = $validator->getValidator();
53+
54+
if ($validator instanceof FilterValidator &&
55+
$validator->getFilter() instanceof TransformingFilterInterface
56+
) {
57+
$schema->addMethod(
58+
"serialize{$property->getAttribute()}",
59+
new RenderedMethod(
60+
$schema,
61+
$generatorConfiguration,
62+
'TransformingFilterSerializer.phptpl',
63+
[
64+
65+
'property' => $property->getAttribute(),
66+
'serializerClass' => $validator->getFilter()->getSerializer()[0],
67+
'serializerMethod' => $validator->getFilter()->getSerializer()[1],
68+
'serializerOptions' => var_export($validator->getFilterOptions(), true),
69+
]
70+
)
71+
);
72+
}
73+
}
74+
}
2675
}
2776
}

0 commit comments

Comments
 (0)