diff --git a/api/src/main/groovy/com/jessebrault/ssg/buildscript/DefaultBuildScriptConfiguratorFactory.groovy b/api/src/main/groovy/com/jessebrault/ssg/buildscript/DefaultBuildScriptConfiguratorFactory.groovy index 4e53a69..9411039 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/buildscript/DefaultBuildScriptConfiguratorFactory.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/buildscript/DefaultBuildScriptConfiguratorFactory.groovy @@ -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 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') - } } } diff --git a/api/src/main/groovy/com/jessebrault/ssg/html/TextToHtmlSpecProviders.groovy b/api/src/main/groovy/com/jessebrault/ssg/html/TextToHtmlSpecProviders.groovy new file mode 100644 index 0000000..5907a8c --- /dev/null +++ b/api/src/main/groovy/com/jessebrault/ssg/html/TextToHtmlSpecProviders.groovy @@ -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> 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 + } + 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() {} + +} diff --git a/api/src/main/groovy/com/jessebrault/ssg/part/PartsProviders.groovy b/api/src/main/groovy/com/jessebrault/ssg/part/PartsProviders.groovy index 392aa27..2f6377d 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/part/PartsProviders.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/part/PartsProviders.groovy @@ -10,7 +10,7 @@ final class PartsProviders { private static final Logger logger = LoggerFactory.getLogger(PartsProviders) - static CollectionProvider of(File partsDir, Collection partTypes) { + static CollectionProvider from(File partsDir, Collection partTypes) { CollectionProviders.fromDirectory(partsDir) { file, relativePath -> def extension = ExtensionUtil.getExtension(relativePath) if (extension) { diff --git a/api/src/test/groovy/com/jessebrault/ssg/part/PartFilePartsProviderTests.groovy b/api/src/test/groovy/com/jessebrault/ssg/part/PartFilePartsProviderTests.groovy index 29396e6..4fac9bb 100644 --- a/api/src/test/groovy/com/jessebrault/ssg/part/PartFilePartsProviderTests.groovy +++ b/api/src/test/groovy/com/jessebrault/ssg/part/PartFilePartsProviderTests.groovy @@ -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