From 9ecb985bc93c6ad3986b6fc1c7873a6974a68d57 Mon Sep 17 00:00:00 2001 From: JesseBrault0709 <62299747+JesseBrault0709@users.noreply.github.com> Date: Fri, 13 Jan 2023 08:47:37 -0600 Subject: [PATCH] If there is no 'template' in frontMatter, does not generate text. --- .../ssg/SimpleStaticSiteGenerator.groovy | 38 +++++++++---------- .../jessebrault/ssg/text/FrontMatter.groovy | 12 +++++- ...StaticSiteGeneratorIntegrationTests.groovy | 8 ++++ 3 files changed, 36 insertions(+), 22 deletions(-) diff --git a/lib/src/main/groovy/com/jessebrault/ssg/SimpleStaticSiteGenerator.groovy b/lib/src/main/groovy/com/jessebrault/ssg/SimpleStaticSiteGenerator.groovy index b7e0aab..9c15515 100644 --- a/lib/src/main/groovy/com/jessebrault/ssg/SimpleStaticSiteGenerator.groovy +++ b/lib/src/main/groovy/com/jessebrault/ssg/SimpleStaticSiteGenerator.groovy @@ -37,24 +37,11 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator { Collection diagnostics = [] Collection generatedPages = [] - // Generate pages from each text + // Generate pages from each text, but only those that have a 'template' frontMatter field with a valid value texts.each { logger.trace(enter, 'text: {}', it) logger.info('processing text: {}', it.path) - // Render the text (i.e., transform text to html) - def textRenderResult = it.type.renderer.render(it, globals) - String renderedText - if (textRenderResult.v1.size() > 0) { - logger.debug('diagnostics for rendering {}: {}', it.path, textRenderResult.v1) - diagnostics.addAll(textRenderResult.v1) - logger.trace(exit, '') - return - } else { - renderedText = textRenderResult.v2 - logger.debug('renderedText: {}', renderedText) - } - // Extract frontMatter from text def frontMatterResult = it.type.frontMatterGetter.get(it) FrontMatter frontMatter @@ -69,14 +56,12 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator { } // Find the appropriate template from the frontMatter - def desiredTemplate = frontMatter['template'] - logger.debug('desiredTemplate name: {}', desiredTemplate) - if (desiredTemplate == null || desiredTemplate.isEmpty() || desiredTemplate.isBlank()) { - diagnostics << new Diagnostic('in textFile ' + it.path + ' frontMatter.template must not be empty, blank, or missing', null) - logger.trace(exit, '') + def desiredTemplate = frontMatter.find('template') + if (desiredTemplate.isEmpty()) { + logger.info('{} has no \'template\' key in its frontMatter; skipping generation') return } - def template = templates.find { it.path == desiredTemplate } + def template = templates.find { it.path == desiredTemplate.get() } if (template == null) { diagnostics << new Diagnostic('in textFile' + it.path + ' frontMatter.template references an unknown template: ' + desiredTemplate, null) logger.trace(exit, '') @@ -84,6 +69,19 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator { } logger.debug('found template: {}', template) + // Render the text (i.e., transform text to html) + def textRenderResult = it.type.renderer.render(it, globals) + String renderedText + if (textRenderResult.v1.size() > 0) { + logger.debug('diagnostics for rendering {}: {}', it.path, textRenderResult.v1) + diagnostics.addAll(textRenderResult.v1) + logger.trace(exit, '') + return + } else { + renderedText = textRenderResult.v2 + logger.debug('renderedText: {}', renderedText) + } + // Render the template using the result of rendering the text earlier def templateRenderResult = template.type.renderer.render(template, frontMatter, renderedText, parts, globals) String renderedTemplate diff --git a/lib/src/main/groovy/com/jessebrault/ssg/text/FrontMatter.groovy b/lib/src/main/groovy/com/jessebrault/ssg/text/FrontMatter.groovy index ac6831d..a377dc7 100644 --- a/lib/src/main/groovy/com/jessebrault/ssg/text/FrontMatter.groovy +++ b/lib/src/main/groovy/com/jessebrault/ssg/text/FrontMatter.groovy @@ -17,8 +17,8 @@ class FrontMatter { private final Map> data String get(String key) { - if (data[key] != null) { - data[key][0] + if (this.data[key] != null) { + this.data[key][0] } else { logger.warn('in {} no entry for key {} in frontMatter, returning empty string', this.text, key) '' @@ -38,6 +38,14 @@ class FrontMatter { } } + Optional find(String key) { + Optional.ofNullable(this.data[key]?[0]) + } + + Optional> findList(String key) { + Optional.ofNullable(this.data[key]) + } + @Override String toString() { "FrontMatter(text: ${ this.text }, data: ${ this.data })" diff --git a/lib/src/test/groovy/com/jessebrault/ssg/SimpleStaticSiteGeneratorIntegrationTests.groovy b/lib/src/test/groovy/com/jessebrault/ssg/SimpleStaticSiteGeneratorIntegrationTests.groovy index 6180ff2..dee6973 100644 --- a/lib/src/test/groovy/com/jessebrault/ssg/SimpleStaticSiteGeneratorIntegrationTests.groovy +++ b/lib/src/test/groovy/com/jessebrault/ssg/SimpleStaticSiteGeneratorIntegrationTests.groovy @@ -113,4 +113,12 @@ class SimpleStaticSiteGeneratorIntegrationTests { assertEquals('

Hello, World!

\n', specialPage.html) } + @Test + void doesNotGenerateIfNoTemplateInFrontMatter() { + new File(this.textsDir, 'test.md').write('Hello, World!') + def result = this.ssg.generate(this.build) + assertEquals(0, result.v1.size()) + assertEquals(0, result.v2.size()) + } + }