Skip to content

Commit

Permalink
Merge pull request #426 from loic425/feature/use-an-interface-for-doc…
Browse files Browse the repository at this point in the history
…umentation-normalizers

Use an interface for documentation serializers
  • Loading branch information
loic425 committed Apr 27, 2022
2 parents 7e82139 + 2c9ea5c commit a92ce4d
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@

namespace Monofony\Bundle\CoreBundle\DependencyInjection\Compiler;

use App\Swagger\AppAuthenticationTokenDocumentationNormalizer;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Reference;
Expand All @@ -22,14 +21,13 @@ final class RegisterDocumentationNormalizersPass implements CompilerPassInterfac
{
public function process(ContainerBuilder $container): void
{
if (!class_exists(AppAuthenticationTokenDocumentationNormalizer::class)) {
return;
}
foreach ($container->findTaggedServiceIds('monofony.documentation_normalizer.app_authentication_token') as $id => $attributes) {
$normalizerDefinition = $container->findDefinition($id);

$normalizerDefinition = $container->register(AppAuthenticationTokenDocumentationNormalizer::class, AppAuthenticationTokenDocumentationNormalizer::class);
$normalizerDefinition
->setDecoratedService('api_platform.swagger.normalizer.documentation', null, 10)
->addArgument(new Reference(AppAuthenticationTokenDocumentationNormalizer::class.'.inner'))
;
$normalizerDefinition
->setDecoratedService('api_platform.swagger.normalizer.documentation', null, 10)
->addArgument(new Reference($id.'.inner'))
;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
use Monofony\Component\Admin\Menu\AdminMenuBuilderInterface;
use Monofony\Contracts\Admin\Dashboard\DashboardStatisticsProviderInterface;
use Monofony\Contracts\Api\Identifier\AppUserIdentifierNormalizerInterface;
use Monofony\Contracts\Api\Swagger\AppAuthenticationTokenDocumentationNormalizerInterface;
use Monofony\Contracts\Front\Menu\AccountMenuBuilderInterface;
use Sylius\Component\Customer\Context\CustomerContextInterface;
use Sylius\Component\User\Canonicalizer\CanonicalizerInterface;
Expand All @@ -44,7 +45,8 @@ public function load(array $configs, ContainerBuilder $container)
$this->registerSomeSyliusAliases($container);
$this->tagCustomerContext($container);
$this->tagDoctrineEventSubscribers($container);
$this->tagApiPlatformIdentiferNormalizer($container);
$this->tagApiPlatformIdentifierNormalizer($container);
$this->tagApiPlatformDocumentationNormalizers($container);
$this->buildAccountMenu($container);
$this->buildDashboardServices($container);
$this->buildAdminMenu($container);
Expand Down Expand Up @@ -82,7 +84,7 @@ private function tagDoctrineEventSubscribers(ContainerBuilder $container): void
->addTag('doctrine.event_subscriber');
}

private function tagApiPlatformIdentiferNormalizer(ContainerBuilder $container): void
private function tagApiPlatformIdentifierNormalizer(ContainerBuilder $container): void
{
if (!interface_exists(AppUserIdentifierNormalizerInterface::class)) {
return;
Expand All @@ -92,6 +94,17 @@ private function tagApiPlatformIdentiferNormalizer(ContainerBuilder $container):
->addTag('api_platform.identifier.denormalizer', ['priority' => -10]);
}

private function tagApiPlatformDocumentationNormalizers(ContainerBuilder $container): void
{
if (!interface_exists(AppAuthenticationTokenDocumentationNormalizerInterface::class)) {
return;
}

$container->registerForAutoconfiguration(AppAuthenticationTokenDocumentationNormalizerInterface::class)
->addTag('monofony.documentation_normalizer.app_authentication_token')
;
}

private function buildAccountMenu(ContainerBuilder $container): void
{
if (!interface_exists(AccountMenuBuilderInterface::class)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,27 @@

final class RegisterDocumentationNormalizersPassTest extends AbstractCompilerPassTestCase
{
/**
* @test
*/
/** @test */
public function it_registers_app_authentication_token_documentation_normalizer(): void
{
$this->container->register(AppAuthenticationTokenDocumentationNormalizer::class, AppAuthenticationTokenDocumentationNormalizer::class);

$definition = $this->container->findDefinition(AppAuthenticationTokenDocumentationNormalizer::class);
$definition->addTag('monofony.documentation_normalizer.app_authentication_token');

$this->compile();

$this->assertContainerBuilderHasService(
AppAuthenticationTokenDocumentationNormalizer::class,
AppAuthenticationTokenDocumentationNormalizer::class
$definition = $this->container->findDefinition(AppAuthenticationTokenDocumentationNormalizer::class);

$this->assertEquals([
'api_platform.swagger.normalizer.documentation',
null,
10,
], $definition->getDecoratedService());

$this->assertEquals(
AppAuthenticationTokenDocumentationNormalizer::class.'.inner',
$definition->getArgument(0),
);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?php

/*
* This file is part of the Monofony package.
*
* (c) Monofony
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

declare(strict_types=1);

namespace Monofony\Contracts\Api\Swagger;

use Symfony\Component\Serializer\Normalizer\NormalizerInterface;

interface AppAuthenticationTokenDocumentationNormalizerInterface extends NormalizerInterface
{
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@

namespace App\Swagger;

use Monofony\Contracts\Api\Swagger\AppAuthenticationTokenDocumentationNormalizerInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;

final class AppAuthenticationTokenDocumentationNormalizer implements NormalizerInterface
final class AppAuthenticationTokenDocumentationNormalizer implements AppAuthenticationTokenDocumentationNormalizerInterface
{
public function __construct(private NormalizerInterface $decoratedNormalizer)
{
Expand Down

0 comments on commit a92ce4d

Please sign in to comment.