From 1ac9fe91241e4531f49bfaf18a99898531708709 Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo <1102197+priyadi@users.noreply.github.com> Date: Sat, 13 Jan 2024 09:38:22 +0700 Subject: [PATCH] refactor: Consolidate boilerplate code for getting the `ObjectCache`. --- CHANGELOG.md | 1 + src/MainTransformer.php | 37 +++++++++++++++---- src/MapperFactory/MapperFactory.php | 1 - src/MethodMapper/ClassMethodTransformer.php | 9 +---- src/Transformer/ObjectToObjectTransformer.php | 9 +---- .../TraversableToArrayAccessTransformer.php | 9 +---- .../TraversableToTraversableTransformer.php | 9 +---- 7 files changed, 35 insertions(+), 40 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5349fea..6324a8c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## 0.5.5 * docs: Add link to documentation website. +* refactor: Consolidate boilerplate code for getting the `ObjectCache`. ## 0.5.4 diff --git a/src/MainTransformer.php b/src/MainTransformer.php index c941f03..56c41fe 100644 --- a/src/MainTransformer.php +++ b/src/MainTransformer.php @@ -57,6 +57,32 @@ private function getTransformer(string $id): TransformerInterface return $transformer; } + /** + * @param array $context + */ + public static function getObjectCache( + array &$context, + ObjectCacheFactoryInterface $objectCacheFactory + ): ObjectCache { + if (!isset($context[self::OBJECT_CACHE])) { + $objectCache = $objectCacheFactory->createObjectCache(); + $context[self::OBJECT_CACHE] = $objectCache; + } else { + /** @var mixed */ + $objectCache = $context[self::OBJECT_CACHE]; + + if (!$objectCache instanceof ObjectCache) { + throw new LogicException(sprintf( + 'Object cache must be an instance of %s, %s given.', + ObjectCache::class, + get_debug_type($objectCache) + )); + } + } + + return $objectCache; + } + public function transform( mixed $source, mixed $target, @@ -76,13 +102,10 @@ public function transform( // get object cache - if (!isset($context[self::OBJECT_CACHE])) { - $objectCache = $this->objectCacheFactory->createObjectCache(); - $context[self::OBJECT_CACHE] = $objectCache; - } else { - /** @var ObjectCache */ - $objectCache = $context[self::OBJECT_CACHE]; - } + $objectCache = self::getObjectCache( + $context, + $this->objectCacheFactory + ); // gets simple target types from the provided target type diff --git a/src/MapperFactory/MapperFactory.php b/src/MapperFactory/MapperFactory.php index df8a71a..af94aa3 100644 --- a/src/MapperFactory/MapperFactory.php +++ b/src/MapperFactory/MapperFactory.php @@ -25,7 +25,6 @@ use Rekalogika\Mapper\Mapping\MappingFactoryInterface; use Rekalogika\Mapper\MethodMapper\ClassMethodTransformer; use Rekalogika\Mapper\MethodMapper\SubMapper; -use Rekalogika\Mapper\MethodMapper\SubMapperInterface; use Rekalogika\Mapper\ObjectCache\ObjectCacheFactory; use Rekalogika\Mapper\ObjectCache\ObjectCacheFactoryInterface; use Rekalogika\Mapper\Transformer\ArrayToObjectTransformer; diff --git a/src/MethodMapper/ClassMethodTransformer.php b/src/MethodMapper/ClassMethodTransformer.php index eee3d1f..2fc8fb9 100644 --- a/src/MethodMapper/ClassMethodTransformer.php +++ b/src/MethodMapper/ClassMethodTransformer.php @@ -19,7 +19,6 @@ use Rekalogika\Mapper\Contracts\TypeMapping; use Rekalogika\Mapper\Exception\InvalidArgumentException; use Rekalogika\Mapper\MainTransformer; -use Rekalogika\Mapper\ObjectCache\ObjectCache; use Rekalogika\Mapper\ObjectCache\ObjectCacheFactoryInterface; use Rekalogika\Mapper\Util\TypeFactory; use Symfony\Component\PropertyInfo\Type; @@ -89,13 +88,7 @@ public function transform( // get object cache - if (!isset($context[MainTransformer::OBJECT_CACHE])) { - $objectCache = $this->objectCacheFactory->createObjectCache(); - $context[MainTransformer::OBJECT_CACHE] = $objectCache; - } else { - /** @var ObjectCache */ - $objectCache = $context[MainTransformer::OBJECT_CACHE]; - } + $objectCache = MainTransformer::getObjectCache($context, $this->objectCacheFactory); // save to object cache diff --git a/src/Transformer/ObjectToObjectTransformer.php b/src/Transformer/ObjectToObjectTransformer.php index c95006f..ece5743 100644 --- a/src/Transformer/ObjectToObjectTransformer.php +++ b/src/Transformer/ObjectToObjectTransformer.php @@ -24,7 +24,6 @@ use Rekalogika\Mapper\Exception\InvalidArgumentException; use Rekalogika\Mapper\Exception\InvalidClassException; use Rekalogika\Mapper\MainTransformer; -use Rekalogika\Mapper\ObjectCache\ObjectCache; use Rekalogika\Mapper\ObjectCache\ObjectCacheFactoryInterface; use Rekalogika\Mapper\TypeResolver\TypeResolverInterface; use Rekalogika\Mapper\Util\TypeCheck; @@ -65,13 +64,7 @@ public function transform( // get object cache - if (!isset($context[MainTransformer::OBJECT_CACHE])) { - $objectCache = $this->objectCacheFactory->createObjectCache(); - $context[MainTransformer::OBJECT_CACHE] = $objectCache; - } else { - /** @var ObjectCache */ - $objectCache = $context[MainTransformer::OBJECT_CACHE]; - } + $objectCache = MainTransformer::getObjectCache($context, $this->objectCacheFactory); // return from cache if already exists diff --git a/src/Transformer/TraversableToArrayAccessTransformer.php b/src/Transformer/TraversableToArrayAccessTransformer.php index 845d9a1..ef489d4 100644 --- a/src/Transformer/TraversableToArrayAccessTransformer.php +++ b/src/Transformer/TraversableToArrayAccessTransformer.php @@ -24,7 +24,6 @@ use Rekalogika\Mapper\Exception\InvalidTypeInArgumentException; use Rekalogika\Mapper\Exception\MissingMemberKeyTypeException; use Rekalogika\Mapper\MainTransformer; -use Rekalogika\Mapper\ObjectCache\ObjectCache; use Rekalogika\Mapper\ObjectCache\ObjectCacheFactoryInterface; use Rekalogika\Mapper\Util\TypeCheck; use Rekalogika\Mapper\Util\TypeFactory; @@ -52,13 +51,7 @@ public function transform( // get object cache - if (!isset($context[MainTransformer::OBJECT_CACHE])) { - $objectCache = $this->objectCacheFactory->createObjectCache(); - $context[MainTransformer::OBJECT_CACHE] = $objectCache; - } else { - /** @var ObjectCache */ - $objectCache = $context[MainTransformer::OBJECT_CACHE]; - } + $objectCache = MainTransformer::getObjectCache($context, $this->objectCacheFactory); // return from cache if already exists diff --git a/src/Transformer/TraversableToTraversableTransformer.php b/src/Transformer/TraversableToTraversableTransformer.php index 464fc89..9fe98fd 100644 --- a/src/Transformer/TraversableToTraversableTransformer.php +++ b/src/Transformer/TraversableToTraversableTransformer.php @@ -23,7 +23,6 @@ use Rekalogika\Mapper\Exception\MissingMemberValueTypeException; use Rekalogika\Mapper\MainTransformer; use Rekalogika\Mapper\Model\TraversableCountableWrapper; -use Rekalogika\Mapper\ObjectCache\ObjectCache; use Rekalogika\Mapper\ObjectCache\ObjectCacheFactoryInterface; use Rekalogika\Mapper\Util\TypeCheck; use Rekalogika\Mapper\Util\TypeFactory; @@ -50,13 +49,7 @@ public function transform( } // get object cache - if (!isset($context[MainTransformer::OBJECT_CACHE])) { - $objectCache = $this->objectCacheFactory->createObjectCache(); - $context[MainTransformer::OBJECT_CACHE] = $objectCache; - } else { - /** @var ObjectCache */ - $objectCache = $context[MainTransformer::OBJECT_CACHE]; - } + $objectCache = MainTransformer::getObjectCache($context, $this->objectCacheFactory); // return from cache if already exists