All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.specmatic.core.pattern.ValueDetails.kt Maven / Gradle / Ivy

Go to download

Turn your contracts into executable specifications. Contract Driven Development - Collaboratively Design & Independently Deploy MicroServices & MicroFrontends.

There is a newer version: 2.0.37
Show newest version
package io.specmatic.core.pattern

data class ValueDetails(val messages: List = emptyList(), private val breadCrumbData: List = emptyList()) {
    fun addDetails(message: String, breadCrumb: String): ValueDetails {
        return ValueDetails(
            messages.addNonBlank(message),
            breadCrumbData.addNonBlank(breadCrumb)
        )
    }

    val breadCrumbs: String
        get() {
            return breadCrumbData.reversed().joinToString(".")
        }

    fun comments(): String? {
        if(messages.isEmpty())
            return null

        val body = messages.joinToString(System.lineSeparator())

        return """
>> $breadCrumbs

   $body
        """.trimIndent()
    }

    private fun List.addNonBlank(
        errorMessage: String
    ) = if (errorMessage.isNotBlank())
        this.plus(errorMessage)
    else
        this
}

fun List.singleLineDescription(): String {
    return this.mapNotNull {
        val message = it.messages.joinToString(" ").trim()
        if (message.isBlank()) null
        else "${it.breadCrumbs} $message"
    }.joinToString(", ")
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy