diff --git a/lib/src/main/java/rife/render/Capitalize.java b/lib/src/main/java/rife/render/Capitalize.java
index a2e838f..2b9a925 100644
--- a/lib/src/main/java/rife/render/Capitalize.java
+++ b/lib/src/main/java/rife/render/Capitalize.java
@@ -40,11 +40,7 @@ public class Capitalize implements ValueRenderer {
*/
@Override
public String render(Template template, String valueId, String differentiator) {
- if (template.hasValueId(differentiator)) {
- var value = template.getValue(differentiator);
- return value.substring(0, 1).toUpperCase(Localization.getLocale()) + value.substring(1);
- } else {
- return "";
- }
+ var value = RenderUtils.fetchValue(template, differentiator);
+ return value.substring(0, 1).toUpperCase(Localization.getLocale()) + value.substring(1);
}
}
diff --git a/lib/src/main/java/rife/render/EncodeBase64.java b/lib/src/main/java/rife/render/EncodeBase64.java
index 4b495fd..997897a 100644
--- a/lib/src/main/java/rife/render/EncodeBase64.java
+++ b/lib/src/main/java/rife/render/EncodeBase64.java
@@ -43,10 +43,7 @@ public class EncodeBase64 implements ValueRenderer {
*/
@Override
public String render(Template template, String valueId, String differentiator) {
- if (template.hasValueId(differentiator)) {
- return StringUtils.encodeBase64(template.getValue(differentiator).getBytes(StandardCharsets.UTF_8));
- } else {
- return "";
- }
+ return StringUtils.encodeBase64(RenderUtils.fetchValue(template, differentiator)
+ .getBytes(StandardCharsets.UTF_8));
}
}
diff --git a/lib/src/main/java/rife/render/EncodeHtml.java b/lib/src/main/java/rife/render/EncodeHtml.java
index 1194c45..3490e5e 100644
--- a/lib/src/main/java/rife/render/EncodeHtml.java
+++ b/lib/src/main/java/rife/render/EncodeHtml.java
@@ -41,10 +41,6 @@ public class EncodeHtml implements ValueRenderer {
*/
@Override
public String render(Template template, String valueId, String differentiator) {
- if (template.hasValueId(differentiator)) {
- return StringUtils.encodeHtml(template.getValue(differentiator));
- } else {
- return "";
- }
+ return StringUtils.encodeHtml(RenderUtils.fetchValue(template, differentiator));
}
}
diff --git a/lib/src/main/java/rife/render/EncodeHtmlEntities.java b/lib/src/main/java/rife/render/EncodeHtmlEntities.java
index 42fad25..5e33b49 100644
--- a/lib/src/main/java/rife/render/EncodeHtmlEntities.java
+++ b/lib/src/main/java/rife/render/EncodeHtmlEntities.java
@@ -59,10 +59,6 @@ public class EncodeHtmlEntities implements ValueRenderer {
*/
@Override
public String render(Template template, String valueId, String differentiator) {
- if (template.hasValueId(differentiator)) {
- return toHtmlEntities(template.getValue(differentiator));
- } else {
- return "";
- }
+ return toHtmlEntities(RenderUtils.fetchValue(template, differentiator));
}
}
diff --git a/lib/src/main/java/rife/render/EncodeJson.java b/lib/src/main/java/rife/render/EncodeJson.java
index e9eed9c..668f02e 100644
--- a/lib/src/main/java/rife/render/EncodeJson.java
+++ b/lib/src/main/java/rife/render/EncodeJson.java
@@ -41,10 +41,6 @@ public class EncodeJson implements ValueRenderer {
*/
@Override
public String render(Template template, String valueId, String differentiator) {
- if (template.hasValueId(differentiator)) {
- return StringUtils.encodeJson(template.getValue(differentiator));
- } else {
- return "";
- }
+ return StringUtils.encodeJson(RenderUtils.fetchValue(template, differentiator));
}
}
diff --git a/lib/src/main/java/rife/render/EncodeQp.java b/lib/src/main/java/rife/render/EncodeQp.java
index ccff9a2..ac03550 100644
--- a/lib/src/main/java/rife/render/EncodeQp.java
+++ b/lib/src/main/java/rife/render/EncodeQp.java
@@ -76,10 +76,6 @@ public class EncodeQp implements ValueRenderer {
*/
@Override
public String render(Template template, String valueId, String differentiator) {
- if (template.hasValueId(differentiator)) {
- return toQuotedPrintable(template.getValue(differentiator));
- } else {
- return "";
- }
+ return toQuotedPrintable(RenderUtils.fetchValue(template, differentiator));
}
}
diff --git a/lib/src/main/java/rife/render/EncodeUnicode.java b/lib/src/main/java/rife/render/EncodeUnicode.java
index 938b580..a95ae2a 100644
--- a/lib/src/main/java/rife/render/EncodeUnicode.java
+++ b/lib/src/main/java/rife/render/EncodeUnicode.java
@@ -41,10 +41,6 @@ public class EncodeUnicode implements ValueRenderer {
*/
@Override
public String render(Template template, String valueId, String differentiator) {
- if (template.hasValueId(differentiator)) {
- return StringUtils.encodeUnicode(template.getValue(differentiator));
- } else {
- return "";
- }
+ return StringUtils.encodeUnicode(RenderUtils.fetchValue(template, differentiator));
}
}
diff --git a/lib/src/main/java/rife/render/EncodeUrl.java b/lib/src/main/java/rife/render/EncodeUrl.java
index c8abe66..0aa3fd6 100644
--- a/lib/src/main/java/rife/render/EncodeUrl.java
+++ b/lib/src/main/java/rife/render/EncodeUrl.java
@@ -41,14 +41,6 @@ public class EncodeUrl implements ValueRenderer {
*/
@Override
public String render(Template template, String valueId, String differentiator) {
- String value;
- if (template.hasValueId(differentiator)) {
- value = template.getValue(differentiator);
- } else if (template.hasAttribute(differentiator)) {
- value = template.getAttribute(differentiator).toString();
- } else {
- return "";
- }
- return StringUtils.encodeUrl(value);
+ return StringUtils.encodeUrl(RenderUtils.fetchValue(template, differentiator));
}
}
diff --git a/lib/src/main/java/rife/render/EncodeXml.java b/lib/src/main/java/rife/render/EncodeXml.java
index 7e1dd48..069f5ee 100644
--- a/lib/src/main/java/rife/render/EncodeXml.java
+++ b/lib/src/main/java/rife/render/EncodeXml.java
@@ -41,10 +41,6 @@ public class EncodeXml implements ValueRenderer {
*/
@Override
public String render(Template template, String valueId, String differentiator) {
- if (template.hasValueId(differentiator)) {
- return StringUtils.encodeXml(template.getValue(differentiator));
- } else {
- return "";
- }
+ return StringUtils.encodeXml(RenderUtils.fetchValue(template, differentiator));
}
}
diff --git a/lib/src/main/java/rife/render/Lowercase.java b/lib/src/main/java/rife/render/Lowercase.java
index b4de6bd..73a0ac0 100644
--- a/lib/src/main/java/rife/render/Lowercase.java
+++ b/lib/src/main/java/rife/render/Lowercase.java
@@ -40,10 +40,6 @@ public class Lowercase implements ValueRenderer {
*/
@Override
public String render(Template template, String valueId, String differentiator) {
- if (template.hasValueId(differentiator)) {
- return template.getValue(differentiator).toLowerCase(Localization.getLocale());
- } else {
- return "";
- }
+ return RenderUtils.fetchValue(template, differentiator).toLowerCase(Localization.getLocale());
}
}
diff --git a/lib/src/main/java/rife/render/RenderUtils.java b/lib/src/main/java/rife/render/RenderUtils.java
new file mode 100644
index 0000000..b30a43b
--- /dev/null
+++ b/lib/src/main/java/rife/render/RenderUtils.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2023 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.tools.Convert;
+
+/**
+ * Collection of utility-type methods commonly used by the renderers.
+ */
+public final class RenderUtils {
+ private RenderUtils() {
+ // no-op
+ }
+
+ /**
+ * Fetches the specified value from a template or template's attribute.
+ *
+ * @param template the template
+ * @param valueId the ID of the value to fetch
+ * @return The fetched value.
+ */
+ public static String fetchValue(Template template, String valueId) {
+ Object value = null;
+ if (template.hasValueId(valueId)) {
+ value = template.getValue(valueId);
+ }
+ if (value == null && template.hasAttribute(valueId)) {
+ value = template.getAttribute(valueId);
+ }
+ return Convert.toString(value);
+ }
+}
diff --git a/lib/src/main/java/rife/render/Rot13.java b/lib/src/main/java/rife/render/Rot13.java
index e7ce2b9..a18ae41 100644
--- a/lib/src/main/java/rife/render/Rot13.java
+++ b/lib/src/main/java/rife/render/Rot13.java
@@ -77,10 +77,6 @@ public class Rot13 implements ValueRenderer {
*/
@Override
public String render(Template template, String valueId, String differentiator) {
- if (template.hasValueId(differentiator)) {
- return rot13(template.getValue(differentiator));
- } else {
- return "";
- }
+ return rot13(RenderUtils.fetchValue(template, differentiator));
}
}
diff --git a/lib/src/main/java/rife/render/SwapCase.java b/lib/src/main/java/rife/render/SwapCase.java
index f534915..c021372 100644
--- a/lib/src/main/java/rife/render/SwapCase.java
+++ b/lib/src/main/java/rife/render/SwapCase.java
@@ -70,10 +70,6 @@ public class SwapCase implements ValueRenderer {
*/
@Override
public String render(Template template, String valueId, String differentiator) {
- if (template.hasValueId(differentiator)) {
- return swapCase(template.getValue(differentiator));
- } else {
- return "";
- }
+ return swapCase(RenderUtils.fetchValue(template, differentiator));
}
}
diff --git a/lib/src/main/java/rife/render/Trim.java b/lib/src/main/java/rife/render/Trim.java
index 985b102..d16fb63 100644
--- a/lib/src/main/java/rife/render/Trim.java
+++ b/lib/src/main/java/rife/render/Trim.java
@@ -39,10 +39,6 @@ public class Trim implements ValueRenderer {
*/
@Override
public String render(Template template, String valueId, String differentiator) {
- if (template.hasValueId(differentiator)) {
- return template.getValue(differentiator).trim();
- } else {
- return "";
- }
+ return RenderUtils.fetchValue(template, differentiator).trim();
}
}
diff --git a/lib/src/main/java/rife/render/Uncapitalize.java b/lib/src/main/java/rife/render/Uncapitalize.java
index 45682fb..408c7c1 100644
--- a/lib/src/main/java/rife/render/Uncapitalize.java
+++ b/lib/src/main/java/rife/render/Uncapitalize.java
@@ -40,11 +40,7 @@ public class Uncapitalize implements ValueRenderer {
*/
@Override
public String render(Template template, String valueId, String differentiator) {
- if (template.hasValueId(differentiator)) {
- var value = template.getValue(differentiator);
- return value.substring(0, 1).toLowerCase(Localization.getLocale()) + value.substring(1);
- } else {
- return "";
- }
+ var value = RenderUtils.fetchValue(template, differentiator);
+ return value.substring(0, 1).toLowerCase(Localization.getLocale()) + value.substring(1);
}
}
diff --git a/lib/src/main/java/rife/render/Uppercase.java b/lib/src/main/java/rife/render/Uppercase.java
index 7101db7..95c00c1 100644
--- a/lib/src/main/java/rife/render/Uppercase.java
+++ b/lib/src/main/java/rife/render/Uppercase.java
@@ -40,10 +40,6 @@ public class Uppercase implements ValueRenderer {
*/
@Override
public String render(Template template, String valueId, String differentiator) {
- if (template.hasValueId(differentiator)) {
- return template.getValue(differentiator).toUpperCase(Localization.getLocale());
- } else {
- return "";
- }
+ return RenderUtils.fetchValue(template, differentiator).toUpperCase(Localization.getLocale());
}
}
diff --git a/lib/src/test/java/rife/render/TestCase.java b/lib/src/test/java/rife/render/TestCase.java
new file mode 100644
index 0000000..07fc9f1
--- /dev/null
+++ b/lib/src/test/java/rife/render/TestCase.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2023 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 org.junit.jupiter.api.Test;
+import rife.template.TemplateFactory;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+class TestCase {
+ @Test
+ void testCapitalize() {
+ var t = TemplateFactory.TXT.get("capitalize");
+ t.setAttribute("foo", "this is a test");
+ assertThat(t.getContent()).isEqualTo("This is a test");
+ }
+
+ @Test
+ void testLowercase() {
+ var t = TemplateFactory.TXT.get("lowercase");
+ var bean = new ValueBean("this IS a TEST");
+ t.setBean(bean);
+ assertThat(t.getContent()).isEqualTo(bean.getValue() + ": this is a test");
+ }
+}
\ No newline at end of file
diff --git a/lib/src/test/java/rife/render/TestEncode.java b/lib/src/test/java/rife/render/TestEncode.java
index 6b580f7..6234532 100644
--- a/lib/src/test/java/rife/render/TestEncode.java
+++ b/lib/src/test/java/rife/render/TestEncode.java
@@ -17,17 +17,48 @@
package rife.render;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import rife.template.TemplateFactory;
import static org.assertj.core.api.Assertions.assertThat;
+
class TestEncode {
+ public static final String FOO = "foo";
+
+ @Test
+ void testEncodeBase64() {
+ var t = TemplateFactory.TXT.get("base64");
+ t.setValue(FOO, "This is a test");
+ assertThat(t.getContent()).isEqualTo(t.getValue(FOO) + ": VGhpcyBpcyBhIHRlc3Q=");
+ }
+
+ @Test
+ void testEncodeHtml() {
+ var t = TemplateFactory.HTML.get("encodeHtml");
+ t.setAttribute(FOO, "");
+ assertThat(t.getContent()).isEqualTo("<a test &>");
+ }
+
+ @Test
+ void testEncodeRot13() {
+ var t = TemplateFactory.TXT.get("rot13");
+ var value = "This is a test";
+ var rot13 = "Guvf vf n grfg";
+
+ // Encode
+ var bean = new ValueBean(value);
+ t.setBean(bean);
+ assertThat(t.getContent()).isEqualTo(bean.getValue() + ": " + rot13);
+
+ // Decode
+ t.setValue("value", rot13);
+ assertThat(t.getContent()).isEqualTo(rot13 + ": " + value);
+ }
+
@Test
void testEncodeUrl() {
var t = TemplateFactory.HTML.get("encodeUrl");
- t.setAttribute("foo", "a test &");
- var encodedValue = "a%20test%20%26";
- assertThat(t.getContent()).isEqualTo(encodedValue + "
\n" + encodedValue);
+ t.setAttribute(FOO, "a test &");
+ assertThat(t.getContent()).isEqualTo("a test &");
}
-}
+}
\ No newline at end of file
diff --git a/lib/src/test/resources/templates/base64.txt b/lib/src/test/resources/templates/base64.txt
new file mode 100644
index 0000000..fc4ea4d
--- /dev/null
+++ b/lib/src/test/resources/templates/base64.txt
@@ -0,0 +1 @@
+{{v foo/}}: {{v render:rife.render.EncodeBase64:foo/}}
\ No newline at end of file
diff --git a/lib/src/test/resources/templates/capitalize.txt b/lib/src/test/resources/templates/capitalize.txt
new file mode 100644
index 0000000..55c972b
--- /dev/null
+++ b/lib/src/test/resources/templates/capitalize.txt
@@ -0,0 +1 @@
+{{v render:rife.render.Capitalize:foo/}}
\ No newline at end of file
diff --git a/lib/src/test/resources/templates/encodeHtml.html b/lib/src/test/resources/templates/encodeHtml.html
new file mode 100644
index 0000000..5f0a12f
--- /dev/null
+++ b/lib/src/test/resources/templates/encodeHtml.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/lib/src/test/resources/templates/encodeUrl.html b/lib/src/test/resources/templates/encodeUrl.html
index cf5a5f9..58c9aa2 100644
--- a/lib/src/test/resources/templates/encodeUrl.html
+++ b/lib/src/test/resources/templates/encodeUrl.html
@@ -1,3 +1 @@
-
-{{v render:rife.render.EncodeUrl:foo/}}
-{{v foo/}}
\ No newline at end of file
+{{v render:rife.render.EncodeHtml:foo/}}
\ No newline at end of file
diff --git a/lib/src/test/resources/templates/lowercase.txt b/lib/src/test/resources/templates/lowercase.txt
new file mode 100644
index 0000000..6bf9790
--- /dev/null
+++ b/lib/src/test/resources/templates/lowercase.txt
@@ -0,0 +1 @@
+{{v value/}}: {{v render:rife.render.Lowercase:value/}}
\ No newline at end of file
diff --git a/lib/src/test/resources/templates/rot13.txt b/lib/src/test/resources/templates/rot13.txt
new file mode 100644
index 0000000..e610273
--- /dev/null
+++ b/lib/src/test/resources/templates/rot13.txt
@@ -0,0 +1 @@
+{{v value/}}: {{v render:rife.render.Rot13:value/}}
\ No newline at end of file