diff --git a/README.md b/README.md index 352e159f8..4fae6e8d5 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,9 @@ The project is very much Work In Progress and will be published on maven central # Release Notes BOAT is still under development and subject to change. +## 0.14.7 +* *Boat Marina* + * Exports flatObjects as a model to prevent errors with references ## 0.14.6 * *Maven Plugin* * Added `boat:ship` mojo to automagically zip specs found in `src/main/resources` and attach it to the project reactor so `mvn install` or `mvn deploy` will also include a zip archive of the project with with `api` classifier diff --git a/boat-engine/pom.xml b/boat-engine/pom.xml index e7441f412..5e032c153 100644 --- a/boat-engine/pom.xml +++ b/boat-engine/pom.xml @@ -5,7 +5,7 @@ com.backbase.oss backbase-openapi-tools - 0.14.6 + 0.14.7-SNAPSHOT boat-engine jar diff --git a/boat-maven-plugin/pom.xml b/boat-maven-plugin/pom.xml index e0f282ba1..b354a51a2 100644 --- a/boat-maven-plugin/pom.xml +++ b/boat-maven-plugin/pom.xml @@ -6,7 +6,7 @@ com.backbase.oss backbase-openapi-tools - 0.14.6 + 0.14.7-SNAPSHOT boat-maven-plugin diff --git a/boat-quay/boat-quay-lint/pom.xml b/boat-quay/boat-quay-lint/pom.xml index 1997cff9d..f88d1f1b2 100644 --- a/boat-quay/boat-quay-lint/pom.xml +++ b/boat-quay/boat-quay-lint/pom.xml @@ -5,7 +5,7 @@ com.backbase.oss boat-quay - 0.14.6 + 0.14.7-SNAPSHOT boat-quay-lint jar diff --git a/boat-quay/boat-quay-rules/pom.xml b/boat-quay/boat-quay-rules/pom.xml index 9b4508cbd..0da15d652 100644 --- a/boat-quay/boat-quay-rules/pom.xml +++ b/boat-quay/boat-quay-rules/pom.xml @@ -5,7 +5,7 @@ com.backbase.oss boat-quay - 0.14.6 + 0.14.7-SNAPSHOT boat-quay-rules jar diff --git a/boat-quay/pom.xml b/boat-quay/pom.xml index 4fd72a2e3..03a5035fc 100644 --- a/boat-quay/pom.xml +++ b/boat-quay/pom.xml @@ -5,7 +5,7 @@ com.backbase.oss backbase-openapi-tools - 0.14.6 + 0.14.7-SNAPSHOT diff --git a/boat-scaffold/pom.xml b/boat-scaffold/pom.xml index ba69e6d9b..9bf5c514d 100644 --- a/boat-scaffold/pom.xml +++ b/boat-scaffold/pom.xml @@ -5,7 +5,7 @@ com.backbase.oss backbase-openapi-tools - 0.14.6 + 0.14.7-SNAPSHOT boat-scaffold @@ -86,7 +86,7 @@ com.backbase.oss boat-trail-resources - 0.14.6 + 0.14.7-SNAPSHOT test diff --git a/boat-scaffold/src/main/java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java b/boat-scaffold/src/main/java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java index e1ee165e2..7584cd0a6 100644 --- a/boat-scaffold/src/main/java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java +++ b/boat-scaffold/src/main/java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java @@ -20,6 +20,7 @@ import org.openapitools.codegen.CodegenModel; import org.openapitools.codegen.CodegenParameter; import org.openapitools.codegen.CodegenResponse; +import org.openapitools.codegen.utils.ModelUtils; import java.io.IOException; import java.nio.charset.Charset; @@ -65,9 +66,16 @@ public void preprocessOpenAPI(OpenAPI openAPI) { } if (openAPI.getComponents().getExamples() != null) { - Set imports = new HashSet<>(); additionalProperties.put("examples", openAPI.getComponents().getExamples().entrySet().stream() - .map(exampleEntry -> mapComponentExample(imports, exampleEntry)) + .map(this::mapComponentExample) + .collect(Collectors.toList())); + } + + // We need freeForm objects as models as well, since they are being referenced with $ref + if (openAPI.getComponents().getSchemas() != null) { + additionalProperties.put("freeFormModels", openAPI.getComponents().getSchemas().entrySet().stream() + .filter(freeFormModel -> ModelUtils.isFreeFormObject(freeFormModel.getValue())) + .map(this::mapFreeFormObject) .collect(Collectors.toList())); } @@ -90,12 +98,17 @@ private CodegenParameter mapComponentRequestBody(Set imports, java.util. return fromRequestBody(requestBody, imports, name); } - private BoatExample mapComponentExample(Set imports, Map.Entry namedExample) { + private BoatExample mapComponentExample( Map.Entry namedExample) { String key = namedExample.getKey(); Example example = namedExample.getValue(); return new BoatExample(key,"", example , false); } + private Object mapFreeFormObject(Map.Entry freeFormObject) {//NOSONAR + String name = freeFormObject.getKey(); + return fromModel(name, freeFormObject.getValue()); + } + private CodegenParameter mapComponentParameter(Set imports, java.util.Map.Entry nameParameter) { Parameter parameter = nameParameter.getValue(); return fromParameter(parameter, imports); diff --git a/boat-scaffold/src/main/templates/boat-marina/api.js.handlebars b/boat-scaffold/src/main/templates/boat-marina/api.js.handlebars index 1b121a32a..32c92cd7e 100644 --- a/boat-scaffold/src/main/templates/boat-marina/api.js.handlebars +++ b/boat-scaffold/src/main/templates/boat-marina/api.js.handlebars @@ -47,12 +47,13 @@ const data = { data["parameters"]["{{paramName}}"] = {{{jsonSchema}}}; {{/each}} +{{#each freeFormModels}} + data.models["{{name}}"] = {{{json .}}}; +{{/each}} {{#each swagger.vendorExtensions.x-shared-errors}} let err = {{{json .}}}; data["errors"][err.errorID] = err; {{/each}} - - module.exports = { data }; \ No newline at end of file diff --git a/boat-scaffold/src/test/java/com/backbase/oss/codegen/marina/BoatMarinaTest.java b/boat-scaffold/src/test/java/com/backbase/oss/codegen/marina/BoatMarinaTest.java index 0da0acccf..682f51b63 100644 --- a/boat-scaffold/src/test/java/com/backbase/oss/codegen/marina/BoatMarinaTest.java +++ b/boat-scaffold/src/test/java/com/backbase/oss/codegen/marina/BoatMarinaTest.java @@ -2,7 +2,6 @@ import com.backbase.oss.boat.loader.OpenAPILoader; import com.backbase.oss.boat.loader.OpenAPILoaderException; -import com.backbase.oss.codegen.doc.BoatDocsGenerator; import io.swagger.v3.oas.models.OpenAPI; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; @@ -42,6 +41,11 @@ void testGenerateDocs() throws IOException { File index = new File("target/marina-docs/api.js"); String generated = String.join(" ", Files.readAllLines(Paths.get(index.getPath()))); assertTrue(generated.startsWith("/**")); + assertTrue(generated.contains("Simple API overview")); + assertTrue(generated.contains("appDescription: \"No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\",")); + assertTrue(generated.contains("data.examples[\"BadRequestError\"]")); + assertTrue(generated.contains("data.models[\"ParameterMap\"]")); + } @@ -53,7 +57,7 @@ protected File getFile(String name) { } - private static void generateDocs(File spec) { + private static void generateDocs(File spec) throws IOException { log.info("Generate docs for: {}", spec); OpenAPI openAPI = null; try { diff --git a/boat-scaffold/src/test/resources/openapi-with-examples/openapi-with-json.yaml b/boat-scaffold/src/test/resources/openapi-with-examples/openapi-with-json.yaml index de066b028..0b1572413 100644 --- a/boat-scaffold/src/test/resources/openapi-with-examples/openapi-with-json.yaml +++ b/boat-scaffold/src/test/resources/openapi-with-examples/openapi-with-json.yaml @@ -2,7 +2,38 @@ openapi: "3.0.0" info: title: Simple API overview version: 2.0.0 +components: + schemas: + ParameterMap: + type: object + additionalProperties: + type: object + example: + enable_payments: true + examples: + BadRequestError: + summary: BadRequestError + value: + message: Bad Request + errors: + - message: "Value Exceeded. Must be between {min} and {max}." + key: common.api.shoesize + context: + max: "50" + min: "1" paths: + /foo: + description: Some random description + get: + operationId: foo + summary: Gets a project's parameters. + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/ParameterMap' /: get: operationId: listVersionsv2 @@ -29,6 +60,8 @@ paths: links: - href: http://127.0.0.1:8774/v3/ rel: self + bar: + $ref: '#/components/examples/BadRequestError' '300': description: |- diff --git a/boat-terminal/pom.xml b/boat-terminal/pom.xml index 5be5a7121..bf9c6d90a 100644 --- a/boat-terminal/pom.xml +++ b/boat-terminal/pom.xml @@ -5,7 +5,7 @@ com.backbase.oss backbase-openapi-tools - 0.14.6 + 0.14.7-SNAPSHOT boat-terminal diff --git a/boat-trail-resources/pom.xml b/boat-trail-resources/pom.xml index b8a4b1cfb..957055c3b 100644 --- a/boat-trail-resources/pom.xml +++ b/boat-trail-resources/pom.xml @@ -5,7 +5,7 @@ com.backbase.oss backbase-openapi-tools - 0.14.6 + 0.14.7-SNAPSHOT boat-trail-resources diff --git a/pom.xml b/pom.xml index e6386394d..31513bc12 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.backbase.oss backbase-openapi-tools - 0.14.6 + 0.14.7-SNAPSHOT pom Backbase Open Api Tools will help you converting RAML to OpenAPI plus many more diff --git a/tests/pom.xml b/tests/pom.xml index e492540fc..9aaea49f2 100644 --- a/tests/pom.xml +++ b/tests/pom.xml @@ -5,7 +5,7 @@ com.backbase.oss backbase-openapi-tools - 0.14.6 + 0.14.7-SNAPSHOT tests