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
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.page.PageTypes
import com.jessebrault.ssg.page.PagesProviders
import com.jessebrault.ssg.part.PartTypes
import com.jessebrault.ssg.part.PartsProviders
import com.jessebrault.ssg.provider.CollectionProviders
import com.jessebrault.ssg.template.TemplateTypes
import com.jessebrault.ssg.template.TemplatesProviders
import com.jessebrault.ssg.text.TextTypes
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.NullCheck
import groovy.transform.TupleConstructor
@ -30,7 +27,11 @@ final class DefaultBuildScriptConfiguratorFactory implements BuildScriptConfigur
@Override
Consumer<BuildScriptBase> get() {
return {
it.allBuilds {
it.build(name: 'default') {
outputDirFunction = { Build build ->
new OutputDir(new File(this.baseDir, build.name == 'default' ? 'build' : build.name))
}
types {
textTypes << TextTypes.MARKDOWN
pageTypes << PageTypes.GSP
@ -38,50 +39,29 @@ final class DefaultBuildScriptConfiguratorFactory implements BuildScriptConfigur
partTypes << PartTypes.GSP
}
providers { types ->
texts(TextsProviders.from(new File(this.baseDir, 'texts'), types.textTypes))
pages(PagesProviders.from(new File(this.baseDir, 'pages'), types.pageTypes))
templates(TemplatesProviders.from(new File(this.baseDir, 'templates'), types.templateTypes))
parts(PartsProviders.of(new File(this.baseDir, 'parts'), types.partTypes))
sources { base, types ->
texts TextsProviders.from(new File(this.baseDir, 'texts'), types.textTypes)
pages PagesProviders.from(new File(this.baseDir, 'pages'), types.pageTypes)
templates TemplatesProviders.from(new File(this.baseDir, 'templates'), types.templateTypes)
parts PartsProviders.from(new File(this.baseDir, 'parts'), types.partTypes)
}
taskFactories { sourceProviders ->
taskFactories { base, sources ->
register('textToHtml', TextToHtmlTaskFactory::new) {
it.specProvider += CollectionProviders.fromSupplier {
def templates = sourceProviders.templatesProvider.provide()
sourceProviders.textsProvider.provide().collect {
def frontMatterResult = it.type.frontMatterGetter.get(it)
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
it.specProvider += TextToHtmlSpecProviders.from(sources)
it.allTextsProvider += sources.textsProvider
it.allPartsProvider += sources.partsProvider
it.allModelsProvider += sources.modelsProvider
}
register('pageToHtml', PageToHtmlTaskFactory::new) {
it.pagesProvider += sourceProviders.pagesProvider
it.allTextsProvider += sourceProviders.textsProvider
it.allPartsProvider += sourceProviders.partsProvider
it.pagesProvider += sources.pagesProvider
it.allTextsProvider += sources.textsProvider
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)
static CollectionProvider<Part> of(File partsDir, Collection<PartType> partTypes) {
static CollectionProvider<Part> from(File partsDir, Collection<PartType> partTypes) {
CollectionProviders.fromDirectory(partsDir) { file, relativePath ->
def extension = ExtensionUtil.getExtension(relativePath)
if (extension) {

View File

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