io.specmatic.core.pattern.ValueDetails.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of specmatic-core Show documentation
Show all versions of specmatic-core Show documentation
Turn your contracts into executable specifications. Contract Driven Development - Collaboratively Design & Independently Deploy MicroServices & MicroFrontends.
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(", ")
}