Skip to content

Commit 4424f3d

Browse files
committed
Allow Pyish serialization to be more efficient by passing along a string builder to new method appendPyishString(sb)
1 parent d34bc17 commit 4424f3d

6 files changed

Lines changed: 32 additions & 13 deletions

File tree

src/main/java/com/hubspot/jinjava/el/ext/NamedParameter.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,10 @@ public String toString() {
2626
}
2727

2828
@Override
29-
public String toPyishString() {
30-
return name + "=" + PyishSerializable.writeValueAsString(value);
29+
public StringBuilder appendPyishString(StringBuilder sb) {
30+
return sb
31+
.append(name)
32+
.append('=')
33+
.append(PyishSerializable.writeValueAsString(value));
3134
}
3235
}

src/main/java/com/hubspot/jinjava/interpret/LazyReference.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public void setReferenceKey(String referenceKey) {
2424
}
2525

2626
@Override
27-
public String toPyishString() {
27+
public CharSequence toPyishString() {
2828
return getReferenceKey();
2929
}
3030
}

src/main/java/com/hubspot/jinjava/objects/Namespace.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public Namespace(Map<String, Object> map, int maxSize) {
2020
}
2121

2222
@Override
23-
public String toPyishString() {
24-
return String.format("namespace(%s)", PyishSerializable.super.toPyishString());
23+
public StringBuilder appendPyishString(StringBuilder sb) {
24+
return PyishSerializable.super.appendPyishString(sb.append("namespace(")).append(')');
2525
}
2626
}

src/main/java/com/hubspot/jinjava/objects/date/PyishDate.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -158,11 +158,12 @@ public boolean equals(Object obj) {
158158
}
159159

160160
@Override
161-
public String toPyishString() {
162-
return String.format(
163-
"'%s'|strtotime(%s)",
164-
strftime(FULL_DATE_FORMAT),
165-
PyishObjectMapper.getAsPyishString(FULL_DATE_FORMAT)
166-
);
161+
public StringBuilder appendPyishString(StringBuilder sb) {
162+
return sb
163+
.append('\'')
164+
.append(strftime(FULL_DATE_FORMAT))
165+
.append("'|strtotime(")
166+
.append(PyishObjectMapper.getAsPyishString(FULL_DATE_FORMAT))
167+
.append(')');
167168
}
168169
}

src/main/java/com/hubspot/jinjava/objects/serialization/PyishSerializable.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,24 @@ default CharSequence toPyishString() {
2828
return writeValueAsString(this);
2929
}
3030

31+
/**
32+
* Allows for a class to append the custom string representation in Jinjava.
33+
* This method can be overridden to append a custom representation.
34+
* This method will be used by {@link #writeSelf(JsonGenerator, SerializerProvider)}
35+
* to specify what will be written to the json generator.
36+
* If the pyish string representation of this object is composed of several strings,
37+
* it's recommended to override this method instead of {@link #toPyishString()}
38+
* @param sb StringBuilder to append the pyish string representation to.
39+
* @return The same StringBuilder sb with an appended result
40+
*/
41+
default StringBuilder appendPyishString(StringBuilder sb) {
42+
return sb.append(toPyishString());
43+
}
44+
3145
/**
3246
* Allows for a class to specify how its pyish string representation will
3347
* be written to the json generator.
48+
*
3449
* If the pyish string representation of this object can be very large, it's recommended
3550
* to override this method instead of {@link #toPyishString()} so that jsonGenerator
3651
* can be written to multiple times, allowing multiple limit checks to occur.
@@ -40,7 +55,7 @@ default void writeSelf(
4055
SerializerProvider serializerProvider
4156
)
4257
throws IOException {
43-
jsonGenerator.writeRawValue(toPyishString().toString());
58+
jsonGenerator.writeRawValue(appendPyishString(new StringBuilder()).toString());
4459
}
4560

4661
/**

src/test/java/com/hubspot/jinjava/lib/filter/RejectAttrFilterTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ public String toString() {
112112
}
113113

114114
@Override
115-
public String toPyishString() {
115+
public CharSequence toPyishString() {
116116
return toString();
117117
}
118118
}

0 commit comments

Comments
 (0)