Script config closure delegate and script auto imports.
This commit is contained in:
parent
92515785a0
commit
dd5ccc55e9
@ -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<TextType> defaultTextTypes
|
||||
private final Collection<TemplateType> defaultTemplateTypes
|
||||
private final Collection<PartType> defaultPartTypes
|
||||
private final Collection<SpecialPageType> 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<TextType> getDefaultTextTypes() {
|
||||
this.defaultTextTypes
|
||||
}
|
||||
|
||||
Collection<TemplateType> getDefaultTemplateTypes() {
|
||||
this.defaultTemplateTypes
|
||||
}
|
||||
|
||||
Collection<PartType> getDefaultPartTypes() {
|
||||
this.defaultPartTypes
|
||||
}
|
||||
|
||||
Collection<SpecialPageType> 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()
|
||||
|
@ -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())
|
||||
|
@ -42,4 +42,9 @@ class PartFilePartsProvider implements PartsProvider {
|
||||
parts
|
||||
}
|
||||
|
||||
@Override
|
||||
Collection<PartType> getPartTypes() {
|
||||
this.partTypes
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -2,4 +2,5 @@ package com.jessebrault.ssg.part
|
||||
|
||||
interface PartsProvider {
|
||||
Collection<Part> getParts()
|
||||
Collection<PartType> getPartTypes()
|
||||
}
|
@ -44,4 +44,9 @@ class SpecialPageFileSpecialPagesProvider implements SpecialPagesProvider {
|
||||
specialPages
|
||||
}
|
||||
|
||||
@Override
|
||||
Collection<SpecialPageType> getSpecialPageTypes() {
|
||||
this.specialPageTypes
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -2,4 +2,5 @@ package com.jessebrault.ssg.specialpage
|
||||
|
||||
interface SpecialPagesProvider {
|
||||
Collection<SpecialPage> getSpecialPages()
|
||||
Collection<SpecialPageType> getSpecialPageTypes()
|
||||
}
|
@ -41,4 +41,9 @@ class TemplateFileTemplatesProvider implements TemplatesProvider {
|
||||
templates
|
||||
}
|
||||
|
||||
@Override
|
||||
Collection<TemplateType> getTemplateTypes() {
|
||||
this.templateTypes
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -2,4 +2,5 @@ package com.jessebrault.ssg.template
|
||||
|
||||
interface TemplatesProvider {
|
||||
Collection<Template> getTemplates()
|
||||
Collection<TemplateType> getTemplateTypes()
|
||||
}
|
||||
|
@ -44,4 +44,9 @@ class TextFileTextsProvider implements TextsProvider {
|
||||
textFiles
|
||||
}
|
||||
|
||||
@Override
|
||||
Collection<TextType> getTextTypes() {
|
||||
this.textTypes
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -2,4 +2,5 @@ package com.jessebrault.ssg.text
|
||||
|
||||
interface TextsProvider {
|
||||
Collection<Text> getTextFiles()
|
||||
Collection<TextType> getTextTypes()
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user