in.specmatic.core.URLParts.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.
Deprecation Notice for group ID "in.specmatic"
******************************************************************************************************
Updates for "specmatic-core" will no longer be available under the deprecated group ID "in.specmatic".
Please update your dependencies to use the new group ID "io.specmatic".
******************************************************************************************************
package `in`.specmatic.core
private const val MIN_URL_PARTS_WHEN_PATH_EXISTS = 4
private const val QUERY_PARAM_START_CHAR = '?'
class URLParts(url: String) {
private val queryStartIndex = url.indexOf(QUERY_PARAM_START_CHAR)
private val baseUrl = if (queryStartIndex != -1) url.substring(0, queryStartIndex) else url
val parts = baseUrl.split("/", limit = MIN_URL_PARTS_WHEN_PATH_EXISTS)
private val queryOnwards = if (queryStartIndex != -1) url.substring(queryStartIndex) else ""
fun withEncodedPathSegments(): String {
if(noPathInURL())
return baseUrl
val (scheme, _, authority, path) = parts
val escapedPath = escapeSpaceInPath(path)
return "$scheme//$authority/$escapedPath$queryOnwards"
}
fun withDecodedPathSegments(): String {
if(noPathInURL())
return baseUrl
val (scheme, _, authority, path) = parts
val escapedPath = decodePath(path)
return "$scheme//$authority/$escapedPath$queryOnwards"
}
private fun noPathInURL() = parts.size < MIN_URL_PARTS_WHEN_PATH_EXISTS
}