Skip to content

Commit ec40df0

Browse files
committed
assets prefix fix #553
1 parent 8d2308c commit ec40df0

3 files changed

Lines changed: 79 additions & 14 deletions

File tree

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package org.jooby.issues;
2+
3+
import org.jooby.Results;
4+
import org.jooby.assets.Assets;
5+
import org.jooby.assets.AssetsBase;
6+
import org.jooby.hbs.Hbs;
7+
import org.junit.Test;
8+
9+
public class Issue553 extends AssetsBase {
10+
11+
{
12+
13+
use(assets("dev",
14+
"basedir", "org/jooby/assets",
15+
"dev", hash("prefix", "https://foo.cdn.org"),
16+
"fileset", hash("home", list("js/index.js", "css/index.css")), "watch", false));
17+
18+
use(new Hbs("/org/jooby/assets"));
19+
use(new Assets());
20+
21+
get("/553", () -> Results.html("index"));
22+
}
23+
24+
@Test
25+
public void nopipeline() throws Exception {
26+
request()
27+
.get("/553")
28+
.expect("[/org/jooby/assets/css/index.css]\n" +
29+
"<link href=\"https://foo.cdn.org/org/jooby/assets/css/index.css\" rel=\"stylesheet\">\n" +
30+
"\n" +
31+
"[/org/jooby/assets/js/index.js]\n" +
32+
"<script src=\"https://foo.cdn.org/org/jooby/assets/js/index.js\"></script>\n");
33+
}
34+
35+
}

jooby-assets/src/main/java/org/jooby/assets/Assets.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
*/
1919
package org.jooby.assets;
2020

21+
import java.util.List;
22+
2123
import org.jooby.Env;
2224
import org.jooby.Jooby;
2325
import org.jooby.Router;
@@ -26,6 +28,7 @@
2628
import org.jooby.internal.assets.AssetVars;
2729
import org.jooby.internal.assets.LiveCompiler;
2830

31+
import com.google.common.collect.ImmutableList;
2932
import com.google.inject.Binder;
3033
import com.typesafe.config.Config;
3134
import com.typesafe.config.ConfigFactory;
@@ -301,14 +304,21 @@ public class Assets implements Jooby.Module {
301304

302305
@Override
303306
public void configure(final Env env, final Config config, final Binder binder) throws Throwable {
304-
boolean dev = "dev".equals(env.name());
307+
String envname = env.name();
308+
boolean dev = "dev".equals(envname);
305309
ClassLoader loader = getClass().getClassLoader();
306310
Config conf = conf(dev, loader, config);
307311
String cpath = config.getString("application.path");
308312
AssetCompiler compiler = new AssetCompiler(loader, conf);
309313

310314
Router routes = env.router();
311-
routes.use("*", "*", new AssetVars(compiler, cpath)).name("/assets/vars");
315+
List<String> dist = dev ? ImmutableList.of("dev") : ImmutableList.of(envname, "dist");
316+
String prefix = dist.stream()
317+
.filter(it -> conf.hasPath("assets." + it + ".prefix"))
318+
.findFirst()
319+
.map(it -> conf.getString("assets." + it + ".prefix"))
320+
.orElse(cpath);
321+
routes.use("*", "*", new AssetVars(compiler, prefix, !dev)).name("/assets/vars");
312322
// live compiler?
313323
boolean watch = conf.hasPath("assets.watch") ? conf.getBoolean("assets.watch") : dev;
314324
if (watch) {

jooby-assets/src/main/java/org/jooby/internal/assets/AssetVars.java

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,40 +19,60 @@
1919
package org.jooby.internal.assets;
2020

2121
import java.util.List;
22-
import java.util.stream.Collectors;
2322

2423
import org.jooby.Request;
2524
import org.jooby.Response;
2625
import org.jooby.Route;
2726
import org.jooby.assets.AssetCompiler;
2827

28+
import javaslang.Function1;
29+
2930
public class AssetVars implements Route.Handler {
3031

3132
private AssetCompiler compiler;
3233

3334
private String cpath;
3435

35-
public AssetVars(final AssetCompiler compiler, final String cpath) {
36+
private Function1<String, List<String>> styles;
37+
private Function1<String, List<String>> scripts;
38+
39+
public AssetVars(final AssetCompiler compiler, final String cpath, final boolean cache) {
3640
this.compiler = compiler;
3741
this.cpath = cpath.equals("/") ? "" : cpath;
42+
styles = compiler::styles;
43+
scripts = compiler::scripts;
44+
if (cache) {
45+
styles = styles.memoized();
46+
scripts = scripts.memoized();
47+
}
3848
}
3949

4050
@Override
4151
public void handle(final Request req, final Response rsp) throws Exception {
4252
compiler.fileset().forEach(asset -> {
4353
/** Styles */
44-
List<String> styles = compiler.styles(asset);
45-
req.set(asset + "_css", styles);
46-
req.set(asset + "_styles", styles.stream()
47-
.map(p -> "<link href=\"" + cpath + p + "\" rel=\"stylesheet\">\n")
48-
.collect(Collectors.joining()));
54+
List<String> css = this.styles.apply(asset);
55+
String styles = css.stream().reduce(new StringBuilder(),
56+
(buff, it) -> buff.append("<link href=\"")
57+
.append(cpath)
58+
.append(it)
59+
.append("\" rel=\"stylesheet\">\n"),
60+
StringBuilder::append)
61+
.toString();
62+
req.set(asset + "_css", css);
63+
req.set(asset + "_styles", styles);
4964

5065
/** Scripts */
51-
List<String> scripts = compiler.scripts(asset);
52-
req.set(asset + "_js", scripts);
53-
req.set(asset + "_scripts", scripts.stream()
54-
.map(p -> "<script src=\"" + cpath + p + "\"></script>\n")
55-
.collect(Collectors.joining()));
66+
List<String> js = this.scripts.apply(asset);
67+
String scripts = js.stream().reduce(new StringBuilder(),
68+
(buff, it) -> buff.append("<script src=\"")
69+
.append(cpath)
70+
.append(it)
71+
.append("\"></script>\n"),
72+
StringBuilder::append)
73+
.toString();
74+
req.set(asset + "_js", js);
75+
req.set(asset + "_scripts", scripts);
5676
});
5777
}
5878

0 commit comments

Comments
 (0)