Versions
Versions are version strings that have been split into their specific components and classifiers for easier usage and readability.
DefaultVersions and DefaultClassifiers¶
The DefaultVersion
and DefaultClassifier
are the most commonly used versions and classifiers,
because they implementation the most important values for their respective types.
The DefaultVersion
contains a components
function as a companion object and the DefaultClassifier
a classifier
function.
They are used to create the specific components or DefaultClassifier
from a version string.
Example
val value = "VERSION"
val components = DefaultVersion.components(value = value, schema = schema)
val classifier = DefaultClassifier.classifier(value = value, schema = schema)
Custom Versions¶
When your version contains special parameters, you may want to create a custom one.
To create a custom Version
, you will first need to create a class
(preferably a data class) that extends Version
and override the value
, components
, classifier
values
and the functions.
Example
data class CustomVersion(
override val value: String
) : Version {
companion object {
fun components(value: String, schema: UpdateSchema): Collection<String> {
TODO("Not yet implemented")
}
}
override fun compareTo(other: Version): Int {
TODO("Not yet implemented")
}
}
CompareTo Function¶
The compareTo function is used to compare a version to another version.
Example
override fun compareTo(other: Version): Int { other as DefaultVersion
if (components.size != other.components.size) throw VersionSizeMismatch("Size of version components are not equal")
components.zip(other.components).forEach { (subVersion, otherSubVersion) ->
if (subVersion != otherSubVersion) return subVersion.compareTo(otherSubVersion)
}
if (classifier != other.classifier) return when {
classifier == null -> 1
other.classifier == null -> -1
else -> return classifier.compareTo(other.classifier)
}
return 0
}
Components Function¶
Note
This function is located inside the companion object to allow invokations without initializing the version
The components function returns a collection of strings (components) from a version string. These components are the individual numbers in the version.
Example
fun components(value: String, schema: UpdateSchema): Collection<String> {
val version = value.replace(schema.prefix, "")
var preSplit = version
for (classifier in schema.classifiers) {
val classifierElement = "${classifier.divider}${classifier.value}"
if (!version.contains(classifierElement)) continue
preSplit = version.split(classifierElement).first()
}
return preSplit.split(schema.divider)
}
Custom Classifiers¶
When your classifier contains special parameters, you may want to create a custom one.
To create a custom Classifier
you will first need to create a class
(preferably a data class) that extends Classifier
and override the value
, priority
, components
values
and the functions.
Example
data class CustomClassifier(
override val value: String
) : Classifier {
companion object {
fun classifier(value: String, schema: UpdateSchema): DefaultClassifier? {
TODO("Not yet implemented")
}
}
override fun compareTo(other: Classifier): Int {
TODO("Not yet implemented")
}
}
CompareTo Function¶
The compareTo function is used to compare a classifier to another version.
Example
override fun compareTo(other: Classifier): Int { other as DefaultClassifier
if (components.size != other.components.size) throw VersionSizeMismatch("Size of classifier components are not equal")
if (components.isEmpty()) return priority.value.compareTo(other.priority.value)
components.zip(other.components).forEach { (subVersion, otherSubVersion) ->
if (subVersion != otherSubVersion) return subVersion.compareTo(otherSubVersion)
}
return 0
}
Classifier Function¶
Note
This function is located inside the companion object to allow invokations without initializing the version
The classifier function returns a classifier from a version string.
The classifier will be paired with the ClassifierPriority
from the UpdateSchema
.
Example
fun classifier(value: String, schema: UpdateSchema): DefaultClassifier? {
val version = value.replace(schema.prefix, "")
for (classifier in schema.classifiers) {
val classifierElement = "${classifier.divider}${classifier.value}"
if (!version.contains(classifierElement)) continue
val value = "$classifierElement${version.split(classifierElement).last()}"
val components = version.split(classifierElement).last().split(classifier.componentDivider)
return DefaultClassifier(value, classifier.priority, components)
}
return null
}