If there is no 'template' in frontMatter, does not generate text.
This commit is contained in:
parent
480c794047
commit
9ecb985bc9
@ -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
|
||||
|
@ -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 })"
|
||||
|
@ -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())
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user