Skip to content

Commit dca18ee

Browse files
authored
Merge pull request #32 from sitegeist/feature/configureRootsForDocuments
FEATURE: Allow to configure the rootObject for each document
2 parents 0ef5968 + b43157f commit dca18ee

File tree

4 files changed

+34
-4
lines changed

4 files changed

+34
-4
lines changed

Classes/Domain/OpenApiDocument.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,16 @@ public static function createFromConfiguration(
5050
$paths ?: new OpenApiPathCollection(),
5151
$configuration['webhooks'],
5252
$components ?: new OpenApiComponents(
53-
new OpenApiSchemaCollection()
53+
new OpenApiSchemaCollection(),
54+
$configuration['components']['responses'] ?? [],
55+
$configuration['components']['parameters'] ?? [],
56+
$configuration['components']['examples'] ?? [],
57+
$configuration['components']['requestBodies'] ?? [],
58+
$configuration['components']['headers'] ?? [],
59+
$configuration['components']['securitySchemes'] ?? [],
60+
$configuration['components']['links'] ?? [],
61+
$configuration['components']['callbacks'] ?? [],
62+
$configuration['components']['pathItems'] ?? []
5463
),
5564
$configuration['security'],
5665
$configuration['tags'],

Classes/Domain/OpenApiDocumentFactory.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,16 @@ public function createOpenApiDocumentFromNameAndClassNamePattern(
118118
$rootObjectConfiguration,
119119
$paths,
120120
new OpenApiComponents(
121-
OpenApiSchemaCollection::fromClassNames($requiredSchemaClasses)
121+
OpenApiSchemaCollection::fromClassNames($requiredSchemaClasses),
122+
$rootObjectConfiguration['components']['responses'] ?? [],
123+
$rootObjectConfiguration['components']['parameters'] ?? [],
124+
$rootObjectConfiguration['components']['examples'] ?? [],
125+
$rootObjectConfiguration['components']['requestBodies'] ?? [],
126+
$rootObjectConfiguration['components']['headers'] ?? [],
127+
$rootObjectConfiguration['components']['securitySchemes'] ?? [],
128+
$rootObjectConfiguration['components']['links'] ?? [],
129+
$rootObjectConfiguration['components']['callbacks'] ?? [],
130+
$rootObjectConfiguration['components']['pathItems'] ?? []
122131
)
123132
);
124133
}

Classes/Domain/OpenApiDocumentRepository.php

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace Sitegeist\SchemeOnYou\Domain;
66

77
use Neos\Flow\Annotations as Flow;
8+
use Neos\Utility\Arrays;
89

910
#[Flow\Scope('singleton')]
1011
final class OpenApiDocumentRepository
@@ -16,7 +17,7 @@ final class OpenApiDocumentRepository
1617
protected array $rootObjectConfiguration;
1718

1819
/**
19-
* @var array<string,array{name:string, classNames: class-string[]}>
20+
* @var array<string,array{name:string, classNames: class-string[], rootObject?:array<string,mixed>}>
2021
*/
2122
#[Flow\InjectConfiguration(path: 'documents')]
2223
protected array $documentConfiguration;
@@ -34,11 +35,17 @@ public function findDocumentByName(string $name): OpenApiDocument
3435

3536
$documentName = $this->documentConfiguration[$name]['name'] ?? '';
3637
$documentClassNamePatterns = $this->documentConfiguration[$name]['classNames'];
38+
$documentRootObjectConfiguration = $this->documentConfiguration[$name]['rootObject'] ?? [];
39+
40+
$rootObjectConfiguration = Arrays::arrayMergeRecursiveOverrule(
41+
$this->rootObjectConfiguration,
42+
$documentRootObjectConfiguration
43+
);
3744

3845
return $this->documentFactory->createOpenApiDocumentFromNameAndClassNamePattern(
3946
$documentName,
4047
$documentClassNamePatterns,
41-
$this->rootObjectConfiguration
48+
$rootObjectConfiguration
4249
);
4350
}
4451
}

Configuration/Policy.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,8 @@ roles:
1313
-
1414
privilegeTarget: 'Sitegeist.SchemeOnYou:OpenApi'
1515
permission: GRANT
16+
'Sitegeist.SchemeOnYou:ApiSpecConsumer':
17+
label: "Access to the api specs"
18+
privileges:
19+
- privilegeTarget: 'Sitegeist.SchemeOnYou:OpenApi'
20+
permission: GRANT

0 commit comments

Comments
 (0)