From dd5ccc55e9606e47b391e36d4a5734cbacc98c25 Mon Sep 17 00:00:00 2001 From: JesseBrault0709 <62299747+JesseBrault0709@users.noreply.github.com> Date: Sat, 7 Jan 2023 21:38:37 -0600 Subject: [PATCH] Script config closure delegate and script auto imports. --- .../ssg/buildscript/BuildScriptBase.groovy | 50 +++++++++++++++++-- .../GroovyBuildScriptRunner.groovy | 11 ++++ .../ssg/part/PartFilePartsProvider.groovy | 5 ++ .../jessebrault/ssg/part/PartsProvider.groovy | 1 + ...SpecialPageFileSpecialPagesProvider.groovy | 5 ++ .../specialpage/SpecialPagesProvider.groovy | 1 + .../TemplateFileTemplatesProvider.groovy | 5 ++ .../ssg/template/TemplatesProvider.groovy | 1 + .../ssg/text/TextFileTextsProvider.groovy | 5 ++ .../jessebrault/ssg/text/TextsProvider.groovy | 1 + 10 files changed, 80 insertions(+), 5 deletions(-) diff --git a/lib/src/main/groovy/com/jessebrault/ssg/buildscript/BuildScriptBase.groovy b/lib/src/main/groovy/com/jessebrault/ssg/buildscript/BuildScriptBase.groovy index cb86614..5262d49 100644 --- a/lib/src/main/groovy/com/jessebrault/ssg/buildscript/BuildScriptBase.groovy +++ b/lib/src/main/groovy/com/jessebrault/ssg/buildscript/BuildScriptBase.groovy @@ -1,12 +1,52 @@ package com.jessebrault.ssg.buildscript import com.jessebrault.ssg.Config +import com.jessebrault.ssg.part.PartType +import com.jessebrault.ssg.specialpage.SpecialPageType +import com.jessebrault.ssg.template.TemplateType +import com.jessebrault.ssg.text.TextType import groovy.transform.TupleConstructor abstract class BuildScriptBase extends Script { + static class ConfigClosureDelegate { + + @Delegate + private final Config config + + private final Collection defaultTextTypes + private final Collection defaultTemplateTypes + private final Collection defaultPartTypes + private final Collection defaultSpecialPageTypes + + ConfigClosureDelegate(Config config) { + this.config = config + this.defaultTextTypes = this.config.textProviders.collectMany { it.textTypes } + this.defaultTemplateTypes = this.config.templatesProviders.collectMany { it.templateTypes } + this.defaultPartTypes = this.config.partsProviders.collectMany { it.partTypes } + this.defaultSpecialPageTypes = this.config.specialPagesProviders.collectMany { it.specialPageTypes } + } + + Collection getDefaultTextTypes() { + this.defaultTextTypes + } + + Collection getDefaultTemplateTypes() { + this.defaultTemplateTypes + } + + Collection getDefaultPartTypes() { + this.defaultPartTypes + } + + Collection getDefaultSpecialPageTypes() { + this.defaultSpecialPageTypes + } + + } + @TupleConstructor(includeFields = true, defaults = false) - static class GlobalsConfigurator { + static class GlobalsClosureDelegate { private final Map globals @@ -26,19 +66,19 @@ abstract class BuildScriptBase extends Script { Map globals void config( - @DelegatesTo(value = Config, strategy = Closure.DELEGATE_FIRST) + @DelegatesTo(value = ConfigClosureDelegate, strategy = Closure.DELEGATE_FIRST) Closure configClosure ) { - configClosure.setDelegate(this.config) + configClosure.setDelegate(new ConfigClosureDelegate(this.config)) configClosure.setResolveStrategy(Closure.DELEGATE_FIRST) configClosure.run() } void globals( - @DelegatesTo(value = GlobalsConfigurator, strategy = Closure.DELEGATE_FIRST) + @DelegatesTo(value = GlobalsClosureDelegate, strategy = Closure.DELEGATE_FIRST) Closure globalsClosure ) { - def globalsConfigurator = new GlobalsConfigurator(this.globals) + def globalsConfigurator = new GlobalsClosureDelegate(this.globals) globalsClosure.setDelegate(globalsConfigurator) globalsClosure.setResolveStrategy(Closure.DELEGATE_FIRST) globalsClosure.run() diff --git a/lib/src/main/groovy/com/jessebrault/ssg/buildscript/GroovyBuildScriptRunner.groovy b/lib/src/main/groovy/com/jessebrault/ssg/buildscript/GroovyBuildScriptRunner.groovy index c4db848..034ed63 100644 --- a/lib/src/main/groovy/com/jessebrault/ssg/buildscript/GroovyBuildScriptRunner.groovy +++ b/lib/src/main/groovy/com/jessebrault/ssg/buildscript/GroovyBuildScriptRunner.groovy @@ -2,6 +2,7 @@ package com.jessebrault.ssg.buildscript import com.jessebrault.ssg.Config import org.codehaus.groovy.control.CompilerConfiguration +import org.codehaus.groovy.control.customizers.ImportCustomizer class GroovyBuildScriptRunner implements BuildScriptRunner { @@ -11,6 +12,16 @@ class GroovyBuildScriptRunner implements BuildScriptRunner { Objects.requireNonNull(globals) def engine = new GroovyScriptEngine([new File('.').toURI().toURL()] as URL[]) engine.config = new CompilerConfiguration().tap { + addCompilationCustomizers(new ImportCustomizer().tap { + addStarImports( + 'com.jessebrault.ssg', + 'com.jessebrault.ssg.part', + 'com.jessebrault.ssg.specialpage', + 'com.jessebrault.ssg.template', + 'com.jessebrault.ssg.text', + 'com.jessebrault.ssg.util' + ) + }) scriptBaseClass = 'com.jessebrault.ssg.buildscript.BuildScriptBase' } def buildScript = engine.createScript('build.groovy', new Binding()) diff --git a/lib/src/main/groovy/com/jessebrault/ssg/part/PartFilePartsProvider.groovy b/lib/src/main/groovy/com/jessebrault/ssg/part/PartFilePartsProvider.groovy index 1a44f1d..73e627e 100644 --- a/lib/src/main/groovy/com/jessebrault/ssg/part/PartFilePartsProvider.groovy +++ b/lib/src/main/groovy/com/jessebrault/ssg/part/PartFilePartsProvider.groovy @@ -42,4 +42,9 @@ class PartFilePartsProvider implements PartsProvider { parts } + @Override + Collection getPartTypes() { + this.partTypes + } + } diff --git a/lib/src/main/groovy/com/jessebrault/ssg/part/PartsProvider.groovy b/lib/src/main/groovy/com/jessebrault/ssg/part/PartsProvider.groovy index 692a7dd..510316a 100644 --- a/lib/src/main/groovy/com/jessebrault/ssg/part/PartsProvider.groovy +++ b/lib/src/main/groovy/com/jessebrault/ssg/part/PartsProvider.groovy @@ -2,4 +2,5 @@ package com.jessebrault.ssg.part interface PartsProvider { Collection getParts() + Collection getPartTypes() } \ No newline at end of file diff --git a/lib/src/main/groovy/com/jessebrault/ssg/specialpage/SpecialPageFileSpecialPagesProvider.groovy b/lib/src/main/groovy/com/jessebrault/ssg/specialpage/SpecialPageFileSpecialPagesProvider.groovy index 6f4a8e9..657b9fe 100644 --- a/lib/src/main/groovy/com/jessebrault/ssg/specialpage/SpecialPageFileSpecialPagesProvider.groovy +++ b/lib/src/main/groovy/com/jessebrault/ssg/specialpage/SpecialPageFileSpecialPagesProvider.groovy @@ -44,4 +44,9 @@ class SpecialPageFileSpecialPagesProvider implements SpecialPagesProvider { specialPages } + @Override + Collection getSpecialPageTypes() { + this.specialPageTypes + } + } diff --git a/lib/src/main/groovy/com/jessebrault/ssg/specialpage/SpecialPagesProvider.groovy b/lib/src/main/groovy/com/jessebrault/ssg/specialpage/SpecialPagesProvider.groovy index 9570c34..72c08e4 100644 --- a/lib/src/main/groovy/com/jessebrault/ssg/specialpage/SpecialPagesProvider.groovy +++ b/lib/src/main/groovy/com/jessebrault/ssg/specialpage/SpecialPagesProvider.groovy @@ -2,4 +2,5 @@ package com.jessebrault.ssg.specialpage interface SpecialPagesProvider { Collection getSpecialPages() + Collection getSpecialPageTypes() } \ No newline at end of file diff --git a/lib/src/main/groovy/com/jessebrault/ssg/template/TemplateFileTemplatesProvider.groovy b/lib/src/main/groovy/com/jessebrault/ssg/template/TemplateFileTemplatesProvider.groovy index 365da85..2bfae98 100644 --- a/lib/src/main/groovy/com/jessebrault/ssg/template/TemplateFileTemplatesProvider.groovy +++ b/lib/src/main/groovy/com/jessebrault/ssg/template/TemplateFileTemplatesProvider.groovy @@ -41,4 +41,9 @@ class TemplateFileTemplatesProvider implements TemplatesProvider { templates } + @Override + Collection getTemplateTypes() { + this.templateTypes + } + } diff --git a/lib/src/main/groovy/com/jessebrault/ssg/template/TemplatesProvider.groovy b/lib/src/main/groovy/com/jessebrault/ssg/template/TemplatesProvider.groovy index e3290c2..0173af4 100644 --- a/lib/src/main/groovy/com/jessebrault/ssg/template/TemplatesProvider.groovy +++ b/lib/src/main/groovy/com/jessebrault/ssg/template/TemplatesProvider.groovy @@ -2,4 +2,5 @@ package com.jessebrault.ssg.template interface TemplatesProvider { Collection