If there is no 'template' in frontMatter, does not generate text.

This commit is contained in:
JesseBrault0709 2023-01-13 08:47:37 -06:00
parent 480c794047
commit 9ecb985bc9
3 changed files with 36 additions and 22 deletions

View File

@ -37,24 +37,11 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator {
Collection<Diagnostic> diagnostics = []
Collection<GeneratedPage> 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

View File

@ -17,8 +17,8 @@ class FrontMatter {
private final Map<String, List<String>> 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<String> find(String key) {
Optional.ofNullable(this.data[key]?[0])
}
Optional<List<String>> findList(String key) {
Optional.ofNullable(this.data[key])
}
@Override
String toString() {
"FrontMatter(text: ${ this.text }, data: ${ this.data })"

View File

@ -113,4 +113,12 @@ class SimpleStaticSiteGeneratorIntegrationTests {
assertEquals('<p>Hello, World!</p>\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())
}
}