From 45a90d1353191f452a273e49e8a3c2ab60f725d6 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 1 Apr 2019 01:51:18 -0700 Subject: [PATCH] Added separator, pre-release and metada prefixes. --- .../net/thauvin/erik/semver/Constants.java | 28 ++++++- .../java/net/thauvin/erik/semver/Version.java | 20 ++++- .../net/thauvin/erik/semver/VersionInfo.java | 79 +++++++++++++++++-- .../thauvin/erik/semver/VersionProcessor.java | 6 ++ src/main/resources/semver-kt.mustache | 21 ++--- src/main/resources/semver.mustache | 20 +++-- .../thauvin/erik/semver/VersionInfoTest.java | 68 ++++++++++++++++ 7 files changed, 207 insertions(+), 35 deletions(-) diff --git a/src/main/java/net/thauvin/erik/semver/Constants.java b/src/main/java/net/thauvin/erik/semver/Constants.java index 6dee004..140f405 100644 --- a/src/main/java/net/thauvin/erik/semver/Constants.java +++ b/src/main/java/net/thauvin/erik/semver/Constants.java @@ -39,6 +39,10 @@ package net.thauvin.erik.semver; * @since 1.0 */ public final class Constants { + /** + * The default metadata prefix. + */ + public static final String DEFAULT_BUILDMETA_PREFIX = "+"; /** * The default class name. */ @@ -54,7 +58,7 @@ public final class Constants { /** * The default keys prefix. */ - public static final String DEFAULT_KEYS_PREFIX = "version." ; + public static final String DEFAULT_KEYS_PREFIX = "version."; /** * The default Kotlin mustache template. */ @@ -71,6 +75,14 @@ public final class Constants { * The default patch version. */ public static final int DEFAULT_PATCH = 0; + /** + * The default prerelease prefix. + */ + public static final String DEFAULT_PRERELEASE_PREFIX = "-"; + /** + * The default version separator. + */ + public static final String DEFAULT_SEPARATOR = "."; /** * The default mustache template. */ @@ -87,6 +99,10 @@ public final class Constants { * The build metadata property key. */ public static final String KEY_VERSION_BUILDMETA = "buildmeta"; + /** + * The build metadata prefix property key. + */ + public static final String KEY_VERSION_BUILDMETA_PREFIX = "buildmeta.prefix"; /** * The major version property key. */ @@ -103,10 +119,18 @@ public final class Constants { * The pre-release version property key. */ public static final String KEY_VERSION_PRERELEASE = "prerelease"; + /** + * The pre-release prefix property key. + */ + public static final String KEY_VERSION_PRERELEASE_PREFIX = "prerelease.prefix"; /** * The project property key. */ public static final String KEY_VERSION_PROJECT = "project"; + /** + * The version separator property key. + */ + public static final String KEY_VERSION_SEPARATOR = "separator"; /** * The kotlin type. */ @@ -119,7 +143,7 @@ public final class Constants { * @throws UnsupportedOperationException if the constructor is called. */ private Constants() - throws UnsupportedOperationException { + throws UnsupportedOperationException { throw new UnsupportedOperationException("Illegal constructor call."); } } diff --git a/src/main/java/net/thauvin/erik/semver/Version.java b/src/main/java/net/thauvin/erik/semver/Version.java index a08935c..8550d42 100644 --- a/src/main/java/net/thauvin/erik/semver/Version.java +++ b/src/main/java/net/thauvin/erik/semver/Version.java @@ -50,8 +50,14 @@ public @interface Version { String buildMetaKey() default Constants.KEY_VERSION_BUILDMETA; + String buildMetaPrefix() default Constants.DEFAULT_BUILDMETA_PREFIX; + + String buildMetaPrefixKey() default Constants.KEY_VERSION_BUILDMETA_PREFIX; + String className() default Constants.DEFAULT_CLASS_NAME; + String keysPrefix() default Constants.DEFAULT_KEYS_PREFIX; + int major() default Constants.DEFAULT_MAJOR; String majorKey() default Constants.KEY_VERSION_MAJOR; @@ -60,25 +66,31 @@ public @interface Version { String minorKey() default Constants.KEY_VERSION_MINOR; - int patch() default Constants.DEFAULT_PATCH; - String packageName() default Constants.EMPTY; + int patch() default Constants.DEFAULT_PATCH; + String patchKey() default Constants.KEY_VERSION_PATCH; String preRelease() default Constants.EMPTY; String preReleaseKey() default Constants.KEY_VERSION_PRERELEASE; + String preReleasePrefix() default Constants.DEFAULT_PRERELEASE_PREFIX; + + String preReleasePrefixKey() default Constants.KEY_VERSION_PRERELEASE_PREFIX; + String project() default Constants.EMPTY; String projectKey() default Constants.KEY_VERSION_PROJECT; String properties() default Constants.EMPTY; + String separator() default Constants.DEFAULT_SEPARATOR; + + String separatorKey() default Constants.KEY_VERSION_SEPARATOR; + String template() default Constants.DEFAULT_JAVA_TEMPLATE; String type() default Constants.DEFAULT_JAVA_TYPE; - - String keysPrefix() default Constants.DEFAULT_KEYS_PREFIX; } diff --git a/src/main/java/net/thauvin/erik/semver/VersionInfo.java b/src/main/java/net/thauvin/erik/semver/VersionInfo.java index 8475f2b..6f88cf6 100644 --- a/src/main/java/net/thauvin/erik/semver/VersionInfo.java +++ b/src/main/java/net/thauvin/erik/semver/VersionInfo.java @@ -42,13 +42,16 @@ public class VersionInfo { private final long epoch = System.currentTimeMillis(); private String buildMeta; + private String buildMetaPrefix; private String className; private int major; private int minor; private String packageName; private int patch; private String preRelease; + private String preReleasePrefix; private String project; + private String separator; /** @@ -59,7 +62,10 @@ public class VersionInfo { minor = Constants.DEFAULT_MINOR; patch = Constants.DEFAULT_PATCH; buildMeta = Constants.EMPTY; + buildMetaPrefix = Constants.DEFAULT_BUILDMETA_PREFIX; preRelease = Constants.EMPTY; + preReleasePrefix = Constants.DEFAULT_PRERELEASE_PREFIX; + separator = Constants.DEFAULT_SEPARATOR; project = Constants.EMPTY; className = Constants.DEFAULT_CLASS_NAME; packageName = Constants.EMPTY; @@ -75,7 +81,10 @@ public class VersionInfo { minor = version.minor(); patch = version.patch(); buildMeta = version.buildMeta(); + buildMetaPrefix = version.buildMetaPrefix(); preRelease = version.preRelease(); + preReleasePrefix = version.preReleasePrefix(); + separator = version.separator(); project = version.project(); className = version.className(); packageName = version.packageName(); @@ -99,6 +108,24 @@ public class VersionInfo { this.buildMeta = buildMeta; } + /** + * Returns the meta-data prefix. + * + * @return The meta-data prefix. + */ + public String getBuildMetaPrefix() { + return buildMetaPrefix; + } + + /** + * Sets the meta-data prefix. + * + * @param buildMetaPrefix The meta-data prefix. + */ + public void setBuildMetaPrefix(String buildMetaPrefix) { + this.buildMetaPrefix = buildMetaPrefix; + } + /** * Returns the class name. * @@ -216,6 +243,24 @@ public class VersionInfo { this.preRelease = preRelease; } + /** + * Returns the pre-release prefix. + * + * @return The pre-release prefix. + */ + public String getPreReleasePrefix() { + return preReleasePrefix; + } + + /** + * Sets the pre-release prefix. + * + * @param preReleasePrefix The new pre-release prefix. + */ + public void setPreReleasePrefix(String preReleasePrefix) { + this.preReleasePrefix = preReleasePrefix; + } + /** * Returns the project name. * @@ -234,11 +279,29 @@ public class VersionInfo { this.project = project; } + /** + * Returns the version separator. + * + * @return The version separator. + */ + public String getSeparator() { + return separator; + } + + /** + * Setsthe version separtor. + * + * @param separator The new version separator. + */ + public void setSeparator(String separator) { + this.separator = separator; + } + /** * Returns the full version string. *

* Formatted as: - *

MAJOR.MINOR.PATCH[-PRERELEASE][+BUILDMETADATA]
+ *
[MAJOR][SEPARATOR][MINOR][SEPARATOR][PATCH][[PRERELEASE-PREFIX][PRERELEASE]][[BUILDMETA-PREFIX][BUILDMETA]]
*

* For example: *

*/ - public final static String VERSION = Integer.toString(MAJOR) + '.' - + Integer.toString(MINOR) + '.' - + Integer.toString(PATCH) - + preReleaseWithPrefix() + buildMetaWithPrefix(); + public final static String VERSION = Integer.toString(MAJOR) + SEPARATOR + Integer.toString(MINOR) + SEPARATOR + + Integer.toString(PATCH) + preReleaseWithPrefix() + buildMetaWithPrefix(); /** * Disables the default constructor. @@ -70,7 +68,7 @@ public final class {{className}} { * @return The build metadata, if any. */ public static String buildMetaWithPrefix(final String prefix) { - if (BUILDMETA.length() > 0 && prefix.length() > 0) { + if (BUILDMETA.length() > 0) { return prefix + BUILDMETA; } else { return BUILDMETA; @@ -93,10 +91,10 @@ public final class {{className}} { * @return The pre-release version, if any. */ public static String preReleaseWithPrefix(final String prefix) { - if (PRERELEASE.length() > 0 && prefix.length() > 0) { + if (PRERELEASE.length() > 0) { return prefix + PRERELEASE; } else { return PRERELEASE; } } -} \ No newline at end of file +} diff --git a/src/test/java/net/thauvin/erik/semver/VersionInfoTest.java b/src/test/java/net/thauvin/erik/semver/VersionInfoTest.java index ee8e942..4682f2e 100644 --- a/src/test/java/net/thauvin/erik/semver/VersionInfoTest.java +++ b/src/test/java/net/thauvin/erik/semver/VersionInfoTest.java @@ -73,9 +73,28 @@ public class VersionInfoTest { Assert.assertEquals(versionInfo.getVersion(), "3.2.1-beta+001", "getVersion(3.2.1-beta+001)"); + versionInfo.setPreReleasePrefix("+"); + + Assert.assertEquals(versionInfo.getVersion(), "3.2.1+beta+001", "getVersion(3.2.1+beta+001)"); + + versionInfo.setPreReleasePrefix("-"); + versionInfo.setPreRelease(""); Assert.assertEquals(versionInfo.getVersion(), "3.2.1+001", "getVersion(3.2.1+001)"); + + versionInfo.setBuildMetaPrefix("."); + + Assert.assertEquals(versionInfo.getVersion(), "3.2.1.001", "getVersion(3.2.1.001)"); + + versionInfo.setBuildMetaPrefix("+"); + + versionInfo.setSeparator("-"); + + Assert.assertEquals(versionInfo.getVersion(), "3-2-1+001", "getVersion(3-2-1+001)"); + + versionInfo.setSeparator("."); + } @Test @@ -107,6 +126,19 @@ public class VersionInfoTest { Assert.assertEquals(versionInfo.getVersion(), "1.2.3-alpha+001", "getVersion(1.2.3-alpha+001)"); + versionInfo.setBuildMeta("1"); + versionInfo.setBuildMetaPrefix(""); + + Assert.assertEquals(versionInfo.getBuildMetaPrefix(), "", "getBuildMetaPrefix( )"); + + Assert.assertEquals(versionInfo.getVersion(), "1.2.3-alpha1", "getVersion(1.2.3-alpha1)"); + + versionInfo.setPreReleasePrefix("."); + + Assert.assertEquals(versionInfo.getPreReleasePrefix(), ".", "getPreReleasePrefix(.)"); + + Assert.assertEquals(versionInfo.getVersion(), "1.2.3.alpha1", "getVersion(1.2.3.alpha1)"); + versionInfo.setProject("My Example"); Assert.assertEquals(versionInfo.getProject(), "My Example", "getProject(My Example)"); @@ -133,8 +165,14 @@ public class VersionInfoTest { Assert.assertEquals(versionInfo.getPreRelease(), version.preRelease(), "getPreRelease(preRelease)"); + Assert.assertEquals(versionInfo.getPreReleasePrefix(), version.preReleasePrefix(), + "getPreReleasePrefix(preReleasePrefix)"); + Assert.assertEquals(versionInfo.getBuildMeta(), version.buildMeta(), "getBuildMeta(buildMeta)"); + Assert.assertEquals(versionInfo.getBuildMetaPrefix(), version.buildMetaPrefix(), + "getBuildMetaPrefix(buildMetaPrefix)"); + Assert.assertEquals(versionInfo.getPackageName(), version.packageName(), "getPackageName(packageName)"); @@ -173,6 +211,16 @@ class VersionTest implements Version { return "build.meta"; } + @Override + public String buildMetaPrefix() { + return "+"; + } + + @Override + public String buildMetaPrefixKey() { + return "build.meta.prefix"; + } + @Override public String className() { return "MyTest"; @@ -228,6 +276,16 @@ class VersionTest implements Version { return "build.prerelease"; } + @Override + public String preReleasePrefix() { + return "-"; + } + + @Override + public String preReleasePrefixKey() { + return "build.prerelase.prefix"; + } + @Override public String project() { return "My Test Project"; @@ -243,6 +301,16 @@ class VersionTest implements Version { return "test.properties"; } + @Override + public String separator() { + return "."; + } + + @Override + public String separatorKey() { + return "build.separator"; + } + @Override public String template() { return "myversion.mustache";