Updated to DefaultBuildScriptConfiguratorFactory and related.

This commit is contained in:
JesseBrault0709 2023-05-14 15:44:36 +02:00
parent cdda27ea3a
commit d73f2ba521
4 changed files with 58 additions and 42 deletions

View File

@ -1,19 +1,16 @@
package com.jessebrault.ssg.buildscript package com.jessebrault.ssg.buildscript
import com.jessebrault.ssg.html.PageToHtmlTaskFactory import com.jessebrault.ssg.html.PageToHtmlTaskFactory
import com.jessebrault.ssg.html.TextToHtmlSpec import com.jessebrault.ssg.html.TextToHtmlSpecProviders
import com.jessebrault.ssg.html.TextToHtmlTaskFactory import com.jessebrault.ssg.html.TextToHtmlTaskFactory
import com.jessebrault.ssg.page.PageTypes import com.jessebrault.ssg.page.PageTypes
import com.jessebrault.ssg.page.PagesProviders import com.jessebrault.ssg.page.PagesProviders
import com.jessebrault.ssg.part.PartTypes import com.jessebrault.ssg.part.PartTypes
import com.jessebrault.ssg.part.PartsProviders import com.jessebrault.ssg.part.PartsProviders
import com.jessebrault.ssg.provider.CollectionProviders
import com.jessebrault.ssg.template.TemplateTypes import com.jessebrault.ssg.template.TemplateTypes
import com.jessebrault.ssg.template.TemplatesProviders import com.jessebrault.ssg.template.TemplatesProviders
import com.jessebrault.ssg.text.TextTypes import com.jessebrault.ssg.text.TextTypes
import com.jessebrault.ssg.text.TextsProviders import com.jessebrault.ssg.text.TextsProviders
import com.jessebrault.ssg.util.ExtensionUtil
import com.jessebrault.ssg.util.Result
import groovy.transform.EqualsAndHashCode import groovy.transform.EqualsAndHashCode
import groovy.transform.NullCheck import groovy.transform.NullCheck
import groovy.transform.TupleConstructor import groovy.transform.TupleConstructor
@ -30,7 +27,11 @@ final class DefaultBuildScriptConfiguratorFactory implements BuildScriptConfigur
@Override @Override
Consumer<BuildScriptBase> get() { Consumer<BuildScriptBase> get() {
return { return {
it.allBuilds { it.build(name: 'default') {
outputDirFunction = { Build build ->
new OutputDir(new File(this.baseDir, build.name == 'default' ? 'build' : build.name))
}
types { types {
textTypes << TextTypes.MARKDOWN textTypes << TextTypes.MARKDOWN
pageTypes << PageTypes.GSP pageTypes << PageTypes.GSP
@ -38,50 +39,29 @@ final class DefaultBuildScriptConfiguratorFactory implements BuildScriptConfigur
partTypes << PartTypes.GSP partTypes << PartTypes.GSP
} }
providers { types -> sources { base, types ->
texts(TextsProviders.from(new File(this.baseDir, 'texts'), types.textTypes)) texts TextsProviders.from(new File(this.baseDir, 'texts'), types.textTypes)
pages(PagesProviders.from(new File(this.baseDir, 'pages'), types.pageTypes)) pages PagesProviders.from(new File(this.baseDir, 'pages'), types.pageTypes)
templates(TemplatesProviders.from(new File(this.baseDir, 'templates'), types.templateTypes)) templates TemplatesProviders.from(new File(this.baseDir, 'templates'), types.templateTypes)
parts(PartsProviders.of(new File(this.baseDir, 'parts'), types.partTypes)) parts PartsProviders.from(new File(this.baseDir, 'parts'), types.partTypes)
} }
taskFactories { sourceProviders -> taskFactories { base, sources ->
register('textToHtml', TextToHtmlTaskFactory::new) { register('textToHtml', TextToHtmlTaskFactory::new) {
it.specProvider += CollectionProviders.fromSupplier { it.specProvider += TextToHtmlSpecProviders.from(sources)
def templates = sourceProviders.templatesProvider.provide() it.allTextsProvider += sources.textsProvider
sourceProviders.textsProvider.provide().collect { it.allPartsProvider += sources.partsProvider
def frontMatterResult = it.type.frontMatterGetter.get(it) it.allModelsProvider += sources.modelsProvider
if (frontMatterResult.hasDiagnostics()) {
return Result.ofDiagnostics(frontMatterResult.diagnostics)
}
def templateValue = frontMatterResult.get().get('template')
if (templateValue) {
def template = templates.find { it.path == templateValue }
return Result.of(new TextToHtmlSpec(
it,
template,
ExtensionUtil.stripExtension(it.path) + '.html'
))
} else {
return null
}
}
}
it.allTextsProvider += sourceProviders.textsProvider
it.allPartsProvider += sourceProviders.partsProvider
} }
register('pageToHtml', PageToHtmlTaskFactory::new) { register('pageToHtml', PageToHtmlTaskFactory::new) {
it.pagesProvider += sourceProviders.pagesProvider it.pagesProvider += sources.pagesProvider
it.allTextsProvider += sourceProviders.textsProvider it.allTextsProvider += sources.textsProvider
it.allPartsProvider += sourceProviders.partsProvider it.allPartsProvider += sources.partsProvider
it.allModelsProvider += sources.modelsProvider
} }
} }
} }
it.build('default') {
outputDir = new File(this.baseDir, 'build')
}
} }
} }

View File

@ -0,0 +1,36 @@
package com.jessebrault.ssg.html
import com.jessebrault.ssg.buildscript.SourceProviders
import com.jessebrault.ssg.provider.CollectionProvider
import com.jessebrault.ssg.provider.CollectionProviders
import com.jessebrault.ssg.util.ExtensionUtil
import com.jessebrault.ssg.util.Result
final class TextToHtmlSpecProviders {
static CollectionProvider<Result<TextToHtmlSpec>> from(SourceProviders sources) {
CollectionProviders.fromSupplier {
def templates = sources.templatesProvider.provide()
sources.textsProvider.provide().findResults {
def frontMatterResult = it.type.frontMatterGetter.get(it)
if (frontMatterResult.hasDiagnostics()) {
return Result.ofDiagnostics(frontMatterResult.diagnostics) as Result<TextToHtmlSpec>
}
def templateValue = frontMatterResult.get().get('template')
if (templateValue) {
def template = templates.find { it.path == templateValue }
return Result.of(new TextToHtmlSpec(
it,
template,
ExtensionUtil.stripExtension(it.path) + '.html'
))
} else {
return null
}
}
}
}
private TextToHtmlSpecProviders() {}
}

View File

@ -10,7 +10,7 @@ final class PartsProviders {
private static final Logger logger = LoggerFactory.getLogger(PartsProviders) private static final Logger logger = LoggerFactory.getLogger(PartsProviders)
static CollectionProvider<Part> of(File partsDir, Collection<PartType> partTypes) { static CollectionProvider<Part> from(File partsDir, Collection<PartType> partTypes) {
CollectionProviders.fromDirectory(partsDir) { file, relativePath -> CollectionProviders.fromDirectory(partsDir) { file, relativePath ->
def extension = ExtensionUtil.getExtension(relativePath) def extension = ExtensionUtil.getExtension(relativePath)
if (extension) { if (extension) {

View File

@ -17,7 +17,7 @@ final class PartFilePartsProviderTests {
@BeforeEach @BeforeEach
void beforeEach() { void beforeEach() {
this.partsDir = File.createTempDir() this.partsDir = File.createTempDir()
partsProvider = PartsProviders.of(this.partsDir, [gspPartType]) partsProvider = PartsProviders.from(this.partsDir, [gspPartType])
} }
@Test @Test