From 5b50ba89225da0c9fb9a8f24c3e0747bc9202f7e Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo <1102197+priyadi@users.noreply.github.com> Date: Mon, 5 May 2025 13:31:05 +0700 Subject: [PATCH 1/4] refactor: make internal services use non-class service names --- CHANGELOG.md | 1 + .../LoggingFilePropertyManager.php | 6 +- .../config/file-association-debug.php | 17 ++- .../file-bundle/config/file-association.php | 138 ++++++++++++------ .../FileAssociation/ObjectManagerTest.php | 3 +- 5 files changed, 105 insertions(+), 60 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb42dca..264272e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ * fix: make `FileRepository` implement `ResetInterface` * style: improve profiler UI +* refactor: make internal services use non-class service names ## 2.0.0 diff --git a/packages/file-association/src/FilePropertyManager/LoggingFilePropertyManager.php b/packages/file-association/src/FilePropertyManager/LoggingFilePropertyManager.php index e763564..e55d843 100644 --- a/packages/file-association/src/FilePropertyManager/LoggingFilePropertyManager.php +++ b/packages/file-association/src/FilePropertyManager/LoggingFilePropertyManager.php @@ -19,11 +19,11 @@ use Rekalogika\File\Association\Model\PropertyOperationAction; use Rekalogika\File\Association\Model\PropertyOperationResult; -final class LoggingFilePropertyManager implements FilePropertyManagerInterface +final readonly class LoggingFilePropertyManager implements FilePropertyManagerInterface { public function __construct( - private readonly FilePropertyManagerInterface $decorated, - private readonly ?LoggerInterface $logger, + private FilePropertyManagerInterface $decorated, + private ?LoggerInterface $logger, ) {} #[\Override] diff --git a/packages/file-bundle/config/file-association-debug.php b/packages/file-bundle/config/file-association-debug.php index b7d2b9c..bc00a30 100644 --- a/packages/file-bundle/config/file-association-debug.php +++ b/packages/file-bundle/config/file-association-debug.php @@ -11,8 +11,6 @@ * that was distributed with this source code. */ -use Rekalogika\File\Association\Contracts\FilePropertyManagerInterface; -use Rekalogika\File\Association\Contracts\ObjectManagerInterface; use Rekalogika\File\Bundle\Debug\FileDataCollector; use Rekalogika\File\Bundle\Debug\TraceableFilePropertyManager; use Rekalogika\File\Bundle\Debug\TraceableObjectManager; @@ -24,7 +22,8 @@ $services = $containerConfigurator->services(); $services - ->set(FileDataCollector::class) + ->set('rekalogika.file.association.debug.data_collector') + ->class(FileDataCollector::class) ->tag('data_collector', [ 'id' => 'rekalogika_file', ]) @@ -32,18 +31,20 @@ ; $services - ->set(TraceableObjectManager::class) - ->decorate(ObjectManagerInterface::class) + ->set('rekalogika.file.association.debug.traceable_object_manager') + ->class(TraceableObjectManager::class) + ->decorate('rekalogika.file.association.object_manager') ->args([ service('.inner'), service('debug.stopwatch'), - service(FileDataCollector::class), + service('rekalogika.file.association.debug.data_collector'), ]) ; $services - ->set(TraceableFilePropertyManager::class) - ->decorate(FilePropertyManagerInterface::class) + ->set('rekalogika.file.association.debug.traceable_file_property_manager') + ->class(TraceableFilePropertyManager::class) + ->decorate('rekalogika.file.association.file_property_manager') ->args([ service('.inner'), service('debug.stopwatch'), diff --git a/packages/file-bundle/config/file-association.php b/packages/file-bundle/config/file-association.php index fe61c02..6039ae2 100644 --- a/packages/file-bundle/config/file-association.php +++ b/packages/file-bundle/config/file-association.php @@ -21,12 +21,8 @@ use Rekalogika\File\Association\ClassSignatureResolver\ChainClassSignatureResolver; use Rekalogika\File\Association\ClassSignatureResolver\DefaultClassSignatureResolver; use Rekalogika\File\Association\Contracts\ClassBasedFileLocationResolverInterface; -use Rekalogika\File\Association\Contracts\ClassMetadataFactoryInterface; use Rekalogika\File\Association\Contracts\ClassSignatureResolverInterface; -use Rekalogika\File\Association\Contracts\FilePropertyManagerInterface; use Rekalogika\File\Association\Contracts\ObjectIdResolverInterface; -use Rekalogika\File\Association\Contracts\ObjectManagerInterface; -use Rekalogika\File\Association\Contracts\PropertyListerInterface; use Rekalogika\File\Association\FilePropertyManager\DefaultFilePropertyManager; use Rekalogika\File\Association\FilePropertyManager\LoggingFilePropertyManager; use Rekalogika\File\Association\ObjectIdResolver\ChainedObjectIdResolver; @@ -50,16 +46,20 @@ // reconstitutors // - $services->set(InterfaceReconstitutor::class) + $services + ->set('rekalogika.file.association.reconstitutor.interface') + ->class(InterfaceReconstitutor::class) ->args([ - service(ObjectManagerInterface::class), + service('rekalogika.file.association.object_manager'), ]) ->tag('rekalogika.reconstitutor.class') ; - $services->set(AttributeReconstitutor::class) + $services + ->set('rekalogika.file.association.reconstitutor.attribute') + ->class(AttributeReconstitutor::class) ->args([ - service(ObjectManagerInterface::class), + service('rekalogika.file.association.object_manager'), ]) ->tag('rekalogika.reconstitutor.attribute') ; @@ -69,20 +69,21 @@ // $services - ->set(ObjectManagerInterface::class) + ->set('rekalogika.file.association.object_manager') ->class(DefaultObjectManager::class) ->args([ - '$classMetadataFactory' => service(ClassMetadataFactoryInterface::class), + '$classMetadataFactory' => service('rekalogika.file.association.class_metadata_factory'), '$objectIdResolver' => service(ObjectIdResolverInterface::class), - '$filePropertyManager' => service(FilePropertyManagerInterface::class), - ]); + '$filePropertyManager' => service('rekalogika.file.association.file_property_manager'), + ]) + ; // // property manager // $services - ->set(FilePropertyManagerInterface::class) + ->set('rekalogika.file.association.file_property_manager') ->class(DefaultFilePropertyManager::class) ->args([ '$fileRepository' => service(FileRepositoryInterface::class), @@ -91,8 +92,9 @@ ; $services - ->set(LoggingFilePropertyManager::class) - ->decorate(FilePropertyManagerInterface::class) + ->set('rekalogika.file.association.file_property_manager.logging') + ->class(LoggingFilePropertyManager::class) + ->decorate('rekalogika.file.association.file_property_manager') ->args([ service('.inner'), service('logger')->nullOnInvalid(), @@ -106,111 +108,153 @@ $services->alias( ObjectIdResolverInterface::class, - ChainedObjectIdResolver::class, + 'rekalogika.file.association.object_id_resolver.chained', ); - $services->set(ChainedObjectIdResolver::class) + $services + ->set('rekalogika.file.association.object_id_resolver.chained') + ->class(ChainedObjectIdResolver::class) ->args([ tagged_iterator('rekalogika.file.association.object_id_resolver'), - ]); + ]) + ; - $services->set(DefaultObjectIdResolver::class) + $services + ->set('rekalogika.file.association.object_id_resolver.default') + ->class(DefaultObjectIdResolver::class) ->tag('rekalogika.file.association.object_id_resolver', [ 'priority' => -1000, - ]); + ]) + ; if (interface_exists(ManagerRegistry::class)) { - $services->set(DoctrineObjectIdResolver::class) + $services + ->set(DoctrineObjectIdResolver::class) ->args([ service(ManagerRegistry::class), ]) ->tag('rekalogika.file.association.object_id_resolver', [ 'priority' => -999, - ]); + ]) + ; } // // class-based file location resolver // + $services->alias( + ClassBasedFileLocationResolverInterface::class, + 'rekalogika.file.association.class_based_file_location_resolver.chained', + ); + $services - ->set(ClassBasedFileLocationResolverInterface::class) + ->set('rekalogika.file.association.class_based_file_location_resolver.chained') ->class(ChainedClassBasedFileLocationResolver::class) ->args([ tagged_iterator('rekalogika.file.association.class_based_file_location_resolver'), - ]); + ]) + ; $services - ->set(DefaultClassBasedFileLocationResolver::class) + ->set('rekalogika.file.association.class_based_file_location_resolver.default') + ->class(DefaultClassBasedFileLocationResolver::class) ->args([ - service(ClassMetadataFactoryInterface::class), + service('rekalogika.file.association.class_metadata_factory'), ]) ->tag('rekalogika.file.association.class_based_file_location_resolver', [ 'priority' => -1000, - ]); + ]) + ; // // class signature resolver // + $services->alias( + ClassSignatureResolverInterface::class, + 'rekalogika.file.association.class_signature_resolver.chained', + ); + $services - ->set(ClassSignatureResolverInterface::class) + ->set('rekalogika.file.association.class_signature_resolver.chained') ->class(ChainClassSignatureResolver::class) ->args([ tagged_iterator('rekalogika.file.association.class_signature_resolver'), - ]); + ]) + ; $services - ->set(DefaultClassSignatureResolver::class) + ->set('rekalogika.file.association.class_signature_resolver.default') + ->class(DefaultClassSignatureResolver::class) ->tag('rekalogika.file.association.class_signature_resolver', [ 'priority' => -1000, - ]); + ]) + ; $services - ->set(AttributeClassSignatureResolver::class) + ->set('rekalogika.file.association.class_signature_resolver.attribute') + ->class(AttributeClassSignatureResolver::class) ->tag('rekalogika.file.association.class_signature_resolver', [ 'priority' => -999, - ]); + ]) + ; // // property lister // - $services->alias(PropertyListerInterface::class, ChainPropertyLister::class); + $services->alias( + 'rekalogika.file.association.property_lister', + 'rekalogika.file.association.property_lister.chain', + ); - $services->set(ChainPropertyLister::class) + $services + ->set('rekalogika.file.association.property_lister.chain') + ->class(ChainPropertyLister::class) ->args([ tagged_iterator('rekalogika.file.association.property_lister'), - ]); + ]) + ; - $services->set(FileAssociationInterfacePropertyLister::class) - ->tag('rekalogika.file.association.property_lister'); + $services + ->set('rekalogika.file.association.property_lister.file_association_interface') + ->class(FileAssociationInterfacePropertyLister::class) + ->tag('rekalogika.file.association.property_lister') + ; - $services->set(AttributesPropertyLister::class) - ->tag('rekalogika.file.association.property_lister'); + $services + ->set('rekalogika.file.association.property_lister.attributes') + ->class(AttributesPropertyLister::class) + ->tag('rekalogika.file.association.property_lister') + ; // // class metadata factory // $services - ->set(ClassMetadataFactoryInterface::class) + ->set('rekalogika.file.association.class_metadata_factory') ->class(DefaultClassMetadataFactory::class) ->args([ - service(PropertyListerInterface::class), + service('rekalogika.file.association.property_lister'), service(ClassSignatureResolverInterface::class), - ]); + ]) + ; $services ->set('rekalogika.file.association.class_metadata_factory.cache') ->parent('cache.system') - ->tag('cache.pool'); + ->tag('cache.pool') + ; $services - ->set(CachingClassMetadataFactory::class) - ->decorate(ClassMetadataFactoryInterface::class) + ->set('rekalogika.file.association.class_metadata_factory.caching') + ->class(CachingClassMetadataFactory::class) + ->decorate('rekalogika.file.association.class_metadata_factory') ->args([ service('.inner'), service('rekalogika.file.association.class_metadata_factory.cache'), - ]); + ]) + ; }; diff --git a/tests/src/Tests/FileAssociation/ObjectManagerTest.php b/tests/src/Tests/FileAssociation/ObjectManagerTest.php index 8e27f4f..99c699c 100644 --- a/tests/src/Tests/FileAssociation/ObjectManagerTest.php +++ b/tests/src/Tests/FileAssociation/ObjectManagerTest.php @@ -40,9 +40,8 @@ protected function setUp(): void { $fileAssociationManager = static::getContainer() - ->get(ObjectManagerInterface::class); + ->get('rekalogika.file.association.object_manager'); - // @phpstan-ignore method.alreadyNarrowedType $this->assertInstanceOf( ObjectManagerInterface::class, $fileAssociationManager, From 9728dcd53af91254700ae9af7e6f08da59bab522 Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo <1102197+priyadi@users.noreply.github.com> Date: Mon, 5 May 2025 13:38:21 +0700 Subject: [PATCH 2/4] file-bundle file-image --- packages/file-bundle/config/file-bundle.php | 10 +++++++--- packages/file-bundle/config/file-image.php | 6 ++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/packages/file-bundle/config/file-bundle.php b/packages/file-bundle/config/file-bundle.php index 09fb5ff..d36e2ee 100644 --- a/packages/file-bundle/config/file-bundle.php +++ b/packages/file-bundle/config/file-bundle.php @@ -30,18 +30,22 @@ ->set(DefaultFilesystemFactory::class); $services - ->set('rekalogika.file.default_filesystem', FilesystemOperator::class) + ->set('rekalogika.file.default_filesystem') + ->class(FilesystemOperator::class) ->factory([ service(DefaultFilesystemFactory::class), 'getDefaultFilesystem', - ]); + ]) + ; // // commands // - $services->set(FileLocationResolverCommand::class) + $services + ->set('rekalogika.file.command.file_location_resolver') + ->class(FileLocationResolverCommand::class) ->args([ '$fileLocationResolver' => service(ClassBasedFileLocationResolverInterface::class), ]) diff --git a/packages/file-bundle/config/file-image.php b/packages/file-bundle/config/file-image.php index 19246ed..644b716 100644 --- a/packages/file-bundle/config/file-image.php +++ b/packages/file-bundle/config/file-image.php @@ -26,13 +26,15 @@ ->tag('rekalogika.file.derivation.filter'); $services - ->set(ImageTwigExtension::class) + ->set('rekalogika.file.image.twig_extension') + ->class(ImageTwigExtension::class) ->tag('twig.extension', [ 'priority' => 1000000, ]); $services - ->set(ImageTwigRuntime::class) + ->set('rekalogika.file.image.twig_runtime') + ->class(ImageTwigRuntime::class) ->args([ service(ImageResizer::class), ]) From 1ef8092d96786693922079d3c1babba29fc236ff Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo <1102197+priyadi@users.noreply.github.com> Date: Mon, 5 May 2025 14:18:27 +0700 Subject: [PATCH 3/4] the rest --- composer.json | 2 +- packages/file-bundle/config/file-bundle.php | 6 +++-- packages/file-bundle/config/file-image.php | 9 +++++--- packages/file-bundle/config/file-server.php | 4 +++- packages/file-bundle/config/file-zip.php | 22 +++++++++++++------ packages/file-bundle/config/file.php | 6 +++-- packages/file-filepond/composer.json | 2 +- packages/file-server/composer.json | 2 +- packages/file-zip/composer.json | 2 +- .../FileAssociation/ObjectManagerTest.php | 6 ++--- 10 files changed, 39 insertions(+), 22 deletions(-) diff --git a/composer.json b/composer.json index 84b02aa..5ff8abb 100644 --- a/composer.json +++ b/composer.json @@ -31,7 +31,7 @@ "psr/log": "^2 || ^3", "rekalogika/doctrine-collections-decorator": "^2.0", "rekalogika/reconstitutor": "^2.0.2", - "rekalogika/temporary-url-bundle": "^1.7", + "rekalogika/temporary-url-bundle": "^1.7.2", "symfony/cache": "^6.2 || ^7.0", "symfony/config": "^6.2 || ^7.0", "symfony/console": "^6.2 || ^7.0", diff --git a/packages/file-bundle/config/file-bundle.php b/packages/file-bundle/config/file-bundle.php index d36e2ee..f7bfe96 100644 --- a/packages/file-bundle/config/file-bundle.php +++ b/packages/file-bundle/config/file-bundle.php @@ -27,7 +27,8 @@ // $services - ->set(DefaultFilesystemFactory::class); + ->set(DefaultFilesystemFactory::class) + ; $services ->set('rekalogika.file.default_filesystem') @@ -49,5 +50,6 @@ ->args([ '$fileLocationResolver' => service(ClassBasedFileLocationResolverInterface::class), ]) - ->tag('console.command'); + ->tag('console.command') + ; }; diff --git a/packages/file-bundle/config/file-image.php b/packages/file-bundle/config/file-image.php index 644b716..6323a79 100644 --- a/packages/file-bundle/config/file-image.php +++ b/packages/file-bundle/config/file-image.php @@ -23,14 +23,16 @@ $services ->set(ImageResizer::class) - ->tag('rekalogika.file.derivation.filter'); + ->tag('rekalogika.file.derivation.filter') + ; $services ->set('rekalogika.file.image.twig_extension') ->class(ImageTwigExtension::class) ->tag('twig.extension', [ 'priority' => 1000000, - ]); + ]) + ; $services ->set('rekalogika.file.image.twig_runtime') @@ -40,5 +42,6 @@ ]) ->tag('twig.runtime', [ 'priority' => 1000000, - ]); + ]) + ; }; diff --git a/packages/file-bundle/config/file-server.php b/packages/file-bundle/config/file-server.php index 182a488..7efcc31 100644 --- a/packages/file-bundle/config/file-server.php +++ b/packages/file-bundle/config/file-server.php @@ -20,7 +20,9 @@ return static function (ContainerConfigurator $containerConfigurator): void { $services = $containerConfigurator->services(); - $services->set(FileInterfaceResourceServer::class) + $services + ->set('rekalogika.file.server.file_interface_resource_server') + ->class(FileInterfaceResourceServer::class) ->tag('rekalogika.temporary_url.resource_server', [ 'method' => 'respond', ]) diff --git a/packages/file-bundle/config/file-zip.php b/packages/file-bundle/config/file-zip.php index 72e1bf8..859c634 100644 --- a/packages/file-bundle/config/file-zip.php +++ b/packages/file-bundle/config/file-zip.php @@ -23,19 +23,26 @@ return static function (ContainerConfigurator $containerConfigurator): void { $services = $containerConfigurator->services(); - $services->set(FileZip::class) + $services + ->set(FileZip::class) ->args([ - service(ZipDirectory::class), + service('rekalogika.file.zip.zip_directory'), service(TranslatorInterface::class), - ]); + ]) + ; - $services->set(ZipDirectory::class) + $services + ->set('rekalogika.file.zip.zip_directory') + ->class(ZipDirectory::class) ->args([ service(FileRepositoryInterface::class), service(TranslatorInterface::class)->nullOnInvalid(), - ]); + ]) + ; - $services->set(DirectoryResourceServer::class) + $services + ->set('rekalogika.file.zip.directory_resource_server') + ->class(DirectoryResourceServer::class) ->args([ service(FileZip::class), service(TranslatorInterface::class), @@ -45,5 +52,6 @@ ]) ->tag('rekalogika.temporary_url.resource_transformer', [ 'method' => 'transform', - ]); + ]) + ; }; diff --git a/packages/file-bundle/config/file.php b/packages/file-bundle/config/file.php index 6d0fbe3..efe46a2 100644 --- a/packages/file-bundle/config/file.php +++ b/packages/file-bundle/config/file.php @@ -22,13 +22,15 @@ $services = $containerConfigurator->services(); $services - ->set(FileFactory::class); + ->set('rekalogika.file.factory') + ->class(FileFactory::class) + ; $services ->set(FileRepositoryInterface::class) ->class(FileRepository::class) ->factory([ - service(FileFactory::class), + service('rekalogika.file.factory'), 'getFileRepository', ]) ->tag('kernel.reset', ['method' => 'reset']) diff --git a/packages/file-filepond/composer.json b/packages/file-filepond/composer.json index 43bfce8..abd8d3f 100644 --- a/packages/file-filepond/composer.json +++ b/packages/file-filepond/composer.json @@ -33,7 +33,7 @@ "rekalogika/file-image": "^2.0", "rekalogika/file-server": "^2.0", "rekalogika/file-symfony-bridge": "^2.0", - "rekalogika/temporary-url-bundle": "^1.7", + "rekalogika/temporary-url-bundle": "^1.7.2", "symfony/dependency-injection": "^6.2 || ^7.0", "symfony/form": "^6.2 || ^7.0", "symfony/http-foundation": "^6.2 || ^7.0", diff --git a/packages/file-server/composer.json b/packages/file-server/composer.json index d054276..80b7e31 100644 --- a/packages/file-server/composer.json +++ b/packages/file-server/composer.json @@ -26,7 +26,7 @@ "php": "^8.2", "rekalogika/file-contracts": "^2.0", "rekalogika/file-symfony-bridge": "^2.0", - "rekalogika/temporary-url-bundle": "^1.7", + "rekalogika/temporary-url-bundle": "^1.7.2", "symfony/http-foundation": "^6.2 || ^7.0" }, "extra": { diff --git a/packages/file-zip/composer.json b/packages/file-zip/composer.json index bd3076b..2d6f933 100644 --- a/packages/file-zip/composer.json +++ b/packages/file-zip/composer.json @@ -30,7 +30,7 @@ "psr/http-message": "^1.0 || ^2.0", "rekalogika/file-contracts": "^2.0", "rekalogika/file-metadata": "^2.0", - "rekalogika/temporary-url-bundle": "^1.7", + "rekalogika/temporary-url-bundle": "^1.7.2", "maennchen/zipstream-php": "^3.1", "symfony/http-foundation": "^6.2 || ^7.0", "symfony/translation-contracts": "^3.0" diff --git a/tests/src/Tests/FileAssociation/ObjectManagerTest.php b/tests/src/Tests/FileAssociation/ObjectManagerTest.php index 99c699c..752aed7 100644 --- a/tests/src/Tests/FileAssociation/ObjectManagerTest.php +++ b/tests/src/Tests/FileAssociation/ObjectManagerTest.php @@ -39,15 +39,15 @@ final class ObjectManagerTest extends KernelTestCase protected function setUp(): void { - $fileAssociationManager = static::getContainer() + $objectManager = static::getContainer() ->get('rekalogika.file.association.object_manager'); $this->assertInstanceOf( ObjectManagerInterface::class, - $fileAssociationManager, + $objectManager, ); - $this->objectManager = $fileAssociationManager; + $this->objectManager = $objectManager; $fileRepository = static::getContainer() ->get(FileRepositoryInterface::class); From d07b52e35fa9f1fa8fb5998fce25e27dc23b6465 Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo <1102197+priyadi@users.noreply.github.com> Date: Mon, 5 May 2025 14:21:32 +0700 Subject: [PATCH 4/4] fix --- .../src/DependencyInjection/RekalogikaFileExtension.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/file-bundle/src/DependencyInjection/RekalogikaFileExtension.php b/packages/file-bundle/src/DependencyInjection/RekalogikaFileExtension.php index 1259842..c9e5336 100644 --- a/packages/file-bundle/src/DependencyInjection/RekalogikaFileExtension.php +++ b/packages/file-bundle/src/DependencyInjection/RekalogikaFileExtension.php @@ -105,11 +105,13 @@ public function load(array $configs, ContainerBuilder $container): void } $newFilesystems = []; + foreach ($filesystems as $name => $serviceId) { $newFilesystems[$name] = new Reference($serviceId); } - $container->getDefinition(FileFactory::class) + $container + ->getDefinition('rekalogika.file.factory') ->setArgument('$filesystems', $newFilesystems); //