Skip to content

Commit ab26063

Browse files
authored
Merge pull request #220 from Backbase/feature/free-form-objects-to-model
Exports freeFormModels as a regular model
2 parents 23e6c26 + b76ff98 commit ab26063

File tree

4 files changed

+58
-7
lines changed

4 files changed

+58
-7
lines changed

boat-scaffold/src/main/java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import org.openapitools.codegen.CodegenModel;
2121
import org.openapitools.codegen.CodegenParameter;
2222
import org.openapitools.codegen.CodegenResponse;
23+
import org.openapitools.codegen.utils.ModelUtils;
2324

2425
import java.io.IOException;
2526
import java.nio.charset.Charset;
@@ -65,9 +66,16 @@ public void preprocessOpenAPI(OpenAPI openAPI) {
6566
}
6667

6768
if (openAPI.getComponents().getExamples() != null) {
68-
Set<String> imports = new HashSet<>();
6969
additionalProperties.put("examples", openAPI.getComponents().getExamples().entrySet().stream()
70-
.map(exampleEntry -> mapComponentExample(imports, exampleEntry))
70+
.map(this::mapComponentExample)
71+
.collect(Collectors.toList()));
72+
}
73+
74+
// We need freeForm objects as models as well, since they are being referenced with $ref
75+
if (openAPI.getComponents().getSchemas() != null) {
76+
additionalProperties.put("freeFormModels", openAPI.getComponents().getSchemas().entrySet().stream()
77+
.filter(freeFormModel -> ModelUtils.isFreeFormObject(freeFormModel.getValue()))
78+
.map(this::mapFreeFormObject)
7179
.collect(Collectors.toList()));
7280
}
7381

@@ -90,12 +98,17 @@ private CodegenParameter mapComponentRequestBody(Set<String> imports, java.util.
9098
return fromRequestBody(requestBody, imports, name);
9199
}
92100

93-
private BoatExample mapComponentExample(Set<String> imports, Map.Entry<String, Example> namedExample) {
101+
private BoatExample mapComponentExample( Map.Entry<String, Example> namedExample) {
94102
String key = namedExample.getKey();
95103
Example example = namedExample.getValue();
96104
return new BoatExample(key,"", example , false);
97105
}
98106

107+
private Object mapFreeFormObject(Map.Entry<String, Schema> freeFormObject) {//NOSONAR
108+
String name = freeFormObject.getKey();
109+
return fromModel(name, freeFormObject.getValue());
110+
}
111+
99112
private CodegenParameter mapComponentParameter(Set<String> imports, java.util.Map.Entry<String, Parameter> nameParameter) {
100113
Parameter parameter = nameParameter.getValue();
101114
return fromParameter(parameter, imports);

boat-scaffold/src/main/templates/boat-marina/api.js.handlebars

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,13 @@ const data = {
4747
data["parameters"]["{{paramName}}"] = {{{jsonSchema}}};
4848
{{/each}}
4949

50+
{{#each freeFormModels}}
51+
data.models["{{name}}"] = {{{json .}}};
52+
{{/each}}
5053

5154
{{#each swagger.vendorExtensions.x-shared-errors}}
5255
let err = {{{json .}}};
5356
data["errors"][err.errorID] = err;
5457
{{/each}}
5558

56-
57-
5859
module.exports = { data };

boat-scaffold/src/test/java/com/backbase/oss/codegen/marina/BoatMarinaTest.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.backbase.oss.boat.loader.OpenAPILoader;
44
import com.backbase.oss.boat.loader.OpenAPILoaderException;
5-
import com.backbase.oss.codegen.doc.BoatDocsGenerator;
65
import io.swagger.v3.oas.models.OpenAPI;
76
import lombok.extern.slf4j.Slf4j;
87
import org.junit.jupiter.api.Test;
@@ -42,6 +41,11 @@ void testGenerateDocs() throws IOException {
4241
File index = new File("target/marina-docs/api.js");
4342
String generated = String.join(" ", Files.readAllLines(Paths.get(index.getPath())));
4443
assertTrue(generated.startsWith("/**"));
44+
assertTrue(generated.contains("Simple API overview"));
45+
assertTrue(generated.contains("appDescription: \"No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\","));
46+
assertTrue(generated.contains("data.examples[\"BadRequestError\"]"));
47+
assertTrue(generated.contains("data.models[\"ParameterMap\"]"));
48+
4549
}
4650

4751

@@ -53,7 +57,7 @@ protected File getFile(String name) {
5357
}
5458

5559

56-
private static void generateDocs(File spec) {
60+
private static void generateDocs(File spec) throws IOException {
5761
log.info("Generate docs for: {}", spec);
5862
OpenAPI openAPI = null;
5963
try {

boat-scaffold/src/test/resources/openapi-with-examples/openapi-with-json.yaml

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,38 @@ openapi: "3.0.0"
22
info:
33
title: Simple API overview
44
version: 2.0.0
5+
components:
6+
schemas:
7+
ParameterMap:
8+
type: object
9+
additionalProperties:
10+
type: object
11+
example:
12+
enable_payments: true
13+
examples:
14+
BadRequestError:
15+
summary: BadRequestError
16+
value:
17+
message: Bad Request
18+
errors:
19+
- message: "Value Exceeded. Must be between {min} and {max}."
20+
key: common.api.shoesize
21+
context:
22+
max: "50"
23+
min: "1"
524
paths:
25+
/foo:
26+
description: Some random description
27+
get:
28+
operationId: foo
29+
summary: Gets a project's parameters.
30+
responses:
31+
"200":
32+
description: OK
33+
content:
34+
application/json:
35+
schema:
36+
$ref: '#/components/schemas/ParameterMap'
637
/:
738
get:
839
operationId: listVersionsv2
@@ -29,6 +60,8 @@ paths:
2960
links:
3061
- href: http://127.0.0.1:8774/v3/
3162
rel: self
63+
bar:
64+
$ref: '#/components/examples/BadRequestError'
3265

3366
'300':
3467
description: |-

0 commit comments

Comments
 (0)