Skip to content

Commit e496e7b

Browse files
authored
Merge pull request #1097 from HubSpot/better-nested-reconstruction
Handle nested representations inside of fully evaluated objects
2 parents baf0cc3 + d1032ef commit e496e7b

4 files changed

Lines changed: 52 additions & 1 deletion

src/main/java/com/hubspot/jinjava/util/EagerExpressionResolver.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,23 @@ public String toString(boolean forOutput) {
393393
} else {
394394
asString = PyishObjectMapper.getAsPyishString(resolvedObject);
395395
}
396+
if (
397+
!forOutput &&
398+
interpreter != null &&
399+
interpreter.getConfig().isNestedInterpretationEnabled() &&
400+
asString.contains(
401+
interpreter.getConfig().getTokenScannerSymbols().getExpressionStart()
402+
)
403+
) {
404+
Set<String> dependentWords = EagerExpressionResolver.findDeferredWords(
405+
asString,
406+
interpreter
407+
);
408+
if (!dependentWords.isEmpty()) {
409+
deferredWords.addAll(dependentWords);
410+
return asString;
411+
}
412+
}
396413
return asString;
397414
}
398415

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,11 @@
11
map.foo: Foo is I am foo.
22
map.bar: Bar is I am bar.
3+
4+
5+
6+
a
7+
8+
9+
10+
11+
{'b': 'b'}

src/test/resources/eager/reconstructs-nested-value-in-string-representation.expected.jinja

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,14 @@
22
{% do map_with_vals.put('bar', 'Bar is {{ bar }}.') %}
33
{% endif %}
44
map.foo: {{ map_with_vals.foo }}
5-
map.bar: {{ map_with_vals.bar }}
5+
map.bar: {{ map_with_vals.bar }}
6+
7+
{% set a = 'a' %}{% set aa = '{{ a }}' %}{% if deferred %}
8+
{% set aaa = '{{ aa }}' %}
9+
{{ aa }}
10+
{% endif %}
11+
12+
{% set b = 'b' %}{% set bb = '{{ b }}' %}{% if deferred %}
13+
{% set bbb = {'b': '{{ bb }}'} %}
14+
{'b': '{{ bb }}'}
15+
{% endif %}

src/test/resources/eager/reconstructs-nested-value-in-string-representation.jinja

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,18 @@
77
{% endif %}
88
map.foo: {{ map_with_vals.foo }}
99
map.bar: {{ map_with_vals.bar }}
10+
11+
{%- set a = 'a' %}
12+
{% set aa = '{{ a }}' %}
13+
{% if deferred %}
14+
{% set aaa = '{{ aa }}' %}
15+
{{ aaa }}
16+
{% endif -%}
17+
18+
{%- set b = 'b' %}
19+
{% set bb = '{{ b }}' %}
20+
{% if deferred %}
21+
{% set bbb = {'b': '{{ bb }}'} %}
22+
{{ bbb }}
23+
{% endif -%}
24+

0 commit comments

Comments
 (0)