added special case to support UUID field (#19)

This commit is contained in:
Ryan Brink
2021-04-16 09:28:45 -04:00
committed by GitHub
parent 31e038f445
commit fdd18674da
6 changed files with 37 additions and 3 deletions

View File

@ -1,5 +1,11 @@
# Changelog # Changelog
## [0.1.1] - April 16th, 2021
### Added
- Explicit UUID support to prevent incorrect interpretation as complex object
## [0.1.0] - April 16th, 2021 ## [0.1.0] - April 16th, 2021
### Changed ### Changed

View File

@ -1,5 +1,5 @@
# Kompendium # Kompendium
project.version=0.1.0 project.version=0.1.1
# Kotlin # Kotlin
kotlin.code.style=official kotlin.code.style=official
# Gradle # Gradle

View File

@ -1,11 +1,13 @@
package org.leafygreens.kompendium package org.leafygreens.kompendium
import java.lang.reflect.ParameterizedType import java.lang.reflect.ParameterizedType
import java.util.UUID
import kotlin.reflect.KClass import kotlin.reflect.KClass
import kotlin.reflect.KProperty import kotlin.reflect.KProperty
import kotlin.reflect.full.isSubclassOf import kotlin.reflect.full.isSubclassOf
import kotlin.reflect.full.memberProperties import kotlin.reflect.full.memberProperties
import kotlin.reflect.jvm.javaField 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.ArraySchema
import org.leafygreens.kompendium.models.oas.DictionarySchema import org.leafygreens.kompendium.models.oas.DictionarySchema
import org.leafygreens.kompendium.models.oas.EnumSchema 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.leafygreens.kompendium.util.Helpers.toPair
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory
typealias SchemaMap = Map<String, OpenApiSpecComponentSchema>
object Kontent { object Kontent {
private val logger = LoggerFactory.getLogger(javaClass) private val logger = LoggerFactory.getLogger(javaClass)
@ -38,6 +38,7 @@ object Kontent {
clazz == Float::class -> cache.plus(clazz.simpleName!! to FormatSchema("float", "number")) clazz == Float::class -> cache.plus(clazz.simpleName!! to FormatSchema("float", "number"))
clazz == String::class -> cache.plus(clazz.simpleName!! to SimpleSchema("string")) clazz == String::class -> cache.plus(clazz.simpleName!! to SimpleSchema("string"))
clazz == Boolean::class -> cache.plus(clazz.simpleName!! to SimpleSchema("boolean")) 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.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") clazz.typeParameters.isNotEmpty() -> error("Top level generics are not supported by Kompendium")
else -> handleComplexType(clazz, cache) else -> handleComplexType(clazz, cache)

View File

@ -0,0 +1,5 @@
package org.leafygreens.kompendium.models.meta
import org.leafygreens.kompendium.models.oas.OpenApiSpecComponentSchema
typealias SchemaMap = Map<String, OpenApiSpecComponentSchema>

View File

@ -1,5 +1,6 @@
package org.leafygreens.kompendium package org.leafygreens.kompendium
import java.util.UUID
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertFailsWith 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.TestSimpleWithEnums
import org.leafygreens.kompendium.util.TestSimpleWithList import org.leafygreens.kompendium.util.TestSimpleWithList
import org.leafygreens.kompendium.util.TestSimpleWithMap import org.leafygreens.kompendium.util.TestSimpleWithMap
import org.leafygreens.kompendium.util.TestWithUUID
internal class KontentTest { internal class KontentTest {
@ -166,4 +168,21 @@ internal class KontentTest {
assertFailsWith<java.lang.IllegalStateException> { generateKontent(clazz) } assertFailsWith<java.lang.IllegalStateException> { 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)
}
} }

View File

@ -1,5 +1,6 @@
package org.leafygreens.kompendium.util package org.leafygreens.kompendium.util
import java.util.UUID
import org.leafygreens.kompendium.annotations.KompendiumField import org.leafygreens.kompendium.annotations.KompendiumField
import org.leafygreens.kompendium.annotations.KompendiumRequest import org.leafygreens.kompendium.annotations.KompendiumRequest
import org.leafygreens.kompendium.annotations.KompendiumResponse 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 TestNested(val nesty: String)
data class TestWithUUID(val id: UUID)
@KompendiumRequest("Example Request") @KompendiumRequest("Example Request")
data class TestRequest( data class TestRequest(
@KompendiumField(name = "field_name") @KompendiumField(name = "field_name")