From b741765b24042e0d7c21c952f23e0e07630f5141 Mon Sep 17 00:00:00 2001 From: JesseBrault0709 <62299747+JesseBrault0709@users.noreply.github.com> Date: Mon, 12 Jun 2023 15:53:22 +0200 Subject: [PATCH] Fixed bugs with gst; now using one GroovyScriptEngine. --- api/build.gradle | 2 +- ...BuildScriptBasedStaticSiteGenerator.groovy | 16 ++++------ .../ssg/buildscript/BuildScripts.groovy | 20 +++++++++++++ ...faultBuildScriptConfiguratorFactory.groovy | 10 +++---- .../ssg/page/GspPageRenderer.groovy | 4 +-- .../com/jessebrault/ssg/page/PageTypes.groovy | 7 ++--- .../ssg/part/GspPartRenderer.groovy | 4 +-- .../com/jessebrault/ssg/part/PartTypes.groovy | 7 ++--- .../ssg/render/StandardGspRenderer.groovy | 4 +-- .../ssg/template/GspTemplateRenderer.groovy | 4 +-- .../ssg/template/TemplateTypes.groovy | 11 ++----- ...ScriptBasedStaticSiteGeneratorTests.groovy | 19 +++++------- .../ssg/buildscript/BuildScriptsTests.groovy | 29 ++++++++++++------- .../ssg/page/GspPageRendererTests.groovy | 9 ++++-- .../ssg/part/GspPartRendererTests.groovy | 6 ++-- .../template/GspTemplateRendererTests.groovy | 6 ++-- .../ssg/buildscript/buildSrcTest.groovy | 1 + .../test/resources/oneTextAndTemplate.groovy | 4 ++- .../ssg/AbstractBuildCommand.groovy | 9 +++--- .../ssg/CliBasedStaticSiteGenerator.groovy | 25 +++++++--------- .../com/jessebrault/ssg/SsgBuild.groovy | 7 ++++- cli/src/main/resources/hello.gsp | 1 + cli/src/main/resources/log4j2.xml | 3 ++ .../CliBasedStaticSiteGeneratorTests.groovy | 28 +++++++++++------- cli/src/test/resources/log4j2.xml | 20 +++++++++++++ 25 files changed, 153 insertions(+), 103 deletions(-) create mode 100644 cli/src/test/resources/log4j2.xml diff --git a/api/build.gradle b/api/build.gradle index 75b4953..1060a0a 100644 --- a/api/build.gradle +++ b/api/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { // https://archiva.jessebrault.com/#artifact/com.jessebrault.gst/lib - implementation 'com.jessebrault.gst:lib:0.0.1' + implementation 'com.jessebrault.gst:lib:0.0.3' // https://mvnrepository.com/artifact/org.apache.groovy/groovy-templates implementation 'org.apache.groovy:groovy-templates:4.0.12' diff --git a/api/src/main/groovy/com/jessebrault/ssg/BuildScriptBasedStaticSiteGenerator.groovy b/api/src/main/groovy/com/jessebrault/ssg/BuildScriptBasedStaticSiteGenerator.groovy index 63ed806..4fde512 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/BuildScriptBasedStaticSiteGenerator.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/BuildScriptBasedStaticSiteGenerator.groovy @@ -18,24 +18,23 @@ final class BuildScriptBasedStaticSiteGenerator implements StaticSiteGenerator { private static final Marker enter = MarkerFactory.getMarker('enter') private static final Marker exit = MarkerFactory.getMarker('exit') + private final GroovyScriptEngine engine private final Collection configuratorFactories - @Nullable - private final File buildScript - private final Collection buildSrcDirs + private final @Nullable File buildScript private final Map scriptArgs private final Collection builds = [] private boolean ranBuildScript = false BuildScriptBasedStaticSiteGenerator( + GroovyScriptEngine engine, Collection configuratorFactories = [], @Nullable File buildScript = null, - Collection buildSrcDirs = [], Map scriptArgs = [:] ) { + this.engine = engine this.configuratorFactories = configuratorFactories this.buildScript = buildScript - this.buildSrcDirs = buildSrcDirs this.scriptArgs = scriptArgs } @@ -54,13 +53,10 @@ final class BuildScriptBasedStaticSiteGenerator implements StaticSiteGenerator { logger.info('running buildScript: {}', this.buildScript) def result = BuildScripts.runBuildScript( this.buildScript.name, - this.buildScript.parentFile.toURI().toURL(), - this.buildSrcDirs.collect { it.toURI().toURL() }, + this.engine, [args: this.scriptArgs] ) { base -> - this.configuratorFactories.each { - it.get().accept(base) - } + this.configuratorFactories.each { it.get().accept(base) } } this.builds.addAll(result) } else { diff --git a/api/src/main/groovy/com/jessebrault/ssg/buildscript/BuildScripts.groovy b/api/src/main/groovy/com/jessebrault/ssg/buildscript/BuildScripts.groovy index cf65fac..5a217a9 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/buildscript/BuildScripts.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/buildscript/BuildScripts.groovy @@ -31,6 +31,23 @@ final class BuildScripts { runBase(base) } + static Collection runBuildScript( + String scriptName, + GroovyScriptEngine engine, + Map binding = [:], + Consumer configureBuildScript = { } + ) { + engine.config = new CompilerConfiguration().tap { + scriptBaseClass = 'com.jessebrault.ssg.buildscript.BuildScriptBase' + } + + def base = engine.createScript(scriptName, new Binding(binding)) + assert base instanceof BuildScriptBase + configureBuildScript.accept(base) + runBase(base) + } + + @Deprecated static Collection runBuildScript( String scriptName, URL scriptBaseDirUrl, @@ -50,6 +67,7 @@ final class BuildScripts { runBase(base) } + @Deprecated static Collection runBuildScript( String scriptName, URL scriptBaseDirUrl, @@ -59,6 +77,7 @@ final class BuildScripts { runBuildScript(scriptName, scriptBaseDirUrl, otherUrls, binding) { } } + @Deprecated static Collection runBuildScript( String scriptName, URL scriptBaseDirUrl, @@ -67,6 +86,7 @@ final class BuildScripts { runBuildScript(scriptName, scriptBaseDirUrl, otherUrls, [:]) { } } + @Deprecated static Collection runBuildScript( String scriptName, URL scriptBaseDirUrl diff --git a/api/src/main/groovy/com/jessebrault/ssg/buildscript/DefaultBuildScriptConfiguratorFactory.groovy b/api/src/main/groovy/com/jessebrault/ssg/buildscript/DefaultBuildScriptConfiguratorFactory.groovy index 7affba1..4abfea8 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/buildscript/DefaultBuildScriptConfiguratorFactory.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/buildscript/DefaultBuildScriptConfiguratorFactory.groovy @@ -23,8 +23,8 @@ import java.util.function.Consumer final class DefaultBuildScriptConfiguratorFactory implements BuildScriptConfiguratorFactory { private final File baseDir - private final ClassLoader classLoader - private final Collection scriptBaseUrls + private final File tmpDir + private final GroovyScriptEngine engine @Override Consumer get() { @@ -36,9 +36,9 @@ final class DefaultBuildScriptConfiguratorFactory implements BuildScriptConfigur types { textTypes << TextTypes.MARKDOWN - pageTypes << PageTypes.getGsp(['.gsp', '.ssg.gst'], this.classLoader, this.scriptBaseUrls) - templateTypes << TemplateTypes.getGsp(['.gsp', '.ssg.gst'], this.classLoader, this.scriptBaseUrls) - partTypes << PartTypes.getGsp(['.gsp', '.ssg.gst'], this.classLoader, this.scriptBaseUrls) + pageTypes << PageTypes.getGsp(['.gsp', '.ssg.gst'], this.tmpDir, this.engine) + templateTypes << TemplateTypes.getGsp(['.gsp', '.ssg.gst'], this.tmpDir, this.engine) + partTypes << PartTypes.getGsp(['.gsp', '.ssg.gst'], this.tmpDir, this.engine) } sources { base, types -> diff --git a/api/src/main/groovy/com/jessebrault/ssg/page/GspPageRenderer.groovy b/api/src/main/groovy/com/jessebrault/ssg/page/GspPageRenderer.groovy index e601834..2ca14df 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/page/GspPageRenderer.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/page/GspPageRenderer.groovy @@ -13,8 +13,8 @@ final class GspPageRenderer implements PageRenderer { private final StandardGspRenderer gspRenderer - GspPageRenderer(ClassLoader classLoader, Collection urls) { - this.gspRenderer = new StandardGspRenderer(classLoader, urls) + GspPageRenderer(File tmpDir, GroovyScriptEngine engine) { + this.gspRenderer = new StandardGspRenderer(tmpDir, engine) } @Override diff --git a/api/src/main/groovy/com/jessebrault/ssg/page/PageTypes.groovy b/api/src/main/groovy/com/jessebrault/ssg/page/PageTypes.groovy index 9b9581f..88688f0 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/page/PageTypes.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/page/PageTypes.groovy @@ -2,11 +2,8 @@ package com.jessebrault.ssg.page final class PageTypes { - @Deprecated - static final PageType GSP = new PageType(['.gsp'], new GspPageRenderer(PageTypes.classLoader, [])) - - static PageType getGsp(Collection extensions, ClassLoader classLoader, Collection urls) { - new PageType(extensions, new GspPageRenderer(classLoader, urls)) + static PageType getGsp(Collection extensions, File tmpDir, GroovyScriptEngine engine) { + new PageType(extensions, new GspPageRenderer(tmpDir, engine)) } private PageTypes() {} diff --git a/api/src/main/groovy/com/jessebrault/ssg/part/GspPartRenderer.groovy b/api/src/main/groovy/com/jessebrault/ssg/part/GspPartRenderer.groovy index 6942df5..235dcde 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/part/GspPartRenderer.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/part/GspPartRenderer.groovy @@ -15,8 +15,8 @@ final class GspPartRenderer implements PartRenderer { private final StandardGspRenderer gspRenderer - GspPartRenderer(ClassLoader classLoader, Collection urls) { - this.gspRenderer = new StandardGspRenderer(classLoader, urls) + GspPartRenderer(File tmpDir, GroovyScriptEngine engine) { + this.gspRenderer = new StandardGspRenderer(tmpDir, engine) } @Override diff --git a/api/src/main/groovy/com/jessebrault/ssg/part/PartTypes.groovy b/api/src/main/groovy/com/jessebrault/ssg/part/PartTypes.groovy index 7d0cb11..1602786 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/part/PartTypes.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/part/PartTypes.groovy @@ -2,11 +2,8 @@ package com.jessebrault.ssg.part final class PartTypes { - @Deprecated - static final PartType GSP = new PartType(['.gsp'], new GspPartRenderer(PartTypes.classLoader, [])) - - static PartType getGsp(Collection extensions, ClassLoader classLoader, Collection scriptBaseUrls) { - new PartType(extensions, new GspPartRenderer(classLoader, scriptBaseUrls)) + static PartType getGsp(Collection extensions, File tmpDir, GroovyScriptEngine engine) { + new PartType(extensions, new GspPartRenderer(tmpDir, engine)) } private PartTypes() {} diff --git a/api/src/main/groovy/com/jessebrault/ssg/render/StandardGspRenderer.groovy b/api/src/main/groovy/com/jessebrault/ssg/render/StandardGspRenderer.groovy index 667b74f..5450c9f 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/render/StandardGspRenderer.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/render/StandardGspRenderer.groovy @@ -13,8 +13,8 @@ final class StandardGspRenderer { private final TemplateCreator templateCreator - StandardGspRenderer(ClassLoader parentClassLoader, Collection urls) { - this.templateCreator = new GroovyTemplateCreator(ExtendedGstParser::new, urls, parentClassLoader, true) + StandardGspRenderer(File tmpDir, GroovyScriptEngine engine) { + this.templateCreator = new GroovyTemplateCreator(ExtendedGstParser::new, tmpDir, engine, true) } Result render( diff --git a/api/src/main/groovy/com/jessebrault/ssg/template/GspTemplateRenderer.groovy b/api/src/main/groovy/com/jessebrault/ssg/template/GspTemplateRenderer.groovy index 10dacf8..2ce11c9 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/template/GspTemplateRenderer.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/template/GspTemplateRenderer.groovy @@ -14,8 +14,8 @@ final class GspTemplateRenderer implements TemplateRenderer { private final StandardGspRenderer gspRenderer - GspTemplateRenderer(ClassLoader parentClassLoader, Collection urls) { - this.gspRenderer = new StandardGspRenderer(parentClassLoader, urls) + GspTemplateRenderer(File tmpDir, GroovyScriptEngine engine) { + this.gspRenderer = new StandardGspRenderer(tmpDir, engine) } @Override diff --git a/api/src/main/groovy/com/jessebrault/ssg/template/TemplateTypes.groovy b/api/src/main/groovy/com/jessebrault/ssg/template/TemplateTypes.groovy index 2d76765..1f48fec 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/template/TemplateTypes.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/template/TemplateTypes.groovy @@ -2,15 +2,8 @@ package com.jessebrault.ssg.template final class TemplateTypes { - @Deprecated - static final TemplateType GSP = new TemplateType(['.gsp'], new GspTemplateRenderer(TemplateTypes.classLoader, [])) - - static TemplateType getGsp( - Collection extensions, - ClassLoader classLoader, - Collection scriptBaseUrls - ) { - new TemplateType(extensions, new GspTemplateRenderer(classLoader, scriptBaseUrls)) + static TemplateType getGsp(Collection extensions, File tmpDir, GroovyScriptEngine engine) { + new TemplateType(extensions, new GspTemplateRenderer(tmpDir, engine)) } private TemplateTypes() {} diff --git a/api/src/test/groovy/com/jessebrault/ssg/BuildScriptBasedStaticSiteGeneratorTests.groovy b/api/src/test/groovy/com/jessebrault/ssg/BuildScriptBasedStaticSiteGeneratorTests.groovy index ebb222f..348972d 100644 --- a/api/src/test/groovy/com/jessebrault/ssg/BuildScriptBasedStaticSiteGeneratorTests.groovy +++ b/api/src/test/groovy/com/jessebrault/ssg/BuildScriptBasedStaticSiteGeneratorTests.groovy @@ -32,19 +32,16 @@ final class BuildScriptBasedStaticSiteGeneratorTests { } } - def ssg = new BuildScriptBasedStaticSiteGenerator( - [new BuildScriptConfiguratorFactory() { + def tmpDir = File.createTempDir() + def engine = new GroovyScriptEngine([sourceDir.toURI().toURL(), tmpDir.toURI().toURL()] as URL[]) + def ssg = new BuildScriptBasedStaticSiteGenerator(engine, [new BuildScriptConfiguratorFactory() { - @Override - Consumer get() { - return { } - } + @Override + Consumer get() { + return { } + } - }], - buildScript, - [], - [sourceDir: sourceDir] - ) + }], buildScript, [sourceDir: sourceDir, tmpDir: tmpDir, engine: engine]) assertTrue(ssg.doBuild('test') { it.each { logger.error(it.toString()) } }) diff --git a/api/src/test/groovy/com/jessebrault/ssg/buildscript/BuildScriptsTests.groovy b/api/src/test/groovy/com/jessebrault/ssg/buildscript/BuildScriptsTests.groovy index a12325b..0aeb8f6 100644 --- a/api/src/test/groovy/com/jessebrault/ssg/buildscript/BuildScriptsTests.groovy +++ b/api/src/test/groovy/com/jessebrault/ssg/buildscript/BuildScriptsTests.groovy @@ -48,10 +48,19 @@ final class BuildScriptsTests { tempDir } + private static Collection getBuilds( + String scriptName, + Collection urls, + Map binding = [:], + Consumer configureBase = { } + ) { + runBuildScript(scriptName, new GroovyScriptEngine(urls as URL[]), binding, configureBase) + } + @Test void simpleScript() { def baseDir = this.setupScripts(['simple.groovy']) - def builds = runBuildScript('simple.groovy', baseDir.toURI().toURL()) + def builds = getBuilds('simple.groovy', [baseDir.toURI().toURL()]) assertEquals(1, builds.size()) assertEquals('test', builds[0].name) } @@ -59,7 +68,7 @@ final class BuildScriptsTests { @Test void testImport() { def baseDir = this.setupScripts(['testImport.groovy', 'TestHtmlTask.groovy']) - def builds = runBuildScript('testImport.groovy', baseDir.toURI().toURL()) + def builds = getBuilds('testImport.groovy', [baseDir.toURI().toURL()]) assertEquals(1, builds.size()) assertEquals('test', builds[0].name) } @@ -77,10 +86,12 @@ final class BuildScriptsTests { } } } - def builds = runBuildScript( + def builds = getBuilds( 'buildSrcTest.groovy', - baseDir.toURI().toURL(), - [new File(baseDir, 'buildSrc').toURI().toURL()] + [ + baseDir.toURI().toURL(), + new File(baseDir, 'buildSrc').toURI().toURL() + ] ) assertEquals(1, builds.size()) assertEquals('test', builds[0].name) @@ -89,12 +100,8 @@ final class BuildScriptsTests { @Test void withBinding(@Mock Consumer stringConsumer) { def baseDir = this.setupScripts(['withBinding.groovy']) - runBuildScript( - 'withBinding.groovy', - baseDir.toURI().toURL(), - [], - [stringConsumer: stringConsumer] - ) + def engine = new GroovyScriptEngine([baseDir.toURI().toURL()] as URL[]) + runBuildScript('withBinding.groovy', engine, [stringConsumer: stringConsumer]) verify(stringConsumer).accept('test') } diff --git a/api/src/test/groovy/com/jessebrault/ssg/page/GspPageRendererTests.groovy b/api/src/test/groovy/com/jessebrault/ssg/page/GspPageRendererTests.groovy index a24d77d..96c8e0a 100644 --- a/api/src/test/groovy/com/jessebrault/ssg/page/GspPageRendererTests.groovy +++ b/api/src/test/groovy/com/jessebrault/ssg/page/GspPageRendererTests.groovy @@ -6,8 +6,13 @@ import com.jessebrault.ssg.util.Result final class GspPageRendererTests implements StandardDslConsumerTests { - private static GspPageRenderer getRenderer(ClassLoader classLoader, Collection urls) { - new GspPageRenderer(classLoader, urls) + private static GspPageRenderer getRenderer( + ClassLoader classLoader, + Collection urls + ) { + def tmpDir = File.createTempDir() + def engine = new GroovyScriptEngine([tmpDir.toURI().toURL(), *urls] as URL[], classLoader) + new GspPageRenderer(tmpDir, engine) } @Override diff --git a/api/src/test/groovy/com/jessebrault/ssg/part/GspPartRendererTests.groovy b/api/src/test/groovy/com/jessebrault/ssg/part/GspPartRendererTests.groovy index 1b5e097..253473e 100644 --- a/api/src/test/groovy/com/jessebrault/ssg/part/GspPartRendererTests.groovy +++ b/api/src/test/groovy/com/jessebrault/ssg/part/GspPartRendererTests.groovy @@ -15,10 +15,12 @@ import static org.junit.jupiter.api.Assertions.assertTrue final class GspPartRendererTests implements StandardDslConsumerTests { private static GspPartRenderer getRenderer( - ClassLoader classLoader = GspPartRendererTests.classLoader, + ClassLoader parentClassLoader = GspPartRendererTests.classLoader, Collection urls = [] ) { - new GspPartRenderer(classLoader, urls) + def tmpDir = File.createTempDir() + def engine = new GroovyScriptEngine([tmpDir.toURI().toURL(), *urls] as URL[], parentClassLoader) + new GspPartRenderer(tmpDir, engine) } private static Result doRender( diff --git a/api/src/test/groovy/com/jessebrault/ssg/template/GspTemplateRendererTests.groovy b/api/src/test/groovy/com/jessebrault/ssg/template/GspTemplateRendererTests.groovy index b7bfa03..1106e0a 100644 --- a/api/src/test/groovy/com/jessebrault/ssg/template/GspTemplateRendererTests.groovy +++ b/api/src/test/groovy/com/jessebrault/ssg/template/GspTemplateRendererTests.groovy @@ -14,10 +14,12 @@ import static org.junit.jupiter.api.Assertions.assertEquals final class GspTemplateRendererTests implements StandardDslConsumerTests { private static TemplateRenderer getRenderer( - ClassLoader classLoader = GspTemplateRendererTests.classLoader, + ClassLoader parentLoader = GspTemplateRendererTests.class.classLoader, Collection urls = [] ) { - new GspTemplateRenderer(classLoader, urls) + def tmpDir = File.createTempDir() + def engine = new GroovyScriptEngine([tmpDir.toURI().toURL(), *urls] as URL[], parentLoader) + new GspTemplateRenderer(tmpDir, engine) } private static Result doRender( diff --git a/api/src/test/resources/com/jessebrault/ssg/buildscript/buildSrcTest.groovy b/api/src/test/resources/com/jessebrault/ssg/buildscript/buildSrcTest.groovy index cf578a3..be02194 100644 --- a/api/src/test/resources/com/jessebrault/ssg/buildscript/buildSrcTest.groovy +++ b/api/src/test/resources/com/jessebrault/ssg/buildscript/buildSrcTest.groovy @@ -1,3 +1,4 @@ +//file:noinspection def t = new AnotherTask() build(name: 'test') { } diff --git a/api/src/test/resources/oneTextAndTemplate.groovy b/api/src/test/resources/oneTextAndTemplate.groovy index f907b34..1d43c5d 100644 --- a/api/src/test/resources/oneTextAndTemplate.groovy +++ b/api/src/test/resources/oneTextAndTemplate.groovy @@ -14,6 +14,8 @@ BuildScriptBase b final class Args { File sourceDir + File tmpDir + GroovyScriptEngine engine } def args = args as Args @@ -23,7 +25,7 @@ build(name: 'test') { types { textTypes << TextTypes.MARKDOWN - templateTypes << TemplateTypes.GSP + templateTypes << TemplateTypes.getGsp(['.gsp'], args.tmpDir, args.engine) } sources { base, types -> diff --git a/cli/src/main/groovy/com/jessebrault/ssg/AbstractBuildCommand.groovy b/cli/src/main/groovy/com/jessebrault/ssg/AbstractBuildCommand.groovy index 9051b7c..be23c29 100644 --- a/cli/src/main/groovy/com/jessebrault/ssg/AbstractBuildCommand.groovy +++ b/cli/src/main/groovy/com/jessebrault/ssg/AbstractBuildCommand.groovy @@ -39,17 +39,16 @@ abstract class AbstractBuildCommand extends AbstractSubCommand { protected StaticSiteGenerator staticSiteGenerator = null - protected final Integer doSingleBuild(String requestedBuild) { + protected final Integer doSingleBuild(String requestedBuild, File tmpDir, GroovyScriptEngine engine) { logger.traceEntry('requestedBuild: {}', requestedBuild) if (this.staticSiteGenerator == null) { this.staticSiteGenerator = new CliBasedStaticSiteGenerator( new File('.'), this.buildScript, - this.buildSrcDirs, - this.scriptArgs, - this.class.classLoader, - this.buildSrcDirs.collect { it.toURI().toURL() } + tmpDir, + engine, + this.scriptArgs ) } diff --git a/cli/src/main/groovy/com/jessebrault/ssg/CliBasedStaticSiteGenerator.groovy b/cli/src/main/groovy/com/jessebrault/ssg/CliBasedStaticSiteGenerator.groovy index c4d5ead..da071e8 100644 --- a/cli/src/main/groovy/com/jessebrault/ssg/CliBasedStaticSiteGenerator.groovy +++ b/cli/src/main/groovy/com/jessebrault/ssg/CliBasedStaticSiteGenerator.groovy @@ -11,38 +11,33 @@ final class CliBasedStaticSiteGenerator implements StaticSiteGenerator { private final File baseDir private final File buildScript - private final Collection buildSrcDirs + private final File tmpDir private final Map scriptArgs - private final ClassLoader classLoader - private final Collection scriptBaseUrls + private final GroovyScriptEngine engine private StaticSiteGenerator staticSiteGenerator CliBasedStaticSiteGenerator( File baseDir, File buildScript, - Collection buildSrcDirs, - Map scriptArgs, - ClassLoader classLoader, - Collection scriptBaseUrls + File tmpDir, + GroovyScriptEngine engine, + Map scriptArgs ) { this.baseDir = baseDir this.buildScript = buildScript - this.buildSrcDirs = buildSrcDirs + this.tmpDir = tmpDir this.scriptArgs = scriptArgs - this.classLoader = classLoader - this.scriptBaseUrls = scriptBaseUrls + this.engine = engine } @Override boolean doBuild(String buildName, Consumer> diagnosticsConsumer) { if (this.staticSiteGenerator == null) { this.staticSiteGenerator = new BuildScriptBasedStaticSiteGenerator( - [new DefaultBuildScriptConfiguratorFactory(this.baseDir, this.classLoader, this.scriptBaseUrls)], - this.buildScript == new File('ssgBuilds.groovy') || this.buildScript.exists() - ? new File(this.baseDir, this.buildScript.path) - : null, - this.buildSrcDirs.collect { new File(this.baseDir, it.path) }, + this.engine, + [new DefaultBuildScriptConfiguratorFactory(this.baseDir, this.tmpDir, this.engine)], + this.buildScript, this.scriptArgs ) } diff --git a/cli/src/main/groovy/com/jessebrault/ssg/SsgBuild.groovy b/cli/src/main/groovy/com/jessebrault/ssg/SsgBuild.groovy index 458eb4d..7ff26b2 100644 --- a/cli/src/main/groovy/com/jessebrault/ssg/SsgBuild.groovy +++ b/cli/src/main/groovy/com/jessebrault/ssg/SsgBuild.groovy @@ -17,8 +17,13 @@ final class SsgBuild extends AbstractBuildCommand { protected Integer doSubCommand() { logger.traceEntry() def result = 0 + def tmpDir = File.createTempDir() + def urls = [tmpDir, *this.buildSrcDirs, new File('.')].collect { + it.toURI().toURL() + } as URL[] + def engine = new GroovyScriptEngine(urls) this.requestedBuilds.each { - def buildResult = this.doSingleBuild(it) + def buildResult = this.doSingleBuild(it, tmpDir, engine) if (buildResult == 1) { result = 1 } diff --git a/cli/src/main/resources/hello.gsp b/cli/src/main/resources/hello.gsp index 19f5461..e752e2f 100644 --- a/cli/src/main/resources/hello.gsp +++ b/cli/src/main/resources/hello.gsp @@ -1,5 +1,6 @@ <% + println "delegate.text: $delegate.text" out << parts['head.gsp'].render([ title: "${ siteSpec.name }: ${ text.frontMatter.title }" ]) diff --git a/cli/src/main/resources/log4j2.xml b/cli/src/main/resources/log4j2.xml index 79c3e7d..b747528 100644 --- a/cli/src/main/resources/log4j2.xml +++ b/cli/src/main/resources/log4j2.xml @@ -13,5 +13,8 @@ + + + \ No newline at end of file diff --git a/cli/src/test/groovy/com/jessebrault/ssg/CliBasedStaticSiteGeneratorTests.groovy b/cli/src/test/groovy/com/jessebrault/ssg/CliBasedStaticSiteGeneratorTests.groovy index 57c31d5..861df05 100644 --- a/cli/src/test/groovy/com/jessebrault/ssg/CliBasedStaticSiteGeneratorTests.groovy +++ b/cli/src/test/groovy/com/jessebrault/ssg/CliBasedStaticSiteGeneratorTests.groovy @@ -11,22 +11,30 @@ final class CliBasedStaticSiteGeneratorTests { @Test void meatyInitAndBuild() { - def tempDir = File.createTempDir() - SsgInit.init(tempDir, true) + def baseDir = File.createTempDir() + SsgInit.init(baseDir, true) + def tmpDir = File.createTempDir() + def engine = new GroovyScriptEngine([ + new File(baseDir, 'buildSrc').toURI().toURL(), + tmpDir.toURI().toURL() + ] as URL[]) def ssg = new CliBasedStaticSiteGenerator( - tempDir, - new File('ssgBuilds.groovy'), - [new File('buildSrc')], - [:], - this.class.classLoader, - [new File(tempDir, 'buildSrc').toURI().toURL()] + baseDir, + new File(baseDir, 'ssgBuilds.groovy'), + tmpDir, + engine, + [:] ) def diagnostics = [] as Collection - assertTrue(ssg.doBuild('production', diagnostics.&addAll)) + assertTrue(ssg.doBuild('production', diagnostics.&addAll), { + diagnostics.inject('') { acc, diagnostic -> + acc + '\n' + diagnostic.message + } + }) assertTrue(diagnostics.empty) - def buildDir = new File(tempDir, 'production') + def buildDir = new File(baseDir, 'production') assertTrue(buildDir.exists()) assertTrue(buildDir.directory) diff --git a/cli/src/test/resources/log4j2.xml b/cli/src/test/resources/log4j2.xml new file mode 100644 index 0000000..2800428 --- /dev/null +++ b/cli/src/test/resources/log4j2.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file