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
|
package com.jessebrault.ssg.buildscript
|
||||||
|
|
||||||
import com.jessebrault.ssg.Config
|
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
|
import groovy.transform.TupleConstructor
|
||||||
|
|
||||||
abstract class BuildScriptBase extends Script {
|
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)
|
@TupleConstructor(includeFields = true, defaults = false)
|
||||||
static class GlobalsConfigurator {
|
static class GlobalsClosureDelegate {
|
||||||
|
|
||||||
private final Map globals
|
private final Map globals
|
||||||
|
|
||||||
@ -26,19 +66,19 @@ abstract class BuildScriptBase extends Script {
|
|||||||
Map globals
|
Map globals
|
||||||
|
|
||||||
void config(
|
void config(
|
||||||
@DelegatesTo(value = Config, strategy = Closure.DELEGATE_FIRST)
|
@DelegatesTo(value = ConfigClosureDelegate, strategy = Closure.DELEGATE_FIRST)
|
||||||
Closure configClosure
|
Closure configClosure
|
||||||
) {
|
) {
|
||||||
configClosure.setDelegate(this.config)
|
configClosure.setDelegate(new ConfigClosureDelegate(this.config))
|
||||||
configClosure.setResolveStrategy(Closure.DELEGATE_FIRST)
|
configClosure.setResolveStrategy(Closure.DELEGATE_FIRST)
|
||||||
configClosure.run()
|
configClosure.run()
|
||||||
}
|
}
|
||||||
|
|
||||||
void globals(
|
void globals(
|
||||||
@DelegatesTo(value = GlobalsConfigurator, strategy = Closure.DELEGATE_FIRST)
|
@DelegatesTo(value = GlobalsClosureDelegate, strategy = Closure.DELEGATE_FIRST)
|
||||||
Closure globalsClosure
|
Closure globalsClosure
|
||||||
) {
|
) {
|
||||||
def globalsConfigurator = new GlobalsConfigurator(this.globals)
|
def globalsConfigurator = new GlobalsClosureDelegate(this.globals)
|
||||||
globalsClosure.setDelegate(globalsConfigurator)
|
globalsClosure.setDelegate(globalsConfigurator)
|
||||||
globalsClosure.setResolveStrategy(Closure.DELEGATE_FIRST)
|
globalsClosure.setResolveStrategy(Closure.DELEGATE_FIRST)
|
||||||
globalsClosure.run()
|
globalsClosure.run()
|
||||||
|
@ -2,6 +2,7 @@ package com.jessebrault.ssg.buildscript
|
|||||||
|
|
||||||
import com.jessebrault.ssg.Config
|
import com.jessebrault.ssg.Config
|
||||||
import org.codehaus.groovy.control.CompilerConfiguration
|
import org.codehaus.groovy.control.CompilerConfiguration
|
||||||
|
import org.codehaus.groovy.control.customizers.ImportCustomizer
|
||||||
|
|
||||||
class GroovyBuildScriptRunner implements BuildScriptRunner {
|
class GroovyBuildScriptRunner implements BuildScriptRunner {
|
||||||
|
|
||||||
@ -11,6 +12,16 @@ class GroovyBuildScriptRunner implements BuildScriptRunner {
|
|||||||
Objects.requireNonNull(globals)
|
Objects.requireNonNull(globals)
|
||||||
def engine = new GroovyScriptEngine([new File('.').toURI().toURL()] as URL[])
|
def engine = new GroovyScriptEngine([new File('.').toURI().toURL()] as URL[])
|
||||||
engine.config = new CompilerConfiguration().tap {
|
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'
|
scriptBaseClass = 'com.jessebrault.ssg.buildscript.BuildScriptBase'
|
||||||
}
|
}
|
||||||
def buildScript = engine.createScript('build.groovy', new Binding())
|
def buildScript = engine.createScript('build.groovy', new Binding())
|
||||||
|
@ -42,4 +42,9 @@ class PartFilePartsProvider implements PartsProvider {
|
|||||||
parts
|
parts
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
Collection<PartType> getPartTypes() {
|
||||||
|
this.partTypes
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,4 +2,5 @@ package com.jessebrault.ssg.part
|
|||||||
|
|
||||||
interface PartsProvider {
|
interface PartsProvider {
|
||||||
Collection<Part> getParts()
|
Collection<Part> getParts()
|
||||||
|
Collection<PartType> getPartTypes()
|
||||||
}
|
}
|
@ -44,4 +44,9 @@ class SpecialPageFileSpecialPagesProvider implements SpecialPagesProvider {
|
|||||||
specialPages
|
specialPages
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
Collection<SpecialPageType> getSpecialPageTypes() {
|
||||||
|
this.specialPageTypes
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,4 +2,5 @@ package com.jessebrault.ssg.specialpage
|
|||||||
|
|
||||||
interface SpecialPagesProvider {
|
interface SpecialPagesProvider {
|
||||||
Collection<SpecialPage> getSpecialPages()
|
Collection<SpecialPage> getSpecialPages()
|
||||||
|
Collection<SpecialPageType> getSpecialPageTypes()
|
||||||
}
|
}
|
@ -41,4 +41,9 @@ class TemplateFileTemplatesProvider implements TemplatesProvider {
|
|||||||
templates
|
templates
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
Collection<TemplateType> getTemplateTypes() {
|
||||||
|
this.templateTypes
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,4 +2,5 @@ package com.jessebrault.ssg.template
|
|||||||
|
|
||||||
interface TemplatesProvider {
|
interface TemplatesProvider {
|
||||||
Collection<Template> getTemplates()
|
Collection<Template> getTemplates()
|
||||||
|
Collection<TemplateType> getTemplateTypes()
|
||||||
}
|
}
|
||||||
|
@ -44,4 +44,9 @@ class TextFileTextsProvider implements TextsProvider {
|
|||||||
textFiles
|
textFiles
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
Collection<TextType> getTextTypes() {
|
||||||
|
this.textTypes
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,4 +2,5 @@ package com.jessebrault.ssg.text
|
|||||||
|
|
||||||
interface TextsProvider {
|
interface TextsProvider {
|
||||||
Collection<Text> getTextFiles()
|
Collection<Text> getTextFiles()
|
||||||
|
Collection<TextType> getTextTypes()
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user