Skip to content

Commit

Permalink
feat: schema V3
Browse files Browse the repository at this point in the history
  • Loading branch information
Ferror committed Feb 3, 2024
1 parent 260be87 commit 91562d7
Show file tree
Hide file tree
Showing 13 changed files with 68 additions and 224 deletions.
1 change: 0 additions & 1 deletion src/Attribute/Message.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ public function __construct(
public readonly string $name,
public array $properties = [],
public array $channels = [],
public array $operations = [],
) {
}

Expand Down
36 changes: 0 additions & 36 deletions src/Attribute/Operation.php

This file was deleted.

11 changes: 0 additions & 11 deletions src/DocumentationStrategy/AttributeDocumentationStrategy.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@

use Ferror\AsyncapiDocBundle\Attribute\Channel;
use Ferror\AsyncapiDocBundle\Attribute\Message;
use Ferror\AsyncapiDocBundle\Attribute\Operation;
use ReflectionAttribute;
use ReflectionClass;
use ReflectionException;
Expand Down Expand Up @@ -37,17 +36,7 @@ public function document(string $class): Message
throw new DocumentationStrategyException('Error: class ' . $class . ' must have at least ' . Message::class . ' attribute.');
}

/** @var ReflectionAttribute<Operation>[] $operationAttributes */
$operationAttributes = $reflection->getAttributes(Operation::class);

/** @var ReflectionAttribute<Channel>[] $channelAttributes */
$channelAttributes = $reflection->getAttributes(Channel::class);

$message = $messageAttributes[0]->newInstance();
$operation = $operationAttributes[0]->newInstance();
$channel = $channelAttributes[0]->newInstance();

$operation->addChannel($channel);

foreach ($this->propertyExtractor->extract($class) as $property) {
$message->addProperty($property);
Expand Down
15 changes: 11 additions & 4 deletions src/Schema/V3/InfoRenderer.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,19 @@

final readonly class InfoRenderer
{
public function render(array $document): array
public function __construct(
public string $title,
public string $description,
public string $version,
) {
}

public function render(): array
{
return [
'title' => $document['title'],
'version' => $document['version'],
'description' => $document['description'],
'title' => $this->title,
'version' => $this->version,
'description' => $this->description,
];
}
}
26 changes: 0 additions & 26 deletions src/Schema/V3/OperationRenderer.php

This file was deleted.

12 changes: 0 additions & 12 deletions src/Schema/V3/OperationType.php

This file was deleted.

6 changes: 0 additions & 6 deletions src/Schema/V3/SchemaRenderer.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ public function __construct(
private DocumentationEditor $documentationEditor,
private InfoRenderer $infoRenderer,
private MessageRenderer $messageRenderer,
private OperationRenderer $operationRenderer,
private ChannelRenderer $channelRenderer,
private array $servers,
private string $schemaVersion,
Expand All @@ -28,30 +27,25 @@ public function generate(): array

$channels = [];
$messages = [];
$operations = [];

foreach ($classes as $class) {
$document = $this->documentationEditor->document($class);
$document = $document->toArray();

$channel = $this->channelRenderer->render($document);
$message = $this->messageRenderer->render($document);
$operation = $this->operationRenderer->render($document);

$channelKey = key($channel);
$messageKey = key($message);
$operationKey = key($operation);

$channels[$channelKey] = $channel[$channelKey];
$messages[$messageKey] = $message[$messageKey];
$operations[$operationKey] = $operation[$operationKey];
}

$schema = [
'asyncapi' => $this->schemaVersion,
'info' => $this->infoRenderer->render(),
'channels' => $channels,
'operations' => $operations,
'components' => [
'messages' => $messages,
],
Expand Down
1 change: 1 addition & 0 deletions src/Symfony/Console/DumpSpecificationConsole.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
use Ferror\AsyncapiDocBundle\DocumentationStrategy\DocumentationStrategyInterface;
use Ferror\AsyncapiDocBundle\Generator\GeneratorFactory;
use Ferror\AsyncapiDocBundle\Schema\V2\MessageRenderer;
use Ferror\AsyncapiDocBundle\SchemaRendererInterface;
use Ferror\AsyncapiDocBundle\Tests\Examples\UserSignedUp;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
Expand Down
47 changes: 33 additions & 14 deletions src/Symfony/Extension.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,12 @@
use Ferror\AsyncapiDocBundle\Generator\JsonGenerator;
use Ferror\AsyncapiDocBundle\Generator\YamlGenerator;
use Ferror\AsyncapiDocBundle\Schema\SchemaGeneratorFactory;
use Ferror\AsyncapiDocBundle\Schema\V2\ChannelRenderer;
use Ferror\AsyncapiDocBundle\Schema\V2\InfoRenderer;
use Ferror\AsyncapiDocBundle\Schema\V2\MessageRenderer;
use Ferror\AsyncapiDocBundle\Schema\V2\ChannelRenderer as ChannelV2Renderer;
use Ferror\AsyncapiDocBundle\Schema\V3\ChannelRenderer as ChannelV3Renderer;
use Ferror\AsyncapiDocBundle\Schema\V2\InfoRenderer as InfoV2Renderer;
use Ferror\AsyncapiDocBundle\Schema\V3\InfoRenderer as InfoV3Renderer;
use Ferror\AsyncapiDocBundle\Schema\V2\MessageRenderer as MessageV2Renderer;
use Ferror\AsyncapiDocBundle\Schema\V3\MessageRenderer as MessageV3Renderer;
use Ferror\AsyncapiDocBundle\Schema\V2\SchemaRenderer as SchemaV2Renderer;
use Ferror\AsyncapiDocBundle\Schema\V3\SchemaRenderer as SchemaV3Renderer;
use Ferror\AsyncapiDocBundle\SchemaRendererInterface;
Expand Down Expand Up @@ -54,34 +57,50 @@ public function load(array $configs, ContainerBuilder $container): void
->addTag('ferror.asyncapi_doc_bundle.documentation-strategy')
;

$container
->register(DocumentationEditor::class)
;

// Async API v2
$container->register(ChannelRenderer::class);
$container->register(MessageRenderer::class);
$container->register(ChannelV2Renderer::class);
$container->register(MessageV2Renderer::class);
$container
->register(InfoRenderer::class)
->register(InfoV2Renderer::class)
->addArgument($config['title'])
->addArgument($config['description'])
->addArgument($config['version'])
;

$container
->register(DocumentationEditor::class)
;

$container
->register(SchemaV2Renderer::class)
->addArgument(new Reference('ferror.asyncapi_doc_bundle.class_finder.manual'))
->addArgument(new Reference(DocumentationEditor::class))
->addArgument(new Reference(ChannelRenderer::class))
->addArgument(new Reference(MessageRenderer::class))
->addArgument(new Reference(InfoRenderer::class))
->addArgument(new Reference(ChannelV2Renderer::class))
->addArgument(new Reference(MessageV2Renderer::class))
->addArgument(new Reference(InfoV2Renderer::class))
->addArgument($config['servers'])
->addArgument($config['asyncapi_version'])
;

// Async API v3
$container->register(ChannelV3Renderer::class);
$container->register(MessageV3Renderer::class);
$container
->register(InfoV3Renderer::class)
->addArgument($config['title'])
->addArgument($config['description'])
->addArgument($config['version'])
;

$container
->register(SchemaV3Renderer::class)
->addArgument(new Reference('ferror.asyncapi_doc_bundle.class_finder.manual'))
->addArgument(new Reference(DocumentationEditor::class))
->addArgument(new Reference(InfoV3Renderer::class))
->addArgument(new Reference(MessageV3Renderer::class))
->addArgument(new Reference(ChannelV3Renderer::class))
->addArgument($config['servers'])
->addArgument($config['asyncapi_version'])
;

// Version Agnostic
Expand Down Expand Up @@ -134,7 +153,7 @@ public function load(array $configs, ContainerBuilder $container): void
->register('ferror.asyncapi_doc_bundle.console', DumpSpecificationConsole::class)
->addArgument(new Reference('ferror.asyncapi_doc_bundle.generator-factory'))
->addArgument(new Reference('ferror.asyncapi_doc_bundle.documentation.attributes'))
->addArgument(new Reference(MessageRenderer::class))
->addArgument(new Reference(MessageV2Renderer::class))
->addTag('console.command')
;
}
Expand Down
3 changes: 0 additions & 3 deletions tests/Unit/Schema/V3/ChannelRendererTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,6 @@ public function testItRenders(): void
$document = [
'name' => 'UserSignedUp',
'properties' => [],
'operations' => [
'UserSignedUpOperation'
],
'channels' => [
[
'name' => 'UserSignedUpChannel',
Expand Down
10 changes: 2 additions & 8 deletions tests/Unit/Schema/V3/InfoRendererTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,9 @@ final class InfoRendererTest extends TestCase
{
public function testItRenders(): void
{
$renderer = new InfoRenderer();
$renderer = new InfoRenderer('Async API Title', 'Async API Description', '2.6.0');

$document = [
'version' => '2.6.0',
'title' => 'Async API Title',
'description' => 'Async API Description',
];

$actual = $renderer->render($document);
$actual = $renderer->render();

$expected = [
'version' => '2.6.0',
Expand Down
82 changes: 0 additions & 82 deletions tests/Unit/Schema/V3/OperationRendererTest.php

This file was deleted.

Loading

0 comments on commit 91562d7

Please sign in to comment.