Skip to content

Instantly share code, notes, and snippets.

@zionyx
Forked from michaellihs/SemVer.groovy
Created March 12, 2020 15:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zionyx/6361097179d4436ec17766b5c3c2bffd to your computer and use it in GitHub Desktop.
Save zionyx/6361097179d4436ec17766b5c3c2bffd to your computer and use it in GitHub Desktop.
Semantic Versioning class for Groovy
enum PatchLevel {
MAJOR, MINOR, PATCH
}
class SemVer implements Serializable {
private int major, minor, patch
SemVer(String version) {
def versionParts = version.tokenize('.')
println versionParts
if (versionParts.size != 3) {
throw new IllegalArgumentException("Wrong version format - expected MAJOR.MINOR.PATCH - got ${version}")
}
this.major = versionParts[0].toInteger()
this.minor = versionParts[1].toInteger()
this.patch = versionParts[2].toInteger()
}
SemVer(int major, int minor, int patch) {
this.major = major
this.minor = minor
this.patch = patch
}
SemVer bump(PatchLevel patchLevel) {
switch (patchLevel) {
case PatchLevel.MAJOR:
return new SemVer(major + 1, 0, 0)
break
case PatchLevel.MINOR:
return new SemVer(major, minor + 1, 0)
break
case PatchLevel.PATCH:
return new SemVer(major, minor, patch + 1)
break
}
return new SemVer()
}
String toString() {
return "${major}.${minor}.${patch}"
}
}
def version = new SemVer("0.0.1")
println(version.bump(PatchLevel.MAJOR).toString())
println(version.bump(PatchLevel.MINOR).toString())
println(version.bump(PatchLevel.PATCH).toString())
/*
will output
1.0.0
0.1.0
0.0.2
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment