Skip to content

Commit 0826353

Browse files
authored
save work (#23)
1 parent 8936bbe commit 0826353

10 files changed

+114
-43
lines changed

phpstan.neon

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,4 @@ parameters:
55
ignoreErrors:
66
- "#Call to function token_get_all\\(\\) on a separate line has no effect.#"
77
- "#Strict comparison using === between non-empty-array<int, mixed> and ',' will always evaluate to false.#"
8-
- "#Strict comparison using === between non-empty-array<int, mixed> and ';' will always evaluate to false.#"
9-
- "#Method PhpKafka\\\\\\PhpAvroSchemaGenerator\\\\\\Optimizer\\\\\\OptimizerInterface::optimize\\(\\) invoked with 2 parameters, 1 required.#"
8+
- "#Strict comparison using === between non-empty-array<int, mixed> and ';' will always evaluate to false.#"

src/Merger/SchemaMerger.php

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -126,16 +126,12 @@ public function merge(
126126
$resolvedTemplate = $this->getResolvedSchemaTemplate($rootSchemaTemplate);
127127

128128
foreach ($this->optimizers as $optimizer) {
129-
$resolvedTemplate = $resolvedTemplate->withSchemaDefinition(
130-
$optimizer->optimize(
131-
$resolvedTemplate->getSchemaDefinition(),
132-
$resolvedTemplate->isPrimitive()
133-
)
134-
);
129+
$resolvedTemplate = $optimizer->optimize($resolvedTemplate);
135130
}
136131
} catch (SchemaMergerException $e) {
137132
throw $e;
138133
}
134+
139135
$this->exportSchema($resolvedTemplate, $prefixWithNamespace, $useTemplateName);
140136

141137
++$mergedFiles;

src/Optimizer/FieldOrderOptimizer.php

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,22 @@
44

55
namespace PhpKafka\PhpAvroSchemaGenerator\Optimizer;
66

7+
use PhpKafka\PhpAvroSchemaGenerator\Schema\SchemaTemplateInterface;
8+
79
class FieldOrderOptimizer extends AbstractOptimizer implements OptimizerInterface
810
{
911
/**
10-
* @param string $definition
11-
* @return string
12+
* @param SchemaTemplateInterface $schemaTemplate
13+
* @return SchemaTemplateInterface
1214
* @throws \JsonException
1315
*/
14-
public function optimize(string $definition): string
16+
public function optimize(SchemaTemplateInterface $schemaTemplate): SchemaTemplateInterface
1517
{
16-
$data = json_decode($definition, true, JSON_THROW_ON_ERROR);
18+
$data = json_decode($schemaTemplate->getSchemaDefinition(), true, JSON_THROW_ON_ERROR);
1719

1820
$data = $this->processSchema($data);
1921

20-
return json_encode($data, JSON_THROW_ON_ERROR);
22+
return $schemaTemplate->withSchemaDefinition(json_encode($data, JSON_THROW_ON_ERROR));
2123
}
2224

2325
/**

src/Optimizer/FullNameOptimizer.php

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,23 @@
44

55
namespace PhpKafka\PhpAvroSchemaGenerator\Optimizer;
66

7+
use PhpKafka\PhpAvroSchemaGenerator\Schema\SchemaTemplateInterface;
8+
79
class FullNameOptimizer extends AbstractOptimizer implements OptimizerInterface
810
{
911
/**
10-
* @param string $definition
11-
* @return string
12+
* @param SchemaTemplateInterface $schemaTemplate
13+
* @return SchemaTemplateInterface
1214
* @throws \JsonException
1315
*/
14-
public function optimize(string $definition): string
16+
public function optimize(SchemaTemplateInterface $schemaTemplate): SchemaTemplateInterface
1517
{
16-
$data = json_decode($definition, true, JSON_THROW_ON_ERROR);
18+
$data = json_decode($schemaTemplate->getSchemaDefinition(), true, JSON_THROW_ON_ERROR);
1719

1820
$currentNamespace = $data['namespace'] ?? '';
1921
$data = $this->processSchema($currentNamespace, $data, true);
2022

21-
return json_encode($data, JSON_THROW_ON_ERROR);
23+
return $schemaTemplate->withSchemaDefinition(json_encode($data, JSON_THROW_ON_ERROR));
2224
}
2325

2426
/**

src/Optimizer/OptimizerInterface.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@
44

55
namespace PhpKafka\PhpAvroSchemaGenerator\Optimizer;
66

7+
use PhpKafka\PhpAvroSchemaGenerator\Schema\SchemaTemplateInterface;
8+
79
interface OptimizerInterface
810
{
911
/**
10-
* @param string $definition
11-
* @return string
12+
* @param SchemaTemplateInterface $schemaTemplate
13+
* @return SchemaTemplateInterface
1214
*/
13-
public function optimize(string $definition): string;
15+
public function optimize(SchemaTemplateInterface $schemaTemplate): SchemaTemplateInterface;
1416
}

src/Optimizer/PrimitiveSchemaOptimizer.php

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,26 @@
44

55
namespace PhpKafka\PhpAvroSchemaGenerator\Optimizer;
66

7+
use PhpKafka\PhpAvroSchemaGenerator\Schema\SchemaTemplateInterface;
8+
79
class PrimitiveSchemaOptimizer extends AbstractOptimizer implements OptimizerInterface
810
{
911
/**
10-
* @param string $definition
11-
* @param bool $isPrimitive
12-
* @return string
12+
* @param SchemaTemplateInterface $schemaTemplate
13+
* @return SchemaTemplateInterface
1314
* @throws \JsonException
1415
*/
15-
public function optimize(string $definition, bool $isPrimitive = false): string
16+
public function optimize(SchemaTemplateInterface $schemaTemplate): SchemaTemplateInterface
1617
{
17-
if (false === $isPrimitive) {
18-
return $definition;
18+
if (false === $schemaTemplate->isPrimitive()) {
19+
return $schemaTemplate;
1920
}
2021

21-
$data = json_decode($definition, true, JSON_THROW_ON_ERROR);
22+
$data = json_decode($schemaTemplate->getSchemaDefinition(), true, JSON_THROW_ON_ERROR);
2223

2324
$data = $this->processSchema($data);
2425

25-
return json_encode($data, JSON_THROW_ON_ERROR);
26+
return $schemaTemplate->withSchemaDefinition(json_encode($data, JSON_THROW_ON_ERROR));
2627
}
2728

2829
/**

tests/Unit/Merger/SchemaMergerTest.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -385,11 +385,11 @@ public function testMerge()
385385

386386
$schemaTemplate = $this->getMockForAbstractClass(SchemaTemplateInterface::class);
387387
$schemaTemplate
388-
->expects(self::exactly(3))
388+
->expects(self::exactly(2))
389389
->method('getSchemaDefinition')
390390
->willReturn($definition);
391391
$schemaTemplate
392-
->expects(self::exactly(2))
392+
->expects(self::exactly(1))
393393
->method('withSchemaDefinition')
394394
->with($definition)
395395
->willReturn($schemaTemplate);
@@ -400,7 +400,7 @@ public function testMerge()
400400
->method('getRootSchemas')
401401
->willReturn([$schemaTemplate]);
402402
$optimizer = $this->getMockForAbstractClass(OptimizerInterface::class);
403-
$optimizer->expects(self::once())->method('optimize')->with($definition)->willReturn($definition);
403+
$optimizer->expects(self::once())->method('optimize')->with($schemaTemplate)->willReturn($schemaTemplate);
404404
$merger = new SchemaMerger($schemaRegistry, '/tmp/foobar');
405405
$merger->addOptimizer($optimizer);
406406
$mergedFiles = $merger->merge(true);
@@ -453,11 +453,11 @@ public function testMergePrimitiveWithOptimizerEnabled()
453453

454454
$schemaTemplate = $this->getMockForAbstractClass(SchemaTemplateInterface::class);
455455
$schemaTemplate
456-
->expects(self::exactly(3))
456+
->expects(self::exactly(2))
457457
->method('getSchemaDefinition')
458458
->willReturn($definition);
459459
$schemaTemplate
460-
->expects(self::exactly(2))
460+
->expects(self::exactly(1))
461461
->method('withSchemaDefinition')
462462
->with($definition)
463463
->willReturn($schemaTemplate);
@@ -466,7 +466,7 @@ public function testMergePrimitiveWithOptimizerEnabled()
466466
->method('getFilename')
467467
->willReturn('primitive-type.avsc');
468468
$schemaTemplate
469-
->expects(self::exactly(3))
469+
->expects(self::exactly(2))
470470
->method('isPrimitive')
471471
->willReturn(true);
472472

@@ -476,7 +476,7 @@ public function testMergePrimitiveWithOptimizerEnabled()
476476
->method('getRootSchemas')
477477
->willReturn([$schemaTemplate]);
478478
$optimizer = $this->getMockBuilder(PrimitiveSchemaOptimizer::class)->getMock();
479-
$optimizer->expects(self::once())->method('optimize')->with($definition, true)->willReturn($definition);
479+
$optimizer->expects(self::once())->method('optimize')->with($schemaTemplate)->willReturn($schemaTemplate);
480480
$merger = new SchemaMerger($schemaRegistry, '/tmp/foobar');
481481
$merger->addOptimizer($optimizer);
482482
$merger->merge(true);

tests/Unit/Optimizer/FieldOrderOptimizerTest.php

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace PhpKafka\PhpAvroSchemaGenerator\Tests\Unit\Optimizer;
66

77
use PhpKafka\PhpAvroSchemaGenerator\Optimizer\FieldOrderOptimizer;
8+
use PhpKafka\PhpAvroSchemaGenerator\Schema\SchemaTemplateInterface;
89
use PHPUnit\Framework\TestCase;
910

1011
class FieldOrderOptimizerTest extends TestCase
@@ -203,8 +204,20 @@ public function testOptimize(): void
203204
]
204205
}'));
205206

207+
$schemaTemplate = $this->getMockForAbstractClass(SchemaTemplateInterface::class);
208+
$schemaTemplate
209+
->expects(self::once())
210+
->method('getSchemaDefinition')
211+
->willReturn($schema);
212+
213+
$schemaTemplate
214+
->expects(self::once())
215+
->method('withSchemaDefinition')
216+
->with($expectedResult)
217+
->willReturn($schemaTemplate);
218+
206219
$optimizer = new FieldOrderOptimizer();
207220

208-
self::assertEquals($expectedResult, $optimizer->optimize($schema));
221+
self::assertInstanceOf(SchemaTemplateInterface::class, $optimizer->optimize($schemaTemplate));
209222
}
210223
}

tests/Unit/Optimizer/FullNameOptimizerTest.php

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace PhpKafka\PhpAvroSchemaGenerator\Tests\Unit\Optimizer;
66

77
use PhpKafka\PhpAvroSchemaGenerator\Optimizer\FullNameOptimizer;
8+
use PhpKafka\PhpAvroSchemaGenerator\Schema\SchemaTemplateInterface;
89
use PHPUnit\Framework\TestCase;
910

1011
class FullNameOptimizerTest extends TestCase
@@ -160,8 +161,21 @@ public function testOptimize(): void
160161
]
161162
}'));
162163

164+
165+
$schemaTemplate = $this->getMockForAbstractClass(SchemaTemplateInterface::class);
166+
$schemaTemplate
167+
->expects(self::once())
168+
->method('getSchemaDefinition')
169+
->willReturn($schema);
170+
171+
$schemaTemplate
172+
->expects(self::once())
173+
->method('withSchemaDefinition')
174+
->with($expectedResult)
175+
->willReturn($schemaTemplate);
176+
163177
$optimizer = new FullNameOptimizer();
164178

165-
self::assertEquals($expectedResult, $optimizer->optimize($schema));
179+
self::assertInstanceOf(SchemaTemplateInterface::class, $optimizer->optimize($schemaTemplate));
166180
}
167181
}

tests/Unit/Optimizer/PrimitiveSchemaOptimizerTest.php

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace PhpKafka\PhpAvroSchemaGenerator\Tests\Unit\Optimizer;
66

77
use PhpKafka\PhpAvroSchemaGenerator\Optimizer\PrimitiveSchemaOptimizer;
8+
use PhpKafka\PhpAvroSchemaGenerator\Schema\SchemaTemplateInterface;
89
use PHPUnit\Framework\TestCase;
910

1011
class PrimitiveSchemaOptimizerTest extends TestCase
@@ -15,9 +16,27 @@ public function testOptimize(): void
1516

1617
$expectedResult = json_encode(json_decode('"string"'));
1718

19+
20+
$schemaTemplate = $this->getMockForAbstractClass(SchemaTemplateInterface::class);
21+
$schemaTemplate
22+
->expects(self::once())
23+
->method('getSchemaDefinition')
24+
->willReturn($schema);
25+
26+
$schemaTemplate
27+
->expects(self::once())
28+
->method('withSchemaDefinition')
29+
->with($expectedResult)
30+
->willReturn($schemaTemplate);
31+
32+
$schemaTemplate
33+
->expects(self::once())
34+
->method('isPrimitive')
35+
->willReturn(true);
36+
1837
$optimizer = new PrimitiveSchemaOptimizer();
1938

20-
self::assertEquals($expectedResult, $optimizer->optimize($schema, true));
39+
self::assertInstanceOf(SchemaTemplateInterface::class, $optimizer->optimize($schemaTemplate));
2140
}
2241

2342
public function testOptimizeForStringSchema(): void
@@ -26,19 +45,42 @@ public function testOptimizeForStringSchema(): void
2645

2746
$expectedResult = json_encode(json_decode('"string"'));
2847

48+
49+
$schemaTemplate = $this->getMockForAbstractClass(SchemaTemplateInterface::class);
50+
$schemaTemplate
51+
->expects(self::once())
52+
->method('getSchemaDefinition')
53+
->willReturn($schema);
54+
55+
$schemaTemplate
56+
->expects(self::once())
57+
->method('withSchemaDefinition')
58+
->with($expectedResult)
59+
->willReturn($schemaTemplate);
60+
61+
$schemaTemplate
62+
->expects(self::once())
63+
->method('isPrimitive')
64+
->willReturn(true);
65+
2966
$optimizer = new PrimitiveSchemaOptimizer();
3067

31-
self::assertEquals($expectedResult, $optimizer->optimize($schema, true));
68+
self::assertInstanceOf(SchemaTemplateInterface::class, $optimizer->optimize($schemaTemplate));
3269
}
3370

3471
public function testOptimizeForRecordSchema(): void
3572
{
36-
$schema = '{"type":"record","namespace":"com.example","name":"Book","fields":[{"name":"isbn","type":"string"}]}';
73+
$schemaTemplate = $this->getMockForAbstractClass(SchemaTemplateInterface::class);
74+
$schemaTemplate->expects(self::never())->method('getSchemaDefinition');
75+
$schemaTemplate->expects(self::never())->method('withSchemaDefinition');
3776

38-
$expectedResult = json_encode(json_decode($schema));
77+
$schemaTemplate
78+
->expects(self::once())
79+
->method('isPrimitive')
80+
->willReturn(false);
3981

4082
$optimizer = new PrimitiveSchemaOptimizer();
4183

42-
self::assertEquals($expectedResult, $optimizer->optimize($schema, false));
84+
self::assertInstanceOf(SchemaTemplateInterface::class, $optimizer->optimize($schemaTemplate));
4385
}
4486
}

0 commit comments

Comments
 (0)