Skip to content

Commit

Permalink
refactor: Transformer is now lazy-loaded.
Browse files Browse the repository at this point in the history
  • Loading branch information
priyadi committed Jan 16, 2024
1 parent 1ea5355 commit 08c0792
Show file tree
Hide file tree
Showing 6 changed files with 21 additions and 16 deletions.
4 changes: 3 additions & 1 deletion src/Command/TryCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -104,10 +104,12 @@ protected function execute(InputInterface $input, OutputInterface $output): int
->findBySourceAndTargetTypes([$sourceType], [$targetType]);

foreach ($searchResult as $entry) {
$transformer = $this->transformerRegistry->get($entry->getTransformerServiceId());

$rows[] = [
$entry->getMappingOrder(),
$entry->getTransformerServiceId(),
$entry->getTransformer()::class,
$transformer::class,
$this->typeResolver->getTypeString($entry->getSourceType()),
$this->typeResolver->getTypeString($entry->getTargetType()),
$entry->isVariantTargetType() ? 'variant' : 'invariant',
Expand Down
4 changes: 3 additions & 1 deletion src/Command/TryPropertyCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -106,11 +106,13 @@ protected function execute(InputInterface $input, OutputInterface $output): int
->findBySourceAndTargetTypes($sourceTypes, $targetTypes);

foreach ($results as $result) {
$transformer = $this->transformerRegistry->get($result->getTransformerServiceId());

$rows[] = [
$result->getMappingOrder(),
$this->typeResolver->getTypeString($result->getSourceType()),
$this->typeResolver->getTypeString($result->getTargetType()),
$result->getTransformer()::class,
$transformer::class,
];
}

Expand Down
11 changes: 7 additions & 4 deletions src/MainTransformer/MainTransformer.php
Original file line number Diff line number Diff line change
Expand Up @@ -148,10 +148,6 @@ public function transform(
}
}

// inject the main transformer to the transformer if it is
// MainTransformerAwareInterface
$transformer = $this->processTransformer($searchEntry->getTransformer());

// TransformerInterface doesn't accept MixedType, so we need to
// convert it to null

Expand Down Expand Up @@ -179,6 +175,13 @@ public function transform(
}
}

// get and prepare transformer
$transformer = $this->processTransformer(
$this->transformerRegistry->get(
$searchEntry->getTransformerServiceId()
)
);

// transform the source to the target

try {
Expand Down
7 changes: 0 additions & 7 deletions src/TransformerRegistry/SearchResultEntry.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
namespace Rekalogika\Mapper\TransformerRegistry;

use Rekalogika\Mapper\Transformer\Contracts\MixedType;
use Rekalogika\Mapper\Transformer\Contracts\TransformerInterface;
use Symfony\Component\PropertyInfo\Type;

class SearchResultEntry
Expand All @@ -23,7 +22,6 @@ public function __construct(
private int $mappingOrder,
private Type|MixedType $sourceType,
private Type|MixedType $targetType,
private TransformerInterface $transformer,
private string $transformerServiceId,
private bool $variantTargetType,
) {
Expand All @@ -39,11 +37,6 @@ public function getTargetType(): Type|MixedType
return $this->targetType;
}

public function getTransformer(): TransformerInterface
{
return $this->transformer;
}

public function getMappingOrder(): int
{
return $this->mappingOrder;
Expand Down
2 changes: 0 additions & 2 deletions src/TransformerRegistry/TransformerRegistry.php
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,6 @@ public function findBySourceAndTargetType(
mappingOrder: $mappingEntry->getOrder(),
sourceType: $sourceType,
targetType: $targetType,
transformer: $this->get($mappingEntry->getId()),
transformerServiceId: $mappingEntry->getId(),
variantTargetType: $mappingEntry->isVariantTargetType()
);
Expand All @@ -81,7 +80,6 @@ public function findBySourceAndTargetType(
mappingOrder: $mappingEntry->getOrder(),
sourceType: $sourceType,
targetType: $targetType,
transformer: $this->get($mappingEntry->getId()),
transformerServiceId: $mappingEntry->getId(),
variantTargetType: $mappingEntry->isVariantTargetType()
);
Expand Down
9 changes: 8 additions & 1 deletion tests/IntegrationTest/MappingTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,16 @@ public function testMapping(

$this->assertNotEmpty($searchResult);

$first = $searchResult[0] ?? null;
$this->assertNotNull($first);

$transformer = $this->transformerRegistry->get(
$first->getTransformerServiceId()
);

$this->assertInstanceOf(
$transformerClass,
$searchResult[0]?->getTransformer()
$transformer,
);
}

Expand Down

0 comments on commit 08c0792

Please sign in to comment.