From 48eeada6a9b01a23087cead43e864cdab18c408a Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Thu, 29 Feb 2024 20:17:20 -0800 Subject: [PATCH 01/24] Fixed Maven Central badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8cf4669..54d287d 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![bld](https://img.shields.io/badge/1.9.0-FA9052?label=bld&labelColor=2392FF)](https://rife2.com/bld) [![GitHub release (latest by date)](https://img.shields.io/github/v/release/rife2/rife2-template-renderers)](https://github.com/rife2/rife2-template-renderers/releases/latest) [![Release](https://flat.badgen.net/maven/v/metadata-url/repo.rife2.com/releases/com/uwyn/rife2/rife2-renderers/maven-metadata.xml?color=blue)](https://repo.rife2.com/#/releases/com/uwyn/rife2/rife2-renderers) -[![Maven Central](https://img.shields.io/maven-central/v/com.uwyn.rife2/rife2-renderers)](https://central.sonatype.com/artifact/com.uwyn.rife2/rife2-renderers/1.1.0) +[![Maven Central](https://img.shields.io/maven-central/v/com.uwyn.rife2/rife2-renderers)](https://central.sonatype.com/artifact/com.uwyn.rife2/rife2-renderers/) [![Nexus Snapshot](https://img.shields.io/nexus/s/com.uwyn.rife2/rife2-renderers?server=https%3A%2F%2Fs01.oss.sonatype.org%2F)](https://s01.oss.sonatype.org/content/repositories/snapshots/com/uwyn/rife2/rife2-renderers/) [![GitHub CI](https://github.com/rife2/rife2-template-renderers/actions/workflows/bld.yml/badge.svg)](https://github.com/rife2/rife2-template-renderers/actions/workflows/bld.yml) [![Tests](https://rife2.com/tests-badge/badge/com.uwyn.rife2/rife2-renderers)](https://github.com/rife2/rife2-template-renderers/actions/workflows/gradle.yml) From 0b24f08cb1d6c3e4e3457128231c8c6f38b5feed Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Thu, 21 Mar 2024 14:00:47 -0700 Subject: [PATCH 02/24] Added JDK 22 to CI --- .github/workflows/bld.yml | 9 +++++---- lib/bld/bld-wrapper.jar | Bin 27319 -> 27319 bytes 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/bld.yml b/.github/workflows/bld.yml index c18777f..5b1de3b 100644 --- a/.github/workflows/bld.yml +++ b/.github/workflows/bld.yml @@ -1,6 +1,6 @@ name: bld-ci -on: [ push, pull_request, workflow_dispatch ] +on: [push, pull_request, workflow_dispatch] jobs: build-bld-project: @@ -8,7 +8,7 @@ jobs: strategy: matrix: - java-version: [ 17, 20 ] + java-version: [17, 21, 22] steps: - name: Checkout source repository @@ -19,7 +19,7 @@ jobs: - name: Set up JDK ${{ matrix.java-version }} uses: actions/setup-java@v3 with: - distribution: 'zulu' + distribution: "zulu" java-version: ${{ matrix.java-version }} - name: Grant execute permission for bld @@ -32,4 +32,5 @@ jobs: run: >- ./bld compile test -DtestsBadgeUrl=https://rife2.com/tests-badge/update/com.uwyn.rife2/rife2-renderers - -DtestsBadgeApiKey=${{ secrets.TESTS_BADGE_API_KEY }} \ No newline at end of file + -DtestsBadgeApiKey=${{ secrets.TESTS_BADGE_API_KEY }} + diff --git a/lib/bld/bld-wrapper.jar b/lib/bld/bld-wrapper.jar index 15c39db9094e2acb2b57fd87a89fd60100611c56..5e81e4b896acedbdf27a2e873ca307c3199dbe0a 100644 GIT binary patch delta 131 zcmdmfm2vx3M&1B#W)=|!4h{~62_?A`dFz;g)W$v~V-UT0vvD^QnBi!~t_Nm#r<`X5 wGi1{Y!BUe0GweYElP705gXx<{9 delta 131 zcmdmfm2vx3M&1B#W)=|!4h{~6hifAz^42i}sf~R~#vpq0X5(%qFvHP|T@TFgPC3sA wX2_-)f~6)0X4r!SCQr_A2Gch)Ji)YTW(b(B$#ezNM>69e;#vM+x;)DP07ox2eE Date: Mon, 29 Jul 2024 17:30:00 -0700 Subject: [PATCH 03/24] Bumped bld to version 2.0.1 --- .github/workflows/bld.yml | 16 ++++------- .github/workflows/pages.yml | 12 ++++---- .github/workflows/publish.yml | 19 ++++++------ .idea/bld.xml | 6 ++++ .idea/libraries/bld.xml | 4 +-- .vscode/settings.json | 2 +- README.md | 2 +- lib/bld/bld-wrapper.jar | Bin 27319 -> 29577 bytes lib/bld/bld-wrapper.properties | 8 +++--- .../rife/render/TemplateRenderersBuild.java | 27 +++++++++--------- 10 files changed, 47 insertions(+), 49 deletions(-) create mode 100644 .idea/bld.xml diff --git a/.github/workflows/bld.yml b/.github/workflows/bld.yml index 5b1de3b..b8d797d 100644 --- a/.github/workflows/bld.yml +++ b/.github/workflows/bld.yml @@ -1,6 +1,6 @@ name: bld-ci -on: [push, pull_request, workflow_dispatch] +on: [ push, pull_request, workflow_dispatch ] jobs: build-bld-project: @@ -8,29 +8,25 @@ jobs: strategy: matrix: - java-version: [17, 21, 22] + java-version: [ 17, 21, 22 ] steps: - name: Checkout source repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up JDK ${{ matrix.java-version }} - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: "zulu" java-version: ${{ matrix.java-version }} - - name: Grant execute permission for bld - run: chmod +x bld - - - name: Download the dependencies + - name: Download dependencies run: ./bld download - - name: Run tests with bld + - name: Run tests run: >- ./bld compile test -DtestsBadgeUrl=https://rife2.com/tests-badge/update/com.uwyn.rife2/rife2-renderers -DtestsBadgeApiKey=${{ secrets.TESTS_BADGE_API_KEY }} - diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index 0236ccd..bf43624 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -3,7 +3,7 @@ name: javadocs-pages on: # Runs on pushes targeting the default branch push: - branches: [ "master" ] + branches: ["master"] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: @@ -30,14 +30,14 @@ jobs: steps: - name: Checkout source repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up JDK 17 - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: - distribution: 'zulu' + distribution: "zulu" java-version: 17 - name: Build Javadocs @@ -50,8 +50,8 @@ jobs: uses: actions/upload-pages-artifact@v1 with: # Upload generated Javadocs repository - path: 'build/javadoc/' + path: "build/javadoc/" - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v1 \ No newline at end of file + uses: actions/deploy-pages@v1 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index b8dbc52..1a64ef3 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -3,7 +3,7 @@ name: Publish to the Maven Central/Rife2 on: workflow_dispatch: release: - types: [ released ] + types: [released] jobs: build-bld-project: @@ -11,26 +11,23 @@ jobs: steps: - name: Checkout source repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up JDK - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: - distribution: 'temurin' + distribution: "temurin" java-version: 17 - - name: Grant execute permission for bld - run: chmod +x bld - - - name: Download the dependencies + - name: Download dependencies run: ./bld download - name: Import key run: echo "${{ secrets.SIGN_SECRET_KEY }}" | gpg --batch --import - - - name: Publish with bld + + - name: Publish run: >- ./bld compile test publish -DtestsBadgeUrl=https://rife2.com/tests-badge/update/com.uwyn.rife2/rife2-renderers @@ -41,6 +38,6 @@ jobs: -DsonatypePassword=${{ secrets.SONATYPE_PASSWORD }} -DsignKey=${{ secrets.SIGN_KEY }} -DsignPassphrase=${{ secrets.SIGN_PASSPHRASE }} - + - name: Delete GnuPG data run: rm -rfv $HOME/.gnupg diff --git a/.idea/bld.xml b/.idea/bld.xml new file mode 100644 index 0000000..6600cee --- /dev/null +++ b/.idea/bld.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/libraries/bld.xml b/.idea/libraries/bld.xml index 0b615c1..4dd96bf 100644 --- a/.idea/libraries/bld.xml +++ b/.idea/libraries/bld.xml @@ -2,12 +2,12 @@ - + - + diff --git a/.vscode/settings.json b/.vscode/settings.json index 9e8368e..5b2667b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,7 +9,7 @@ ], "java.configuration.updateBuildConfiguration": "automatic", "java.project.referencedLibraries": [ - "${HOME}/.bld/dist/bld-1.9.0.jar", + "${HOME}/.bld/dist/bld-2.0.1.jar", "lib/**/*.jar" ] } diff --git a/README.md b/README.md index 54d287d..86f3cfd 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ [![License](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![Java](https://img.shields.io/badge/java-17%2B-blue)](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html) -[![bld](https://img.shields.io/badge/1.9.0-FA9052?label=bld&labelColor=2392FF)](https://rife2.com/bld) +[![bld](https://img.shields.io/badge/2.0.1-FA9052?label=bld&labelColor=2392FF)](https://rife2.com/bld) [![GitHub release (latest by date)](https://img.shields.io/github/v/release/rife2/rife2-template-renderers)](https://github.com/rife2/rife2-template-renderers/releases/latest) [![Release](https://flat.badgen.net/maven/v/metadata-url/repo.rife2.com/releases/com/uwyn/rife2/rife2-renderers/maven-metadata.xml?color=blue)](https://repo.rife2.com/#/releases/com/uwyn/rife2/rife2-renderers) [![Maven Central](https://img.shields.io/maven-central/v/com.uwyn.rife2/rife2-renderers)](https://central.sonatype.com/artifact/com.uwyn.rife2/rife2-renderers/) diff --git a/lib/bld/bld-wrapper.jar b/lib/bld/bld-wrapper.jar index 5e81e4b896acedbdf27a2e873ca307c3199dbe0a..e1731053b6a3357038ba3b4d966519c64bb07fb2 100644 GIT binary patch delta 15709 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 delta 13468 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 Template Renderers") @@ -62,13 +61,13 @@ public class TemplateRenderersBuild extends Project { .link("https://rife2.github.io/rife2/"); publishOperation() - .repository(version.isSnapshot() ? repository(SONATYPE_SNAPSHOTS.location()) + .repository(version.isSnapshot() ? SONATYPE_SNAPSHOTS .withCredentials(property("sonatypeUser"), property("sonatypePassword")) - : repository(SONATYPE_RELEASES.location()) + : SONATYPE_RELEASES .withCredentials(property("sonatypeUser"), property("sonatypePassword"))) - .repository(version.isSnapshot() ? repository(RIFE2_SNAPSHOTS.location()) + .repository(version.isSnapshot() ? RIFE2_SNAPSHOTS .withCredentials(property("rife2Username"), property("rife2Password")) - : repository(RIFE2_RELEASES.location()) + : RIFE2_RELEASES .withCredentials(property("rife2Username"), property("rife2Password"))) .info(new PublishInfo() .groupId("com.uwyn.rife2") @@ -81,7 +80,7 @@ public class TemplateRenderersBuild extends Project { .developer(new PublishDeveloper().id("gbevin").name("Geert Bevin").email("gbevin@uwyn.com") .url("https://github.com/gbevin")) .license(new PublishLicense().name("The Apache License, Version 2.0") - .url("http://www.apache.org/licenses/LICENSE-2.0.txt")) + .url("https://www.apache.org/licenses/LICENSE-2.0.txt")) .scm(new PublishScm().connection("scm:git:https://github.com/rife2/rife2-template-renderers.git") .developerConnection("scm:git:git@github.com:rife2/rife2-template-renderers.git") .url("https://github.com/rife2/rife2-template-renderers")) @@ -94,14 +93,14 @@ public class TemplateRenderersBuild extends Project { } @BuildCommand(summary = "Generates JaCoCo Reports") - public void jacoco() throws IOException { + public void jacoco() throws Exception { new JacocoReportOperation() .fromProject(this) .execute(); } @BuildCommand(summary = "Runs PMD analysis") - public void pmd() { + public void pmd() throws Exception { new PmdOperation() .fromProject(this) .failOnViolation(true) @@ -115,4 +114,4 @@ public class TemplateRenderersBuild extends Project { .apiKey(property("testsBadgeApiKey")) .fromProject(this)); } -} \ No newline at end of file +} From c04fa16307f5ba2285f54c6e065c4a5bc99c92fa Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 29 Jul 2024 17:37:50 -0700 Subject: [PATCH 04/24] Bumped bld to version 2.0.1 --- config/pmd.xml | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/config/pmd.xml b/config/pmd.xml index cf0b4d4..3d3203c 100644 --- a/config/pmd.xml +++ b/config/pmd.xml @@ -19,19 +19,13 @@ - - - - - - - + @@ -41,8 +35,9 @@ - + + @@ -58,8 +53,6 @@ - - @@ -113,4 +106,4 @@ - \ No newline at end of file + From 957bb694c6561a61f3126a606d4b52b8c2bb8e87 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Wed, 31 Jul 2024 17:10:00 -0700 Subject: [PATCH 05/24] Improved normalizing with support for common separators --- src/main/java/rife/render/RenderUtils.java | 27 +++++++++---------- .../java/rife/render/TestRenderUtils.java | 10 +++++-- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/main/java/rife/render/RenderUtils.java b/src/main/java/rife/render/RenderUtils.java index 43c92c1..f2f0859 100644 --- a/src/main/java/rife/render/RenderUtils.java +++ b/src/main/java/rife/render/RenderUtils.java @@ -334,21 +334,20 @@ public final class RenderUtils { return src; } - var normalized = Normalizer.normalize(src.trim(), Normalizer.Form.NFD); - var sb = new StringBuilder(normalized.length()); - boolean space = false; - for (var c : normalized.toCharArray()) { - if (c <= '\u007F') { // ascii only - if (!space && c == ' ') { - space = true; - sb.append('-'); - } else { - space = false; - if (c >= '0' && c <= '9' || c >= 'a' && c <= 'z') { - sb.append(c); - } else if (c >= 'A' && c <= 'Z') { - sb.append((char) (c + 32)); // lowercase + var normalized = Normalizer.normalize(src.trim(), Normalizer.Form.NFD).toCharArray(); + + var sb = new StringBuilder(normalized.length); + for (var i = 0; i < normalized.length; i++) { + var c = normalized[i]; + if (c <= '\u007F') { // ASCII only + if (" &()-_=[{]}\\|;:,<.>/".indexOf(c) != -1) { // common separators + if (!sb.isEmpty() && i != normalized.length - 1 && sb.charAt(sb.length() - 1) != '-') { + sb.append('-'); } + } else if (c >= '0' && c <= '9' || c >= 'a' && c <= 'z') { // letters & digits + sb.append(c); + } else if (c >= 'A' && c <= 'Z') { // uppercase letters + sb.append((char) (c + 32)); // make lowercase } } } diff --git a/src/test/java/rife/render/TestRenderUtils.java b/src/test/java/rife/render/TestRenderUtils.java index 6ab1a22..fcee416 100644 --- a/src/test/java/rife/render/TestRenderUtils.java +++ b/src/test/java/rife/render/TestRenderUtils.java @@ -96,8 +96,14 @@ class TestRenderUtils { @Test void testNormalize() { - assertThat(RenderUtils.normalize("")).isEmpty(); - assertThat(RenderUtils.normalize(SAMPLE_GERMAN)).isEqualTo("mochten-sie-ein-paar-apfel"); + assertThat(RenderUtils.normalize("")).as("empty").isEmpty(); + assertThat(RenderUtils.normalize(" &()-_=[{]}\\|;:,<.>/")).as("blank").isEmpty(); + assertThat(RenderUtils.normalize(SAMPLE_GERMAN)).as("greman").isEqualTo("mochten-sie-ein-paar-apfel"); + assertThat(RenderUtils.normalize("foo bar, ,foo:bar,foo;(bar), {foo} & bar=foo.bar[foo|bar]")) + .as("foo-bar") + .isEqualTo("foo-bar-foo-bar-foo-bar-foo-bar-foo-bar-foo-bar-foo-bar"); + assertThat(RenderUtils.normalize("News for January 6, 2023 (Paris)")).as("docs example") + .isEqualTo("news-for-january-6-2023-paris"); } @Test From 313121cfcc32e30fa268ed1931ad89db057f8380 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Wed, 31 Jul 2024 17:17:02 -0700 Subject: [PATCH 06/24] Version 1.1.6 --- src/bld/java/rife/render/TemplateRenderersBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bld/java/rife/render/TemplateRenderersBuild.java b/src/bld/java/rife/render/TemplateRenderersBuild.java index d8d70b5..9164bdc 100644 --- a/src/bld/java/rife/render/TemplateRenderersBuild.java +++ b/src/bld/java/rife/render/TemplateRenderersBuild.java @@ -40,7 +40,7 @@ public class TemplateRenderersBuild extends Project { public TemplateRenderersBuild() { pkg = "rife.render"; name = "rife2-template-renderers"; - version = version(1, 1, 6, "SNAPSHOT"); + version = version(1, 1, 6); javaRelease = 17; downloadSources = true; From 5cfb6fa5f85b878c466b8c1da51788270c674975 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Wed, 4 Sep 2024 23:45:51 -0700 Subject: [PATCH 07/24] Bumped bld to version 2.1.0 --- .idea/libraries/bld.xml | 4 ++-- .idea/libraries/compile.xml | 4 ++-- .idea/libraries/runtime.xml | 4 ++-- .idea/libraries/test.xml | 4 ++-- .vscode/settings.json | 2 +- lib/bld/bld-wrapper.jar | Bin 29577 -> 30440 bytes lib/bld/bld-wrapper.properties | 6 +++--- .../rife/render/TemplateRenderersBuild.java | 6 +++--- 8 files changed, 15 insertions(+), 15 deletions(-) diff --git a/.idea/libraries/bld.xml b/.idea/libraries/bld.xml index 4dd96bf..5c4010c 100644 --- a/.idea/libraries/bld.xml +++ b/.idea/libraries/bld.xml @@ -2,12 +2,12 @@ - + - + diff --git a/.idea/libraries/compile.xml b/.idea/libraries/compile.xml index 9bd86aa..99cc0c0 100644 --- a/.idea/libraries/compile.xml +++ b/.idea/libraries/compile.xml @@ -7,7 +7,7 @@ - - + + \ No newline at end of file diff --git a/.idea/libraries/runtime.xml b/.idea/libraries/runtime.xml index 81feb0b..56ddbf1 100644 --- a/.idea/libraries/runtime.xml +++ b/.idea/libraries/runtime.xml @@ -7,7 +7,7 @@ - - + + \ No newline at end of file diff --git a/.idea/libraries/test.xml b/.idea/libraries/test.xml index 13b6513..f72f7a3 100644 --- a/.idea/libraries/test.xml +++ b/.idea/libraries/test.xml @@ -7,7 +7,7 @@ - - + + \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 5b2667b..4c33beb 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,7 +9,7 @@ ], "java.configuration.updateBuildConfiguration": "automatic", "java.project.referencedLibraries": [ - "${HOME}/.bld/dist/bld-2.0.1.jar", + "${HOME}/.bld/dist/bld-2.1.0.jar", "lib/**/*.jar" ] } diff --git a/lib/bld/bld-wrapper.jar b/lib/bld/bld-wrapper.jar index e1731053b6a3357038ba3b4d966519c64bb07fb2..3867a5badc2ef011a7b041c0cf02cc6702fb21a2 100644 GIT binary patch delta 15855 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 A3;+NC delta 15009 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

s$*rls@!sHBO;ZCZI;P{yKGwD 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 L_^*Fz5Rm@|6YnI- diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index 612b34a..f5d83c2 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -1,8 +1,8 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true bld.downloadLocation= -bld.extension-jacoco=com.uwyn.rife2:bld-jacoco-report:0.9.7 -bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.1.4 +bld.extension-jacoco=com.uwyn.rife2:bld-jacoco-report:0.9.8 +bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.1.5 bld.extension-tests=com.uwyn.rife2:bld-tests-badge:1.4.6 bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES -bld.version=2.0.1 +bld.version=2.1.0 diff --git a/src/bld/java/rife/render/TemplateRenderersBuild.java b/src/bld/java/rife/render/TemplateRenderersBuild.java index 9164bdc..a64fb8c 100644 --- a/src/bld/java/rife/render/TemplateRenderersBuild.java +++ b/src/bld/java/rife/render/TemplateRenderersBuild.java @@ -48,10 +48,10 @@ public class TemplateRenderersBuild extends Project { repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES); scope(compile) - .include(dependency("com.uwyn.rife2", "rife2", version(1, 8, 0))); + .include(dependency("com.uwyn.rife2", "rife2", version(1, 9, 0))); scope(test) - .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 10, 3))) - .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 10, 3))) + .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 0))) + .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 0))) .include(dependency("org.assertj", "assertj-core", version(3, 26, 3))); javadocOperation().javadocOptions() From 5090b8224c9fa21bd26c795c9d11d2d1305d1259 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Wed, 4 Sep 2024 23:46:13 -0700 Subject: [PATCH 08/24] Added soft assertions --- src/test/java/rife/render/TestRenderUtils.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/test/java/rife/render/TestRenderUtils.java b/src/test/java/rife/render/TestRenderUtils.java index fcee416..747e87c 100644 --- a/src/test/java/rife/render/TestRenderUtils.java +++ b/src/test/java/rife/render/TestRenderUtils.java @@ -17,6 +17,7 @@ package rife.render; +import org.assertj.core.api.AutoCloseableSoftAssertions; import org.junit.jupiter.api.Test; import java.util.Properties; @@ -127,10 +128,12 @@ class TestRenderUtils { @Test void testValidateCreditCard() { - assertThat(RenderUtils.validateCreditCard("4505 4672 3366 6430")).as("visa").isTrue(); - assertThat(RenderUtils.validateCreditCard("5189-5923-3915-0425")).as("mastercard").isTrue(); - assertThat(RenderUtils.validateCreditCard("3433634926643302")).as("amex").isTrue(); - assertThat(RenderUtils.validateCreditCard("6011 1076-8252 0629")).as("discover").isTrue(); - assertThat(RenderUtils.validateCreditCard("0123456789012345")).as("invalid").isFalse(); + try (var softly = new AutoCloseableSoftAssertions()) { + softly.assertThat(RenderUtils.validateCreditCard("4505 4672 3366 6430")).as("visa").isTrue(); + softly.assertThat(RenderUtils.validateCreditCard("5189-5923-3915-0425")).as("mastercard").isTrue(); + softly.assertThat(RenderUtils.validateCreditCard("3433634926643302")).as("amex").isTrue(); + softly.assertThat(RenderUtils.validateCreditCard("6011 1076-8252 0629")).as("discover").isTrue(); + softly.assertThat(RenderUtils.validateCreditCard("0123456789012345")).as("invalid").isFalse(); + } } } From 911d54c10b44769b710c29ff8ff7b6834ee1629c Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Wed, 4 Sep 2024 23:47:12 -0700 Subject: [PATCH 09/24] Minor cleanups --- README.md | 4 ++-- .../java/rife/render/TemplateRenderersBuild.java | 16 ++++++++++++---- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 86f3cfd..cdfbbcb 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ [![License](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![Java](https://img.shields.io/badge/java-17%2B-blue)](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html) -[![bld](https://img.shields.io/badge/2.0.1-FA9052?label=bld&labelColor=2392FF)](https://rife2.com/bld) +[![bld](https://img.shields.io/badge/2.1.0-FA9052?label=bld&labelColor=2392FF)](https://rife2.com/bld) [![GitHub release (latest by date)](https://img.shields.io/github/v/release/rife2/rife2-template-renderers)](https://github.com/rife2/rife2-template-renderers/releases/latest) [![Release](https://flat.badgen.net/maven/v/metadata-url/repo.rife2.com/releases/com/uwyn/rife2/rife2-renderers/maven-metadata.xml?color=blue)](https://repo.rife2.com/#/releases/com/uwyn/rife2/rife2-renderers) [![Maven Central](https://img.shields.io/maven-central/v/com.uwyn.rife2/rife2-renderers)](https://central.sonatype.com/artifact/com.uwyn.rife2/rife2-renderers/) @@ -63,4 +63,4 @@ This project provides a collection of useful template renderers. ## Documentation -Read more in the [documenation](https://github.com/rife2/rife2-template-renderers/wiki). +Read more in the [documentation](https://github.com/rife2/rife2-template-renderers/wiki). diff --git a/src/bld/java/rife/render/TemplateRenderersBuild.java b/src/bld/java/rife/render/TemplateRenderersBuild.java index a64fb8c..19e3563 100644 --- a/src/bld/java/rife/render/TemplateRenderersBuild.java +++ b/src/bld/java/rife/render/TemplateRenderersBuild.java @@ -75,13 +75,21 @@ public class TemplateRenderersBuild extends Project { .name("RIFE2 Template Renderers") .description("Template Renderers for the RIFE2 web framework") .url("https://github.com/rife2/rife2-template-renderers") - .developer(new PublishDeveloper().id("ethauvin").name("Erik C. Thauvin").email("erik@thauvin.net") + .developer(new PublishDeveloper() + .id("ethauvin") + .name("Erik C. Thauvin") + .email("erik@thauvin.net") .url("https://erik.thauvin.net/")) - .developer(new PublishDeveloper().id("gbevin").name("Geert Bevin").email("gbevin@uwyn.com") + .developer(new PublishDeveloper() + .id("gbevin") + .name("Geert Bevin") + .email("gbevin@uwyn.com") .url("https://github.com/gbevin")) - .license(new PublishLicense().name("The Apache License, Version 2.0") + .license(new PublishLicense() + .name("The Apache License, Version 2.0") .url("https://www.apache.org/licenses/LICENSE-2.0.txt")) - .scm(new PublishScm().connection("scm:git:https://github.com/rife2/rife2-template-renderers.git") + .scm(new PublishScm() + .connection("scm:git:https://github.com/rife2/rife2-template-renderers.git") .developerConnection("scm:git:git@github.com:rife2/rife2-template-renderers.git") .url("https://github.com/rife2/rife2-template-renderers")) .signKey(property("signKey")) From 97edc07160d7a16f3fef87fc5bed22a76d279029 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 29 Oct 2024 22:39:52 -0700 Subject: [PATCH 10/24] Updated dependencies Bumped JDK to version 23 (GitHub CI Workflow) Bumped PMD extensions to version 1.1.7 Bumped JUnit to version 5.11.3 --- .github/workflows/bld.yml | 4 ++-- config/pmd.xml | 4 ++-- lib/bld/bld-wrapper.properties | 2 +- src/bld/java/rife/render/TemplateRenderersBuild.java | 6 +++--- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/bld.yml b/.github/workflows/bld.yml index b8d797d..21791c9 100644 --- a/.github/workflows/bld.yml +++ b/.github/workflows/bld.yml @@ -1,6 +1,6 @@ name: bld-ci -on: [ push, pull_request, workflow_dispatch ] +on: [push, pull_request, workflow_dispatch] jobs: build-bld-project: @@ -8,7 +8,7 @@ jobs: strategy: matrix: - java-version: [ 17, 21, 22 ] + java-version: [17, 21, 23] steps: - name: Checkout source repository diff --git a/config/pmd.xml b/config/pmd.xml index 3d3203c..2641880 100644 --- a/config/pmd.xml +++ b/config/pmd.xml @@ -7,9 +7,9 @@ - - + + diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index f5d83c2..aba0f19 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -2,7 +2,7 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true bld.downloadLocation= bld.extension-jacoco=com.uwyn.rife2:bld-jacoco-report:0.9.8 -bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.1.5 +bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.1.7 bld.extension-tests=com.uwyn.rife2:bld-tests-badge:1.4.6 bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES bld.version=2.1.0 diff --git a/src/bld/java/rife/render/TemplateRenderersBuild.java b/src/bld/java/rife/render/TemplateRenderersBuild.java index 19e3563..773530f 100644 --- a/src/bld/java/rife/render/TemplateRenderersBuild.java +++ b/src/bld/java/rife/render/TemplateRenderersBuild.java @@ -40,7 +40,7 @@ public class TemplateRenderersBuild extends Project { public TemplateRenderersBuild() { pkg = "rife.render"; name = "rife2-template-renderers"; - version = version(1, 1, 6); + version = version(1, 1, 7, "SNAPSHOT"); javaRelease = 17; downloadSources = true; @@ -50,8 +50,8 @@ public class TemplateRenderersBuild extends Project { scope(compile) .include(dependency("com.uwyn.rife2", "rife2", version(1, 9, 0))); scope(test) - .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 0))) - .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 0))) + .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 3))) + .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 3))) .include(dependency("org.assertj", "assertj-core", version(3, 26, 3))); javadocOperation().javadocOptions() From daadd0bc4af12d37cc069381cd57427359c88cff Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 29 Oct 2024 22:58:26 -0700 Subject: [PATCH 11/24] Added missing and cleaned up JavaDocs --- .idea/misc.xml | 1 + README.md | 2 +- src/main/java/rife/render/Abbreviate.java | 15 ++++++++++-- src/main/java/rife/render/BeatTime.java | 7 +++++- src/main/java/rife/render/Capitalize.java | 7 +++++- src/main/java/rife/render/DateIso.java | 9 +++++-- src/main/java/rife/render/DateTimeIso.java | 12 ++++++++-- .../java/rife/render/DateTimeRfc2822.java | 9 +++++-- src/main/java/rife/render/EncodeBase64.java | 7 +++++- src/main/java/rife/render/EncodeHtml.java | 7 +++++- .../java/rife/render/EncodeHtmlEntities.java | 7 +++++- src/main/java/rife/render/EncodeJs.java | 7 +++++- src/main/java/rife/render/EncodeJson.java | 7 +++++- src/main/java/rife/render/EncodeUnicode.java | 7 +++++- src/main/java/rife/render/EncodeUrl.java | 7 +++++- src/main/java/rife/render/EncodeXml.java | 7 +++++- .../java/rife/render/FormatCreditCard.java | 7 +++++- src/main/java/rife/render/Lowercase.java | 7 +++++- src/main/java/rife/render/Mask.java | 24 ++++++++++++++++++- src/main/java/rife/render/Normalize.java | 7 +++++- src/main/java/rife/render/QrCode.java | 7 +++++- src/main/java/rife/render/RenderUtils.java | 2 +- src/main/java/rife/render/Rot13.java | 7 +++++- src/main/java/rife/render/ShortenUrl.java | 7 +++++- src/main/java/rife/render/SwapCase.java | 10 +++++--- src/main/java/rife/render/TimeIso.java | 9 +++++-- src/main/java/rife/render/Trim.java | 7 +++++- src/main/java/rife/render/Uncapitalize.java | 7 +++++- src/main/java/rife/render/Uppercase.java | 9 +++++-- src/main/java/rife/render/Uptime.java | 7 +++++- src/main/java/rife/render/Year.java | 8 +++++-- src/test/java/rife/render/DisabledOnCi.java | 2 +- src/test/java/rife/render/TestEncode.java | 2 +- 33 files changed, 206 insertions(+), 41 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index b018d04..2fa2388 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -3,6 +3,7 @@ +

Abbreviate a template value with ellipses.

+ *

Abbreviates a template value with ellipses.

* *

Usage:

* @@ -36,7 +36,18 @@ import rife.template.ValueRenderer; */ public class Abbreviate implements ValueRenderer { /** - * {@inheritDoc} + *

Returns the template value abbreviated with ellipses.

+ * + *

Two parameters can be specified:

+ *
    + *
  • mark: the string that will be used to abbreviate the value. Default is ...
  • + *
  • max: the maximum number of characters to render. Default is -1 (no abbreviation).
  • + *
+ * + * @param template the template that contains the value + * @param valueId the id of the value to render + * @param differentiator a generic string that can be used to differentiate the rendering + * @return the abbreviated value, or the original value if no abbreviation is necessary */ @Override public String render(Template template, String valueId, String differentiator) { diff --git a/src/main/java/rife/render/BeatTime.java b/src/main/java/rife/render/BeatTime.java index 23849f3..f11f97f 100644 --- a/src/main/java/rife/render/BeatTime.java +++ b/src/main/java/rife/render/BeatTime.java @@ -38,7 +38,12 @@ import java.time.ZonedDateTime; */ public class BeatTime implements ValueRenderer { /** - * {@inheritDoc} + * Returns the current time in Swatch Internet (.beat) Time format. + * + * @param template the template instance + * @param valueId the value id + * @param differentiator the differentiator + * @return the rendered value */ @Override public String render(Template template, String valueId, String differentiator) { diff --git a/src/main/java/rife/render/Capitalize.java b/src/main/java/rife/render/Capitalize.java index 7805b4c..e0d769f 100644 --- a/src/main/java/rife/render/Capitalize.java +++ b/src/main/java/rife/render/Capitalize.java @@ -37,7 +37,12 @@ import rife.tools.StringUtils; */ public class Capitalize implements ValueRenderer { /** - * {@inheritDoc} + * Returns the template value by capitalizing it. + * + * @param template the template containing the value to be rendered + * @param valueId the identifier of the value to render + * @param differentiator a string used to differentiate the rendering + * @return the capitalized and encoded value */ @Override public String render(Template template, String valueId, String differentiator) { diff --git a/src/main/java/rife/render/DateIso.java b/src/main/java/rife/render/DateIso.java index a2f1f9e..0da04e6 100644 --- a/src/main/java/rife/render/DateIso.java +++ b/src/main/java/rife/render/DateIso.java @@ -23,7 +23,7 @@ import rife.template.ValueRenderer; import java.time.ZonedDateTime; /** - *

Return the current date in ISO 8601 format.

+ *

Renders the current date in ISO 8601 format.

* *

Usage:

* @@ -38,7 +38,12 @@ import java.time.ZonedDateTime; */ public class DateIso implements ValueRenderer { /** - * {@inheritDoc} + * Returns the current date in ISO 8601 format, encoded according to the template's encoding rules. + * + * @param template the template that is currently being rendered + * @param valueId the value id that triggers the rendering of this value renderer + * @param differentiator a differentiator that may be used to differentiate the rendering of this value renderer + * @return the current date in ISO 8601 format, encoded according to the template's encoding rules */ @Override public String render(Template template, String valueId, String differentiator) { diff --git a/src/main/java/rife/render/DateTimeIso.java b/src/main/java/rife/render/DateTimeIso.java index 805a6cd..e8513bb 100644 --- a/src/main/java/rife/render/DateTimeIso.java +++ b/src/main/java/rife/render/DateTimeIso.java @@ -24,7 +24,7 @@ import java.time.ZoneId; import java.time.ZonedDateTime; /** - *

Return the current date and time in ISO 8601 format.

+ *

Renders the current date and time in ISO 8601 format.

* *

Usage:

* @@ -39,7 +39,15 @@ import java.time.ZonedDateTime; */ public class DateTimeIso implements ValueRenderer { /** - * {@inheritDoc} + * Renders the current date and time in ISO 8601 format. + * + *

Additionally, it allows specifying a time zone through the template's default value properties with the key + * {@code tz}. If no time zone is specified, the system default time zone is used.

+ * + * @param template the template that is currently being rendered + * @param valueId the id of the value to be rendered + * @param differentiator a differentiator that may be used to differentiate the rendering of this value renderer + * @return the current date and time in ISO 8601 format */ @Override public String render(Template template, String valueId, String differentiator) { diff --git a/src/main/java/rife/render/DateTimeRfc2822.java b/src/main/java/rife/render/DateTimeRfc2822.java index 3a33842..2bdbd54 100644 --- a/src/main/java/rife/render/DateTimeRfc2822.java +++ b/src/main/java/rife/render/DateTimeRfc2822.java @@ -23,7 +23,7 @@ import rife.template.ValueRenderer; import java.time.ZonedDateTime; /** - *

Return the current date and time in RFC 2822 format.

+ *

Renders the current date and time in RFC 2822 format.

* *

Usage:

* @@ -38,7 +38,12 @@ import java.time.ZonedDateTime; */ public class DateTimeRfc2822 implements ValueRenderer { /** - * {@inheritDoc} + * Returns the current date and time in RFC 2822 format. + * + * @param template the template instance + * @param valueId the value id + * @param differentiator the differentiator + * @return the current date and time in RFC 2822 format */ @Override public String render(Template template, String valueId, String differentiator) { diff --git a/src/main/java/rife/render/EncodeBase64.java b/src/main/java/rife/render/EncodeBase64.java index 95d1e30..e00b24c 100644 --- a/src/main/java/rife/render/EncodeBase64.java +++ b/src/main/java/rife/render/EncodeBase64.java @@ -40,7 +40,12 @@ import java.nio.charset.StandardCharsets; */ public class EncodeBase64 implements ValueRenderer { /** - * {@inheritDoc} + * Returns the template value encoded to Base64. + * + * @param template the template that contains the value + * @param valueId the id of the value + * @param differentiator the differentiator to use + * @return the Base64-encoded value */ @Override public String render(Template template, String valueId, String differentiator) { diff --git a/src/main/java/rife/render/EncodeHtml.java b/src/main/java/rife/render/EncodeHtml.java index ee14bdd..b67959d 100644 --- a/src/main/java/rife/render/EncodeHtml.java +++ b/src/main/java/rife/render/EncodeHtml.java @@ -38,7 +38,12 @@ import rife.tools.StringUtils; */ public class EncodeHtml implements ValueRenderer { /** - * {@inheritDoc} + * Returns the template value encoded to HTML. + * + * @param template the template containing the value to be rendered + * @param valueId the identifier of the value to render + * @param differentiator a string used to differentiate the rendering + * @return the HTML-encoded value */ @Override public String render(Template template, String valueId, String differentiator) { diff --git a/src/main/java/rife/render/EncodeHtmlEntities.java b/src/main/java/rife/render/EncodeHtmlEntities.java index bbf6043..cee3e8b 100644 --- a/src/main/java/rife/render/EncodeHtmlEntities.java +++ b/src/main/java/rife/render/EncodeHtmlEntities.java @@ -36,7 +36,12 @@ import rife.template.ValueRenderer; */ public class EncodeHtmlEntities implements ValueRenderer { /** - * {@inheritDoc} + * Returns the template value encoded to HTML decimal entities. + * + * @param template the template instance + * @param valueId the value id + * @param differentiator the differentiator + * @return the encoded value */ @Override public String render(Template template, String valueId, String differentiator) { diff --git a/src/main/java/rife/render/EncodeJs.java b/src/main/java/rife/render/EncodeJs.java index 52c757d..27de902 100644 --- a/src/main/java/rife/render/EncodeJs.java +++ b/src/main/java/rife/render/EncodeJs.java @@ -38,7 +38,12 @@ import rife.tools.StringUtils; */ public class EncodeJs implements ValueRenderer { /** - * {@inheritDoc} + * Returns the template value encoded to JavaScript/ECMAScript. + * + * @param template the template that contains the value + * @param valueId the id of the value + * @param differentiator the differentiator to use + * @return the JavaScript/ECMAScript-encoded value */ @Override public String render(Template template, String valueId, String differentiator) { diff --git a/src/main/java/rife/render/EncodeJson.java b/src/main/java/rife/render/EncodeJson.java index 95fbf34..8e17b29 100644 --- a/src/main/java/rife/render/EncodeJson.java +++ b/src/main/java/rife/render/EncodeJson.java @@ -38,7 +38,12 @@ import rife.tools.StringUtils; */ public class EncodeJson implements ValueRenderer { /** - * {@inheritDoc} + * Returns the template value encoded to JSON. + * + * @param template the template that contains the value + * @param valueId the id of the value + * @param differentiator the differentiator to use + * @return the JSON-encoded value */ @Override public String render(Template template, String valueId, String differentiator) { diff --git a/src/main/java/rife/render/EncodeUnicode.java b/src/main/java/rife/render/EncodeUnicode.java index 061da96..afd2a48 100644 --- a/src/main/java/rife/render/EncodeUnicode.java +++ b/src/main/java/rife/render/EncodeUnicode.java @@ -38,7 +38,12 @@ import rife.tools.StringUtils; */ public class EncodeUnicode implements ValueRenderer { /** - * {@inheritDoc} + * Returns the template value encoded to Unicode escape codes. + * + * @param template the template that contains the value + * @param valueId the id of the value + * @param differentiator the differentiator to use + * @return the Unicode escape codes-encoded value */ @Override public String render(Template template, String valueId, String differentiator) { diff --git a/src/main/java/rife/render/EncodeUrl.java b/src/main/java/rife/render/EncodeUrl.java index a6c554f..b977353 100644 --- a/src/main/java/rife/render/EncodeUrl.java +++ b/src/main/java/rife/render/EncodeUrl.java @@ -38,7 +38,12 @@ import rife.tools.StringUtils; */ public class EncodeUrl implements ValueRenderer { /** - * {@inheritDoc} + * Returns the template value encoded to URL. + * + * @param template the template that contains the value + * @param valueId the id of the value + * @param differentiator the differentiator to use + * @return the URL-encoded value */ @Override public String render(Template template, String valueId, String differentiator) { diff --git a/src/main/java/rife/render/EncodeXml.java b/src/main/java/rife/render/EncodeXml.java index b1c6eff..00b0faa 100644 --- a/src/main/java/rife/render/EncodeXml.java +++ b/src/main/java/rife/render/EncodeXml.java @@ -38,7 +38,12 @@ import rife.tools.StringUtils; */ public class EncodeXml implements ValueRenderer { /** - * {@inheritDoc} + * Returns the template value encoded to XML. + * + * @param template the template that contains the value + * @param valueId the id of the value + * @param differentiator the differentiator to use + * @return the XML-encoded value */ @Override public String render(Template template, String valueId, String differentiator) { diff --git a/src/main/java/rife/render/FormatCreditCard.java b/src/main/java/rife/render/FormatCreditCard.java index f2fc815..fec124d 100644 --- a/src/main/java/rife/render/FormatCreditCard.java +++ b/src/main/java/rife/render/FormatCreditCard.java @@ -36,7 +36,12 @@ import rife.template.ValueRenderer; */ public class FormatCreditCard implements ValueRenderer { /** - * {@inheritDoc} + * Returns the last 4 digits of the template credit number value. + * + * @param template the {@link Template} + * @param valueId the value id + * @param differentiator the differentiator + * @return the formatted value */ @Override public String render(Template template, String valueId, String differentiator) { diff --git a/src/main/java/rife/render/Lowercase.java b/src/main/java/rife/render/Lowercase.java index 8513222..6f9f2ec 100644 --- a/src/main/java/rife/render/Lowercase.java +++ b/src/main/java/rife/render/Lowercase.java @@ -37,7 +37,12 @@ import rife.tools.Localization; */ public class Lowercase implements ValueRenderer { /** - * {@inheritDoc} + * Returns the template value converted to lowercase. + * + * @param template the template that contains the value + * @param valueId the id of the value + * @param differentiator the differentiator to use + * @return the lowercase value */ @Override public String render(Template template, String valueId, String differentiator) { diff --git a/src/main/java/rife/render/Mask.java b/src/main/java/rife/render/Mask.java index eb96702..fe0a709 100644 --- a/src/main/java/rife/render/Mask.java +++ b/src/main/java/rife/render/Mask.java @@ -35,8 +35,30 @@ import rife.template.ValueRenderer; * @since 1.0 */ public class Mask implements ValueRenderer { + /** - * {@inheritDoc} + *

Renders a template value with characters of the value masked using the specified mask.

+ * + *

The mask is specified as a template default value with the following syntax:

+ * + *
+     *   mask=<mask>[,unmasked=<unmasked>][,fromStart=<fromStart>]
+     * 
+ * + *

Where:

+ * + *
    + *
  • mask is the character to use for masking, defaulting to *
  • + *
  • unmasked is the number of characters at the beginning of the value that should be left unmasked, + * defaulting to 0
  • + *
  • fromStart is a boolean indicating whether the unmasked value should be counted from + * the start of the value, defaulting to false
  • + *
+ * + * @param template the template to render the value in + * @param valueId the ID of the value to render + * @param differentiator the differentiator of the value to render + * @return the rendered value */ @Override public String render(Template template, String valueId, String differentiator) { diff --git a/src/main/java/rife/render/Normalize.java b/src/main/java/rife/render/Normalize.java index a07fb9b..b6cb9d1 100644 --- a/src/main/java/rife/render/Normalize.java +++ b/src/main/java/rife/render/Normalize.java @@ -36,7 +36,12 @@ import rife.template.ValueRenderer; */ public class Normalize implements ValueRenderer { /** - * {@inheritDoc} + * Returns the template value normalized for inclusion in a URL path. + * + * @param template the template that contains the value + * @param valueId the id of the value + * @param differentiator the differentiator to use + * @return the normalized value */ @Override public String render(Template template, String valueId, String differentiator) { diff --git a/src/main/java/rife/render/QrCode.java b/src/main/java/rife/render/QrCode.java index ddf8091..47f74c0 100644 --- a/src/main/java/rife/render/QrCode.java +++ b/src/main/java/rife/render/QrCode.java @@ -36,7 +36,12 @@ import rife.template.ValueRenderer; */ public class QrCode implements ValueRenderer { /** - * {@inheritDoc} + * Returns the template value encoded as an SVG QR Code. + * + * @param template the template that contains the value + * @param valueId the id of the value + * @param differentiator the differentiator to use + * @return the SVG QR Code */ @Override public String render(Template template, String valueId, String differentiator) { diff --git a/src/main/java/rife/render/RenderUtils.java b/src/main/java/rife/render/RenderUtils.java index f2f0859..50b4576 100644 --- a/src/main/java/rife/render/RenderUtils.java +++ b/src/main/java/rife/render/RenderUtils.java @@ -83,7 +83,7 @@ public final class RenderUtils { DateTimeFormatter.ofPattern("EEE, d MMM yyyy HH:mm:ss zzz").withLocale(Localization.getLocale()); private static final String DEFAULT_USER_AGENT = "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/111.0"; - private final static Logger LOGGER = Logger.getLogger(RenderUtils.class.getName()); + private static final Logger LOGGER = Logger.getLogger(RenderUtils.class.getName()); private RenderUtils() { // no-op diff --git a/src/main/java/rife/render/Rot13.java b/src/main/java/rife/render/Rot13.java index d9e5326..75e3dd7 100644 --- a/src/main/java/rife/render/Rot13.java +++ b/src/main/java/rife/render/Rot13.java @@ -36,7 +36,12 @@ import rife.template.ValueRenderer; */ public class Rot13 implements ValueRenderer { /** - * {@inheritDoc} + * Returns the template value translated to/from ROT13. + * + * @param template the template that contains the value + * @param valueId the id of the value + * @param differentiator the differentiator to use + * @return the ROT13 value */ @Override public String render(Template template, String valueId, String differentiator) { diff --git a/src/main/java/rife/render/ShortenUrl.java b/src/main/java/rife/render/ShortenUrl.java index 1ceeec9..204d7c6 100644 --- a/src/main/java/rife/render/ShortenUrl.java +++ b/src/main/java/rife/render/ShortenUrl.java @@ -38,7 +38,12 @@ import rife.template.ValueRenderer; */ public class ShortenUrl implements ValueRenderer { /** - * {@inheritDoc} + * Returns the template value shortened using is.gid. + * + * @param template the template that contains the value + * @param valueId the id of the value + * @param differentiator the differentiator to use + * @return the template shortened value */ @Override public String render(Template template, String valueId, String differentiator) { diff --git a/src/main/java/rife/render/SwapCase.java b/src/main/java/rife/render/SwapCase.java index 4278768..1fd996a 100644 --- a/src/main/java/rife/render/SwapCase.java +++ b/src/main/java/rife/render/SwapCase.java @@ -21,7 +21,7 @@ import rife.template.Template; import rife.template.ValueRenderer; /** - *

Swap case of a template value.

+ *

Swaps case of a template value.

* *

Usage:

* @@ -35,9 +35,13 @@ import rife.template.ValueRenderer; * @since 1.0 */ public class SwapCase implements ValueRenderer { - /** - * {@inheritDoc} + * Returns the template value with swapped case. + * + * @param template the template that contains the value + * @param valueId the id of the value + * @param differentiator the differentiator to use + * @return the swapped case value */ @Override public String render(Template template, String valueId, String differentiator) { diff --git a/src/main/java/rife/render/TimeIso.java b/src/main/java/rife/render/TimeIso.java index a62c44b..01bf5b2 100644 --- a/src/main/java/rife/render/TimeIso.java +++ b/src/main/java/rife/render/TimeIso.java @@ -23,7 +23,7 @@ import rife.template.ValueRenderer; import java.time.ZonedDateTime; /** - *

Return the current time in ISO 8601 format.

+ *

Renders the current time in ISO 8601 format.

* *

Usage:

* @@ -38,7 +38,12 @@ import java.time.ZonedDateTime; */ public class TimeIso implements ValueRenderer { /** - * {@inheritDoc} + * Returns the current time in ISO 8601 format. + * + * @param template the template that is currently being rendered + * @param valueId the id of the value to be rendered + * @param differentiator a differentiator that may be used to differentiate the rendering of this value renderer + * @return the current time in ISO 8601 format */ @Override public String render(Template template, String valueId, String differentiator) { diff --git a/src/main/java/rife/render/Trim.java b/src/main/java/rife/render/Trim.java index f3b2980..a0951b4 100644 --- a/src/main/java/rife/render/Trim.java +++ b/src/main/java/rife/render/Trim.java @@ -36,7 +36,12 @@ import rife.template.ValueRenderer; */ public class Trim implements ValueRenderer { /** - * {@inheritDoc} + * Renders the template value by removing leading and trailing whitespace. + * + * @param template the template instance + * @param valueId the id of the value to render + * @param differentiator an optional differentiator to use for cache invalidation + * @return the trimmed value, or the original value if it is {@code null} or empty */ @Override public String render(Template template, String valueId, String differentiator) { diff --git a/src/main/java/rife/render/Uncapitalize.java b/src/main/java/rife/render/Uncapitalize.java index 53b8a45..20b0aad 100644 --- a/src/main/java/rife/render/Uncapitalize.java +++ b/src/main/java/rife/render/Uncapitalize.java @@ -37,7 +37,12 @@ import rife.tools.StringUtils; */ public class Uncapitalize implements ValueRenderer { /** - * {@inheritDoc} + * Returns the un-capitalized template value. + * + * @param template the template to render + * @param valueId the id of the value to render + * @param differentiator the differentiator to use for the value lookup + * @return the un-capitalized value */ @Override public String render(Template template, String valueId, String differentiator) { diff --git a/src/main/java/rife/render/Uppercase.java b/src/main/java/rife/render/Uppercase.java index 31ecd9a..92e57a5 100644 --- a/src/main/java/rife/render/Uppercase.java +++ b/src/main/java/rife/render/Uppercase.java @@ -22,7 +22,7 @@ import rife.template.ValueRenderer; import rife.tools.Localization; /** - *

Convert a template value to uppercase.

+ *

Converts a template value to uppercase.

* *

Usage:

* @@ -37,7 +37,12 @@ import rife.tools.Localization; */ public class Uppercase implements ValueRenderer { /** - * {@inheritDoc} + * Returns the template value converted to uppercase. + * + * @param template the template that contains the value + * @param valueId the id of the value + * @param differentiator the differentiator to use + * @return the uppercased value */ @Override public String render(Template template, String valueId, String differentiator) { diff --git a/src/main/java/rife/render/Uptime.java b/src/main/java/rife/render/Uptime.java index 2fe1a5d..14bb2de 100644 --- a/src/main/java/rife/render/Uptime.java +++ b/src/main/java/rife/render/Uptime.java @@ -38,7 +38,12 @@ import java.lang.management.ManagementFactory; */ public class Uptime implements ValueRenderer { /** - * {@inheritDoc} + * Renders the server uptime. + * + * @param template the template that is currently being rendered + * @param valueId the id of the value to render + * @param differentiator a differentiator that may be used to differentiate the rendering of this value renderer + * @return the server uptime */ @Override public String render(Template template, String valueId, String differentiator) { diff --git a/src/main/java/rife/render/Year.java b/src/main/java/rife/render/Year.java index b79911a..cb8c8f5 100644 --- a/src/main/java/rife/render/Year.java +++ b/src/main/java/rife/render/Year.java @@ -37,9 +37,13 @@ import java.time.ZonedDateTime; * @since 1.0 */ public class Year implements ValueRenderer { - /** - * {@inheritDoc} + * Renders the current year. + * + * @param template the template that is currently being rendered + * @param valueId the id of the value to render + * @param differentiator a differentiator that may be used to differentiate the rendering of this value renderer + * @return the current year */ @Override public String render(Template template, String valueId, String differentiator) { diff --git a/src/test/java/rife/render/DisabledOnCi.java b/src/test/java/rife/render/DisabledOnCi.java index 2fab8c9..8c369d6 100644 --- a/src/test/java/rife/render/DisabledOnCi.java +++ b/src/test/java/rife/render/DisabledOnCi.java @@ -30,7 +30,7 @@ import java.lang.annotation.Target; * @author Erik C. Thauvin * @since 1.0 */ -@Target({ ElementType.TYPE, ElementType.METHOD }) +@Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @ExtendWith(DisableOnCiCondition.class) public @interface DisabledOnCi { diff --git a/src/test/java/rife/render/TestEncode.java b/src/test/java/rife/render/TestEncode.java index d02571f..bc390d4 100644 --- a/src/test/java/rife/render/TestEncode.java +++ b/src/test/java/rife/render/TestEncode.java @@ -56,7 +56,7 @@ class TestEncode { assertThat(t.getContent()).isEqualTo("\\'\\\"\\\\\\/"); t = TemplateFactory.TXT.get("encodeJs"); - t.setAttribute(TestCase.FOO, "This is\f\b a\r\n\ttest"); + t.setAttribute(TestCase.FOO, "This is\f\b a\r\n\ttest"); assertThat(t.getContent()).isEqualTo("This is\\f\\b a\\r\\n\\ttest"); t = TemplateFactory.HTML.get("encodeJs"); From 99f6afe4fbe1f156057b8274e6a143e01701e413 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 15 Nov 2024 11:47:40 -0800 Subject: [PATCH 12/24] Added capitalizeWords renderer --- README.md | 19 +++---- .../java/rife/render/CapitalizeWords.java | 50 +++++++++++++++++++ src/main/java/rife/render/RenderUtils.java | 32 ++++++++++++ .../java/rife/render/TestRenderUtils.java | 11 ++++ 4 files changed, 103 insertions(+), 9 deletions(-) create mode 100644 src/main/java/rife/render/CapitalizeWords.java diff --git a/README.md b/README.md index df26021..45c7030 100644 --- a/README.md +++ b/README.md @@ -51,15 +51,16 @@ This project provides a collection of useful template renderers. ## Text Renderers -| Renderer | Description | -|:------------------------------------------------------------------------------------------------------------|:--------------------------------------------------------------| -| [rife.render.Capitalize](https://github.com/rife2/rife2-template-renderers/wiki/rife.render.Capitalize) | Capitalizes a template value | -| [rife.render.Lowercase](https://github.com/rife2/rife2-template-renderers/wiki/rife.render.Lowercase) | Converts a template value to lowercase | -| [rife.render.Rot13](https://github.com/rife2/rife2-template-renderers/wiki/rife.render.Rot13) | Translates a template value to/from ROT13 | -| [rife.render.SwapCase](https://github.com/rife2/rife2-template-renderers/wiki/rife.render.SwapCase) | Swaps case of a template value | -| [rife.render.Trim](https://github.com/rife2/rife2-template-renderers/wiki/rife.render.Trim) | Removes leading and trailing whitespace from a template value | -| [rife.render.Uncapitalize](https://github.com/rife2/rife2-template-renderers/wiki/rife.render.Uncapitalize) | Uncapitalizes a template value | -| [rife.render.Uppercase](https://github.com/rife2/rife2-template-renderers/wiki/rife.render.Uppercase) | Converts a template value to uppercase | +| Renderer | Description | +|:------------------------------------------------------------------------------------------------------------------|:----------------------------------------------------------------------| +| [rife.render.Capitalize](https://github.com/rife2/rife2-template-renderers/wiki/rife.render.Capitalize) | Capitalizes a template value | +| [rife.render.CapitalizeWords](https://github.com/rife2/rife2-template-renderers/wiki/rife.render.CapitalizeWords) | Capitalizes words of a template value | +| [rife.render.Lowercase](https://github.com/rife2/rife2-template-renderers/wiki/rife.render.Lowercase) | Converts a template value to lowercase | +| [rife.render.Rot13](https://github.com/rife2/rife2-template-renderers/wiki/rife.render.Rot13) | Translates a template value to/from ROT13 | +| [rife.render.SwapCase](https://github.com/rife2/rife2-template-renderers/wiki/rife.render.SwapCase) | Swaps case of a template value | +| [rife.render.Trim](https://github.com/rife2/rife2-template-renderers/wiki/rife.render.Trim) | Removes leading and trailing whitespace from a template value | +| [rife.render.Uncapitalize](https://github.com/rife2/rife2-template-renderers/wiki/rife.render.Uncapitalize) | Uncapitalizes a template value | +| [rife.render.Uppercase](https://github.com/rife2/rife2-template-renderers/wiki/rife.render.Uppercase) | Converts a template value to uppercase | ## Documentation diff --git a/src/main/java/rife/render/CapitalizeWords.java b/src/main/java/rife/render/CapitalizeWords.java new file mode 100644 index 0000000..e95e6f8 --- /dev/null +++ b/src/main/java/rife/render/CapitalizeWords.java @@ -0,0 +1,50 @@ +/* + * Copyright 2023-2024 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package rife.render; + +import rife.template.Template; +import rife.template.ValueRenderer; + +/** + *

Capitalizes words of a template value.

+ * + *

Usage:

+ * + *
+ *   <!--v render:rife.render.CapitalizeWords:valueId/-->
+ *   {{v render:rife.render.CapitalizeWords:valueId/}}
+ * 
+ * + * @author Erik C. Thauvin + * @see rife.render.CapitalizeWords + * @since 1.2 + */ +public class CapitalizeWords implements ValueRenderer { + /** + * Returns the template value by capitalizing it. + * + * @param template the template containing the value to be rendered + * @param valueId the identifier of the value to render + * @param differentiator a string used to differentiate the rendering + * @return the capitalized and encoded value + */ + @Override + public String render(Template template, String valueId, String differentiator) { + return template.getEncoder().encode(RenderUtils.capitalizeWords(template.getValueOrAttribute(differentiator))); + } +} diff --git a/src/main/java/rife/render/RenderUtils.java b/src/main/java/rife/render/RenderUtils.java index 50b4576..b6d831f 100644 --- a/src/main/java/rife/render/RenderUtils.java +++ b/src/main/java/rife/render/RenderUtils.java @@ -124,6 +124,38 @@ public final class RenderUtils { return String.format("@%03d", beats); } + /** + * Returns a {@code String} with the first letter of each word capitalized. + * + * @param src the source {@code String} + * @return the capitalized {@code String} + */ + public static String capitalizeWords(String src) { + if (src == null || src.isBlank()) { + return src; + } + + var result = new StringBuilder(); + var capitalizeNext = true; + + for (var i = 0; i < src.length(); i++) { + char c = src.charAt(i); + if (Character.isWhitespace(c)) { + capitalizeNext = true; + result.append(c); + } else { + if (capitalizeNext) { + result.append(Character.toUpperCase(c)); + } else { + result.append(Character.toLowerCase(c)); + } + capitalizeNext = false; + } + } + + return result.toString(); + } + /** *

Encodes the source {@code String} to the specified encoding.

* diff --git a/src/test/java/rife/render/TestRenderUtils.java b/src/test/java/rife/render/TestRenderUtils.java index 747e87c..f1f8c46 100644 --- a/src/test/java/rife/render/TestRenderUtils.java +++ b/src/test/java/rife/render/TestRenderUtils.java @@ -40,6 +40,17 @@ class TestRenderUtils { assertThat(RenderUtils.abbreviate("", 10, "")).as("").isEmpty(); } + @Test + void testCapitalizeWords() { + assertThat(RenderUtils.capitalizeWords("hello world")).isEqualTo("Hello World"); + assertThat(RenderUtils.capitalizeWords("java programming")).isEqualTo("Java Programming"); + assertThat(RenderUtils.capitalizeWords("TEST")).isEqualTo("Test"); + assertThat(RenderUtils.capitalizeWords("multiple spaces")).isEqualTo("Multiple Spaces"); + assertThat(RenderUtils.capitalizeWords("white\t\fspaces")).isEqualTo("White\t\fSpaces"); + assertThat(RenderUtils.capitalizeWords("")).isEmpty(); + assertThat(RenderUtils.capitalizeWords(null)).isNull(); + } + @Test void testEncode() { var p = new Properties(); From 6dc23012cca0278aad8f433f8bbc79488412433f Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 15 Nov 2024 11:48:01 -0800 Subject: [PATCH 13/24] 1.2.0 SNAPSHOT --- src/bld/java/rife/render/TemplateRenderersBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bld/java/rife/render/TemplateRenderersBuild.java b/src/bld/java/rife/render/TemplateRenderersBuild.java index 773530f..dab50d4 100644 --- a/src/bld/java/rife/render/TemplateRenderersBuild.java +++ b/src/bld/java/rife/render/TemplateRenderersBuild.java @@ -40,7 +40,7 @@ public class TemplateRenderersBuild extends Project { public TemplateRenderersBuild() { pkg = "rife.render"; name = "rife2-template-renderers"; - version = version(1, 1, 7, "SNAPSHOT"); + version = version(1, 2, 0, "SNAPSHOT"); javaRelease = 17; downloadSources = true; From 4731afb83bbffa8530c6c49d3965300c52683f5c Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 14 Jan 2025 12:45:47 -0800 Subject: [PATCH 14/24] Bumped Jacoco extension to version 0.9.9 --- lib/bld/bld-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index aba0f19..b9f8716 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -1,8 +1,8 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true bld.downloadLocation= -bld.extension-jacoco=com.uwyn.rife2:bld-jacoco-report:0.9.8 bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.1.7 +bld.extension-jacoco=com.uwyn.rife2:bld-jacoco-report:0.9.9 bld.extension-tests=com.uwyn.rife2:bld-tests-badge:1.4.6 bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES bld.version=2.1.0 From a1ab01a7fcb48f6b6fbe0c0db2c1b2a216fe4dfc Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 14 Jan 2025 12:46:09 -0800 Subject: [PATCH 15/24] Bumped PMD extension to version 1.1.0 --- lib/bld/bld-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index b9f8716..82dba52 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -1,8 +1,8 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true bld.downloadLocation= -bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.1.7 bld.extension-jacoco=com.uwyn.rife2:bld-jacoco-report:0.9.9 +bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.1.10 bld.extension-tests=com.uwyn.rife2:bld-tests-badge:1.4.6 bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES bld.version=2.1.0 From 2c842bdb6ad60c69575ff0648931ac9191d7eb38 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 14 Jan 2025 12:47:49 -0800 Subject: [PATCH 16/24] Bumped AssertJ to version 3.27.2 --- src/bld/java/rife/render/TemplateRenderersBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bld/java/rife/render/TemplateRenderersBuild.java b/src/bld/java/rife/render/TemplateRenderersBuild.java index dab50d4..cbf06ae 100644 --- a/src/bld/java/rife/render/TemplateRenderersBuild.java +++ b/src/bld/java/rife/render/TemplateRenderersBuild.java @@ -52,7 +52,7 @@ public class TemplateRenderersBuild extends Project { scope(test) .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 3))) .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 3))) - .include(dependency("org.assertj", "assertj-core", version(3, 26, 3))); + .include(dependency("org.assertj", "assertj-core", version(3, 27, 2))); javadocOperation().javadocOptions() .docTitle("RIFE2 Template Renderers") From b10826481e501c1fff4b1d1223b2f9ae0e5ccf1f Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 14 Jan 2025 12:48:54 -0800 Subject: [PATCH 17/24] Bumped JUnit to version 5.11.4 --- src/bld/java/rife/render/TemplateRenderersBuild.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bld/java/rife/render/TemplateRenderersBuild.java b/src/bld/java/rife/render/TemplateRenderersBuild.java index cbf06ae..924b471 100644 --- a/src/bld/java/rife/render/TemplateRenderersBuild.java +++ b/src/bld/java/rife/render/TemplateRenderersBuild.java @@ -50,8 +50,8 @@ public class TemplateRenderersBuild extends Project { scope(compile) .include(dependency("com.uwyn.rife2", "rife2", version(1, 9, 0))); scope(test) - .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 3))) - .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 3))) + .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 4))) + .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 4))) .include(dependency("org.assertj", "assertj-core", version(3, 27, 2))); javadocOperation().javadocOptions() From b0f9c5a4eda135928e09ae7da66b8e48e8a373c0 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 14 Jan 2025 12:49:24 -0800 Subject: [PATCH 18/24] Bumped RIFE2 to version 1.9.1 --- src/bld/java/rife/render/TemplateRenderersBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bld/java/rife/render/TemplateRenderersBuild.java b/src/bld/java/rife/render/TemplateRenderersBuild.java index 924b471..af96b1d 100644 --- a/src/bld/java/rife/render/TemplateRenderersBuild.java +++ b/src/bld/java/rife/render/TemplateRenderersBuild.java @@ -48,7 +48,7 @@ public class TemplateRenderersBuild extends Project { repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES); scope(compile) - .include(dependency("com.uwyn.rife2", "rife2", version(1, 9, 0))); + .include(dependency("com.uwyn.rife2", "rife2", version(1, 9, 1))); scope(test) .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 4))) .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 4))) From 8383f75ad92e62c879f13f4268703c8b7d05f5cc Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 14 Jan 2025 12:50:32 -0800 Subject: [PATCH 19/24] Bumped bld to version 2.2.0 --- .idea/codeStyles/codeStyleConfig.xml | 5 +++++ .idea/icon.svg | 12 ++++++++++++ .idea/libraries/bld.xml | 4 ++-- .vscode/settings.json | 2 +- README.md | 2 +- lib/bld/bld-wrapper.jar | Bin 30440 -> 30440 bytes lib/bld/bld-wrapper.properties | 2 +- src/main/java/rife/render/RenderUtils.java | 10 ++++++++-- 8 files changed, 30 insertions(+), 7 deletions(-) create mode 100644 .idea/codeStyles/codeStyleConfig.xml create mode 100644 .idea/icon.svg diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..d91f848 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/icon.svg b/.idea/icon.svg new file mode 100644 index 0000000..4d21850 --- /dev/null +++ b/.idea/icon.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/.idea/libraries/bld.xml b/.idea/libraries/bld.xml index 5c4010c..553c281 100644 --- a/.idea/libraries/bld.xml +++ b/.idea/libraries/bld.xml @@ -2,12 +2,12 @@ - + - + diff --git a/.vscode/settings.json b/.vscode/settings.json index 4c33beb..a3f4fd0 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,7 +9,7 @@ ], "java.configuration.updateBuildConfiguration": "automatic", "java.project.referencedLibraries": [ - "${HOME}/.bld/dist/bld-2.1.0.jar", + "${HOME}/.bld/dist/bld-2.2.0.jar", "lib/**/*.jar" ] } diff --git a/README.md b/README.md index 45c7030..7620b01 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ [![License](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![Java](https://img.shields.io/badge/java-17%2B-blue)](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html) -[![bld](https://img.shields.io/badge/2.1.0-FA9052?label=bld&labelColor=2392FF)](https://rife2.com/bld) +[![bld](https://img.shields.io/badge/2.2.0-FA9052?label=bld&labelColor=2392FF)](https://rife2.com/bld) [![GitHub release (latest by date)](https://img.shields.io/github/v/release/rife2/rife2-template-renderers)](https://github.com/rife2/rife2-template-renderers/releases/latest) [![Release](https://flat.badgen.net/maven/v/metadata-url/repo.rife2.com/releases/com/uwyn/rife2/rife2-renderers/maven-metadata.xml?color=blue)](https://repo.rife2.com/#/releases/com/uwyn/rife2/rife2-renderers) [![Maven Central](https://img.shields.io/maven-central/v/com.uwyn.rife2/rife2-renderers)](https://central.sonatype.com/artifact/com.uwyn.rife2/rife2-renderers/) diff --git a/lib/bld/bld-wrapper.jar b/lib/bld/bld-wrapper.jar index 3867a5badc2ef011a7b041c0cf02cc6702fb21a2..1f020ad97e99bff65585fb6b3481aded438d90a7 100644 GIT binary patch delta 203 zcmaFymhr_~M!o=VW)=|!4h{|m$w}H#6ZvXcK=j6b6B{sNa-Y4%=Jz(UnZUfwefC{Y zmW&gd9z;y7;2a}_^`p=LB0E{9L{8qnshM0T=HiJZz6V+Mu*Z+4E0MUkQG3=9mcKpf!B$Rxsmuy1l+ qi4(-0EhQdc#-!3= 200 && code <= 399) { @@ -265,10 +266,15 @@ public final class RenderUtils { if (LOGGER.isLoggable(Level.WARNING)) { LOGGER.log(Level.WARNING, "An IO error occurred while connecting to " + fetchUrl.getHost(), ioe); } + } finally { + if (connection != null) { + connection.disconnect(); + } } } catch (MalformedURLException ignored) { // do nothing } + return defaultContent; } From 9c14794ee8304883c1442be44bc677e0d1440436 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 14 Jan 2025 12:50:49 -0800 Subject: [PATCH 20/24] Version 1.2.0 --- src/bld/java/rife/render/TemplateRenderersBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bld/java/rife/render/TemplateRenderersBuild.java b/src/bld/java/rife/render/TemplateRenderersBuild.java index af96b1d..a77ce8c 100644 --- a/src/bld/java/rife/render/TemplateRenderersBuild.java +++ b/src/bld/java/rife/render/TemplateRenderersBuild.java @@ -40,7 +40,7 @@ public class TemplateRenderersBuild extends Project { public TemplateRenderersBuild() { pkg = "rife.render"; name = "rife2-template-renderers"; - version = version(1, 2, 0, "SNAPSHOT"); + version = version(1, 2, 0); javaRelease = 17; downloadSources = true; From 10ea21245b047d461eec846c505dd31a6de9f4d6 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 25 Feb 2025 09:35:27 -0800 Subject: [PATCH 21/24] Bump JUnit to version 5.12.0 --- src/bld/java/rife/render/TemplateRenderersBuild.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bld/java/rife/render/TemplateRenderersBuild.java b/src/bld/java/rife/render/TemplateRenderersBuild.java index a77ce8c..8727781 100644 --- a/src/bld/java/rife/render/TemplateRenderersBuild.java +++ b/src/bld/java/rife/render/TemplateRenderersBuild.java @@ -50,9 +50,9 @@ public class TemplateRenderersBuild extends Project { scope(compile) .include(dependency("com.uwyn.rife2", "rife2", version(1, 9, 1))); scope(test) - .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 4))) - .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 4))) .include(dependency("org.assertj", "assertj-core", version(3, 27, 2))); + .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 12, 0))) + .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 12, 0))) javadocOperation().javadocOptions() .docTitle("RIFE2 Template Renderers") From 68d88ea7d31cad89626dad532d57e2b36499a6d1 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 25 Feb 2025 09:37:49 -0800 Subject: [PATCH 22/24] Bump AssertJ to version 3.27.3 --- src/bld/java/rife/render/TemplateRenderersBuild.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/bld/java/rife/render/TemplateRenderersBuild.java b/src/bld/java/rife/render/TemplateRenderersBuild.java index 8727781..c92590d 100644 --- a/src/bld/java/rife/render/TemplateRenderersBuild.java +++ b/src/bld/java/rife/render/TemplateRenderersBuild.java @@ -53,6 +53,7 @@ public class TemplateRenderersBuild extends Project { .include(dependency("org.assertj", "assertj-core", version(3, 27, 2))); .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 12, 0))) .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 12, 0))) + .include(dependency("org.assertj", "assertj-core", version(3, 27, 3))); javadocOperation().javadocOptions() .docTitle("RIFE2 Template Renderers") From 013218f399c5f0bb58493a703ecba4654dfffc06 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 25 Feb 2025 09:38:36 -0800 Subject: [PATCH 23/24] Bump bld to version 2.2.1 --- .github/workflows/pages.yml | 4 ++-- .idea/libraries/bld.xml | 4 ++-- .vscode/settings.json | 2 +- README.md | 2 +- lib/bld/bld-wrapper.jar | Bin 30440 -> 30440 bytes lib/bld/bld-wrapper.properties | 4 ++-- .../rife/render/TemplateRenderersBuild.java | 1 - 7 files changed, 8 insertions(+), 9 deletions(-) diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index bf43624..508f6a5 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -47,11 +47,11 @@ jobs: uses: actions/configure-pages@v3 - name: Upload artifact - uses: actions/upload-pages-artifact@v1 + uses: actions/upload-pages-artifact@v3 with: # Upload generated Javadocs repository path: "build/javadoc/" - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v1 + uses: actions/deploy-pages@v4 diff --git a/.idea/libraries/bld.xml b/.idea/libraries/bld.xml index 553c281..153a060 100644 --- a/.idea/libraries/bld.xml +++ b/.idea/libraries/bld.xml @@ -2,12 +2,12 @@ - + - + diff --git a/.vscode/settings.json b/.vscode/settings.json index a3f4fd0..ba429d0 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,7 +9,7 @@ ], "java.configuration.updateBuildConfiguration": "automatic", "java.project.referencedLibraries": [ - "${HOME}/.bld/dist/bld-2.2.0.jar", + "${HOME}/.bld/dist/bld-2.2.1.jar", "lib/**/*.jar" ] } diff --git a/README.md b/README.md index 7620b01..0e85de6 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ [![License](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![Java](https://img.shields.io/badge/java-17%2B-blue)](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html) -[![bld](https://img.shields.io/badge/2.2.0-FA9052?label=bld&labelColor=2392FF)](https://rife2.com/bld) +[![bld](https://img.shields.io/badge/2.2.1-FA9052?label=bld&labelColor=2392FF)](https://rife2.com/bld) [![GitHub release (latest by date)](https://img.shields.io/github/v/release/rife2/rife2-template-renderers)](https://github.com/rife2/rife2-template-renderers/releases/latest) [![Release](https://flat.badgen.net/maven/v/metadata-url/repo.rife2.com/releases/com/uwyn/rife2/rife2-renderers/maven-metadata.xml?color=blue)](https://repo.rife2.com/#/releases/com/uwyn/rife2/rife2-renderers) [![Maven Central](https://img.shields.io/maven-central/v/com.uwyn.rife2/rife2-renderers)](https://central.sonatype.com/artifact/com.uwyn.rife2/rife2-renderers/) diff --git a/lib/bld/bld-wrapper.jar b/lib/bld/bld-wrapper.jar index 1f020ad97e99bff65585fb6b3481aded438d90a7..1c1580cdec95793aac44d8bc0c513215effc0a17 100644 GIT binary patch delta 187 zcmaFymhr_~M&1B#W)=|!4h{|m$ITHFdFz;g)W$wj8xTFY*Isk;dz;xzAkOAq`)&wB z+KF8cETUR)o)OIWUT6rGnyg)-sK~+);LXk<_eVm3oq>UY6^H}88JR>F;I>T8EpY}L ozq!N{O#d$l0n=fn5PEH?E13VaG!7zO=Fb6iK@`Z$$!p830SuWv!2kdN delta 187 zcmaFymhr_~M&1B#W)=|!4h{|m$w}H1dFz;g)W$wj8xTFY*Isk;dz;xzAkOAq`)&wB z+KF8cETUR)o)OIWUT6rGnyg)-sK~$&;LXm_aYjCzoq>UY6^H}88JR>F;I>T8EpY}L ozq!N{O#d$l0n=fn5PEH?E13VaG!7zO=Fb6iK@`Z$$!p830j@STO#lD@ diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index 946cba9..c1d316f 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -2,7 +2,7 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true bld.downloadLocation= bld.extension-jacoco=com.uwyn.rife2:bld-jacoco-report:0.9.9 -bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.1.10 +bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.2.0 bld.extension-tests=com.uwyn.rife2:bld-tests-badge:1.4.6 bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES -bld.version=2.2.0 +bld.version=2.2.1 diff --git a/src/bld/java/rife/render/TemplateRenderersBuild.java b/src/bld/java/rife/render/TemplateRenderersBuild.java index c92590d..cca0b7b 100644 --- a/src/bld/java/rife/render/TemplateRenderersBuild.java +++ b/src/bld/java/rife/render/TemplateRenderersBuild.java @@ -50,7 +50,6 @@ public class TemplateRenderersBuild extends Project { scope(compile) .include(dependency("com.uwyn.rife2", "rife2", version(1, 9, 1))); scope(test) - .include(dependency("org.assertj", "assertj-core", version(3, 27, 2))); .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 12, 0))) .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 12, 0))) .include(dependency("org.assertj", "assertj-core", version(3, 27, 3))); From ba0b5b2e9c25d217898c98d5666d3d47911e2640 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 25 Feb 2025 09:39:08 -0800 Subject: [PATCH 24/24] 1.2.1-SNAPSHOT --- src/bld/java/rife/render/TemplateRenderersBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bld/java/rife/render/TemplateRenderersBuild.java b/src/bld/java/rife/render/TemplateRenderersBuild.java index cca0b7b..4f4fc5e 100644 --- a/src/bld/java/rife/render/TemplateRenderersBuild.java +++ b/src/bld/java/rife/render/TemplateRenderersBuild.java @@ -40,7 +40,7 @@ public class TemplateRenderersBuild extends Project { public TemplateRenderersBuild() { pkg = "rife.render"; name = "rife2-template-renderers"; - version = version(1, 2, 0); + version = version(1, 2, 1, "SNAPSHOT"); javaRelease = 17; downloadSources = true;