Skip to content

Commit 00c5f00

Browse files
committed
Pebble template file not found if packaging into jar fix #765
1 parent 24df466 commit 00c5f00

2 files changed

Lines changed: 82 additions & 1 deletion

File tree

jooby-pebble/src/main/java/org/jooby/pebble/Pebble.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ public class Pebble implements Jooby.Module {
142142
* @param suffix Template extension.
143143
*/
144144
public Pebble(final String prefix, final String suffix) {
145-
this.pebble = new PebbleEngine.Builder().loader(loader(prefix, suffix));
145+
this.pebble = new PebbleEngine.Builder().loader(loader(safePrefix(prefix), suffix));
146146
}
147147

148148
/**
@@ -240,4 +240,14 @@ private static Loader<String> loader(final String prefix, final String suffix) {
240240
return loader;
241241
}
242242

243+
private static String safePrefix(final String prefix) {
244+
if (prefix != null && prefix.length() > 0) {
245+
if (prefix.startsWith("/")) {
246+
String rewrite = prefix.substring(1);
247+
return rewrite.length() == 0 ? null : rewrite;
248+
}
249+
}
250+
return null;
251+
}
252+
243253
}

jooby-pebble/src/test/java/org/jooby/pebble/PebbleTest.java

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,77 @@ public void basic() throws Exception {
107107
});
108108
}
109109

110+
@Test
111+
public void prefixAsRoot() throws Exception {
112+
Locale locale = Locale.getDefault();
113+
new MockUnit(Env.class, Config.class, Binder.class, PebbleEngine.class)
114+
.expect(defLoader)
115+
.expect(newEngine)
116+
.expect(env("dev", locale))
117+
.expect(cacheStatic)
118+
.expect(cache("pebble.cache", null))
119+
.expect(cache(0))
120+
.expect(cache("pebble.tagCache", null))
121+
.expect(tagCache(0))
122+
.expect(locale(locale))
123+
.expect(build)
124+
.expect(bindEngine)
125+
.expect(renderer)
126+
.run(unit -> {
127+
new Pebble("/", ".html")
128+
.configure(unit.get(Env.class), unit.get(Config.class), unit.get(Binder.class));
129+
});
130+
}
131+
132+
@Test
133+
public void emptyPrefix() throws Exception {
134+
Locale locale = Locale.getDefault();
135+
new MockUnit(Env.class, Config.class, Binder.class, PebbleEngine.class)
136+
.expect(defLoader)
137+
.expect(newEngine)
138+
.expect(env("dev", locale))
139+
.expect(cacheStatic)
140+
.expect(cache("pebble.cache", null))
141+
.expect(cache(0))
142+
.expect(cache("pebble.tagCache", null))
143+
.expect(tagCache(0))
144+
.expect(locale(locale))
145+
.expect(build)
146+
.expect(bindEngine)
147+
.expect(renderer)
148+
.run(unit -> {
149+
new Pebble("", ".html")
150+
.configure(unit.get(Env.class), unit.get(Config.class), unit.get(Binder.class));
151+
});
152+
}
153+
154+
@Test
155+
public void noEmptyPrefix() throws Exception {
156+
Locale locale = Locale.getDefault();
157+
new MockUnit(Env.class, Config.class, Binder.class, PebbleEngine.class)
158+
.expect(unit -> {
159+
ClasspathLoader loader = unit.constructor(ClasspathLoader.class).build();
160+
loader.setPrefix("views");
161+
loader.setSuffix(".html");
162+
unit.registerMock(ClasspathLoader.class, loader);
163+
})
164+
.expect(newEngine)
165+
.expect(env("dev", locale))
166+
.expect(cacheStatic)
167+
.expect(cache("pebble.cache", null))
168+
.expect(cache(0))
169+
.expect(cache("pebble.tagCache", null))
170+
.expect(tagCache(0))
171+
.expect(locale(locale))
172+
.expect(build)
173+
.expect(bindEngine)
174+
.expect(renderer)
175+
.run(unit -> {
176+
new Pebble("/views", ".html")
177+
.configure(unit.get(Env.class), unit.get(Config.class), unit.get(Binder.class));
178+
});
179+
}
180+
110181
@Test
111182
public void proddef() throws Exception {
112183
Locale locale = Locale.getDefault();

0 commit comments

Comments
 (0)