From fdd18674da4b2b36e57a183c43cd1fe362baf83b Mon Sep 17 00:00:00 2001 From: Ryan Brink <5607577+rgbrizzlehizzle@users.noreply.github.com> Date: Fri, 16 Apr 2021 09:28:45 -0400 Subject: [PATCH] added special case to support UUID field (#19) --- CHANGELOG.md | 6 ++++++ gradle.properties | 2 +- .../org/leafygreens/kompendium/Kontent.kt | 5 +++-- .../kompendium/models/meta/SchemaMap.kt | 5 +++++ .../org/leafygreens/kompendium/KontentTest.kt | 19 +++++++++++++++++++ .../leafygreens/kompendium/util/TestModels.kt | 3 +++ 6 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 kompendium-core/src/main/kotlin/org/leafygreens/kompendium/models/meta/SchemaMap.kt diff --git a/CHANGELOG.md b/CHANGELOG.md index cfaaed3f3..99baf59f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## [0.1.1] - April 16th, 2021 + +### Added + +- Explicit UUID support to prevent incorrect interpretation as complex object + ## [0.1.0] - April 16th, 2021 ### Changed diff --git a/gradle.properties b/gradle.properties index aed8ca9c8..6a1f69e13 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ # Kompendium -project.version=0.1.0 +project.version=0.1.1 # Kotlin kotlin.code.style=official # Gradle diff --git a/kompendium-core/src/main/kotlin/org/leafygreens/kompendium/Kontent.kt b/kompendium-core/src/main/kotlin/org/leafygreens/kompendium/Kontent.kt index 11eeb2d35..011e07e69 100644 --- a/kompendium-core/src/main/kotlin/org/leafygreens/kompendium/Kontent.kt +++ b/kompendium-core/src/main/kotlin/org/leafygreens/kompendium/Kontent.kt @@ -1,11 +1,13 @@ package org.leafygreens.kompendium import java.lang.reflect.ParameterizedType +import java.util.UUID import kotlin.reflect.KClass import kotlin.reflect.KProperty import kotlin.reflect.full.isSubclassOf import kotlin.reflect.full.memberProperties import kotlin.reflect.jvm.javaField +import org.leafygreens.kompendium.models.meta.SchemaMap import org.leafygreens.kompendium.models.oas.ArraySchema import org.leafygreens.kompendium.models.oas.DictionarySchema import org.leafygreens.kompendium.models.oas.EnumSchema @@ -20,8 +22,6 @@ import org.leafygreens.kompendium.util.Helpers.logged import org.leafygreens.kompendium.util.Helpers.toPair import org.slf4j.LoggerFactory -typealias SchemaMap = Map - object Kontent { private val logger = LoggerFactory.getLogger(javaClass) @@ -38,6 +38,7 @@ object Kontent { clazz == Float::class -> cache.plus(clazz.simpleName!! to FormatSchema("float", "number")) clazz == String::class -> cache.plus(clazz.simpleName!! to SimpleSchema("string")) clazz == Boolean::class -> cache.plus(clazz.simpleName!! to SimpleSchema("boolean")) + clazz == UUID::class -> cache.plus(clazz.simpleName!! to FormatSchema("uuid", "string")) clazz.isSubclassOf(Enum::class) -> error("Top level enums are currently not supported by Kompendium") clazz.typeParameters.isNotEmpty() -> error("Top level generics are not supported by Kompendium") else -> handleComplexType(clazz, cache) diff --git a/kompendium-core/src/main/kotlin/org/leafygreens/kompendium/models/meta/SchemaMap.kt b/kompendium-core/src/main/kotlin/org/leafygreens/kompendium/models/meta/SchemaMap.kt new file mode 100644 index 000000000..d2d7e9651 --- /dev/null +++ b/kompendium-core/src/main/kotlin/org/leafygreens/kompendium/models/meta/SchemaMap.kt @@ -0,0 +1,5 @@ +package org.leafygreens.kompendium.models.meta + +import org.leafygreens.kompendium.models.oas.OpenApiSpecComponentSchema + +typealias SchemaMap = Map diff --git a/kompendium-core/src/test/kotlin/org/leafygreens/kompendium/KontentTest.kt b/kompendium-core/src/test/kotlin/org/leafygreens/kompendium/KontentTest.kt index a1e6c2597..be0e7e687 100644 --- a/kompendium-core/src/test/kotlin/org/leafygreens/kompendium/KontentTest.kt +++ b/kompendium-core/src/test/kotlin/org/leafygreens/kompendium/KontentTest.kt @@ -1,5 +1,6 @@ package org.leafygreens.kompendium +import java.util.UUID import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertFailsWith @@ -16,6 +17,7 @@ import org.leafygreens.kompendium.util.TestSimpleWithEnumList import org.leafygreens.kompendium.util.TestSimpleWithEnums import org.leafygreens.kompendium.util.TestSimpleWithList import org.leafygreens.kompendium.util.TestSimpleWithMap +import org.leafygreens.kompendium.util.TestWithUUID internal class KontentTest { @@ -166,4 +168,21 @@ internal class KontentTest { assertFailsWith { generateKontent(clazz) } } + @Test + fun `UUID schema support`() { + // when + val clazz = TestWithUUID::class + + // do + val result = generateKontent(clazz) + + // expect + assertNotNull(result) + assertEquals(2, result.count()) + assertTrue { result.containsKey(UUID::class.simpleName) } + assertTrue { result.containsKey(clazz.simpleName) } + val expectedSchema = result[UUID::class.simpleName] as FormatSchema + assertEquals(FormatSchema("uuid", "string"), expectedSchema) + } + } diff --git a/kompendium-core/src/test/kotlin/org/leafygreens/kompendium/util/TestModels.kt b/kompendium-core/src/test/kotlin/org/leafygreens/kompendium/util/TestModels.kt index abe6c8697..071bf4542 100644 --- a/kompendium-core/src/test/kotlin/org/leafygreens/kompendium/util/TestModels.kt +++ b/kompendium-core/src/test/kotlin/org/leafygreens/kompendium/util/TestModels.kt @@ -1,5 +1,6 @@ package org.leafygreens.kompendium.util +import java.util.UUID import org.leafygreens.kompendium.annotations.KompendiumField import org.leafygreens.kompendium.annotations.KompendiumRequest import org.leafygreens.kompendium.annotations.KompendiumResponse @@ -22,6 +23,8 @@ data class TestParams(val a: String, val aa: Int) data class TestNested(val nesty: String) +data class TestWithUUID(val id: UUID) + @KompendiumRequest("Example Request") data class TestRequest( @KompendiumField(name = "field_name")