From fd09b720bb884191a006beaeb565837c5814fba5 Mon Sep 17 00:00:00 2001 From: JesseBrault0709 <62299747+JesseBrault0709@users.noreply.github.com> Date: Sat, 7 Jan 2023 17:28:18 -0600 Subject: [PATCH] Globals proliferated throughout. --- .../jessebrault/ssg/StaticSiteGeneratorCli.groovy | 6 +++--- .../ssg/SimpleStaticSiteGenerator.groovy | 14 +++++--------- .../com/jessebrault/ssg/StaticSiteGenerator.groovy | 2 +- .../com/jessebrault/ssg/part/EmbeddablePart.groovy | 3 ++- .../jessebrault/ssg/part/EmbeddablePartsMap.groovy | 4 ++-- .../jessebrault/ssg/part/GspPartRenderer.groovy | 6 ++++-- .../com/jessebrault/ssg/part/PartRenderer.groovy | 2 +- .../ssg/specialpage/GspSpecialPageRenderer.groovy | 7 ++++--- .../ssg/specialpage/SpecialPageRenderer.groovy | 9 ++++++++- .../ssg/template/GspTemplateRenderer.groovy | 13 ++++++++++--- .../ssg/template/TemplateRenderer.groovy | 10 +++++++++- .../com/jessebrault/ssg/text/EmbeddableText.groovy | 3 ++- .../ssg/text/EmbeddableTextsCollection.groovy | 4 ++-- .../ssg/text/MarkdownTextRenderer.groovy | 2 +- .../com/jessebrault/ssg/text/TextRenderer.groovy | 10 +++++++++- .../ssg/StaticSiteGeneratorTests.groovy | 6 +++--- .../ssg/template/GspTemplateRendererTests.groovy | 4 ++-- 17 files changed, 68 insertions(+), 37 deletions(-) diff --git a/cli/src/main/groovy/com/jessebrault/ssg/StaticSiteGeneratorCli.groovy b/cli/src/main/groovy/com/jessebrault/ssg/StaticSiteGeneratorCli.groovy index b896ba9..2af63b3 100644 --- a/cli/src/main/groovy/com/jessebrault/ssg/StaticSiteGeneratorCli.groovy +++ b/cli/src/main/groovy/com/jessebrault/ssg/StaticSiteGeneratorCli.groovy @@ -8,12 +8,12 @@ import com.jessebrault.ssg.specialpage.GspSpecialPageRenderer import com.jessebrault.ssg.specialpage.SpecialPageFileSpecialPagesProvider import com.jessebrault.ssg.specialpage.SpecialPageType import com.jessebrault.ssg.template.GspTemplateRenderer -import com.jessebrault.ssg.template.TemplateType import com.jessebrault.ssg.template.TemplateFileTemplatesProvider +import com.jessebrault.ssg.template.TemplateType import com.jessebrault.ssg.text.MarkdownFrontMatterGetter import com.jessebrault.ssg.text.MarkdownTextRenderer -import com.jessebrault.ssg.text.TextType import com.jessebrault.ssg.text.TextFileTextsProvider +import com.jessebrault.ssg.text.TextType import org.slf4j.Logger import org.slf4j.LoggerFactory @@ -50,7 +50,7 @@ class StaticSiteGeneratorCli { } def ssg = new SimpleStaticSiteGenerator(config) - ssg.generate(new File('build')) + ssg.generate(new File('build'), globals) } } diff --git a/lib/src/main/groovy/com/jessebrault/ssg/SimpleStaticSiteGenerator.groovy b/lib/src/main/groovy/com/jessebrault/ssg/SimpleStaticSiteGenerator.groovy index d368345..29a9272 100644 --- a/lib/src/main/groovy/com/jessebrault/ssg/SimpleStaticSiteGenerator.groovy +++ b/lib/src/main/groovy/com/jessebrault/ssg/SimpleStaticSiteGenerator.groovy @@ -1,9 +1,5 @@ package com.jessebrault.ssg -import com.jessebrault.ssg.part.PartsProvider -import com.jessebrault.ssg.specialpage.SpecialPagesProvider -import com.jessebrault.ssg.template.TemplatesProvider -import com.jessebrault.ssg.text.TextsProvider import org.slf4j.Logger import org.slf4j.LoggerFactory import org.slf4j.Marker @@ -22,8 +18,8 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator { } @Override - void generate(File buildDir) { - logger.trace(enter, 'buildDir: {}', buildDir) + void generate(File buildDir, Map globals) { + logger.trace(enter, 'buildDir: {}, globals: {}', buildDir, globals) // Get all texts, templates, parts, and specialPages def texts = this.config.textProviders.collectMany { it.getTextFiles() } @@ -50,7 +46,7 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator { logger.info('processing text: {}', it.path) // Render the text (i.e., transform text to html) - def renderedText = it.type.renderer.render(it.text) + def renderedText = it.type.renderer.render(it.text, globals) logger.debug('renderedText: {}', renderedText) // Extract frontMatter from text @@ -75,7 +71,7 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator { } // Render the template using the result of rendering the text earlier - def result = template.type.renderer.render(template, frontMatter, renderedText, parts) + def result = template.type.renderer.render(template, frontMatter, renderedText, parts, globals) logger.debug('result: {}', result) // Output the result to the outfile, an .html file @@ -86,7 +82,7 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator { specialPages.each { logger.info('processing specialPage: {}', it) - def result = it.type.renderer.render(it.text, texts, parts) + def result = it.type.renderer.render(it.text, texts, parts, globals) logger.info('result: {}', result) // Output result to file diff --git a/lib/src/main/groovy/com/jessebrault/ssg/StaticSiteGenerator.groovy b/lib/src/main/groovy/com/jessebrault/ssg/StaticSiteGenerator.groovy index 188f62d..5d26035 100644 --- a/lib/src/main/groovy/com/jessebrault/ssg/StaticSiteGenerator.groovy +++ b/lib/src/main/groovy/com/jessebrault/ssg/StaticSiteGenerator.groovy @@ -1,5 +1,5 @@ package com.jessebrault.ssg interface StaticSiteGenerator { - void generate(File buildDir) + void generate(File buildDir, Map globals) } diff --git a/lib/src/main/groovy/com/jessebrault/ssg/part/EmbeddablePart.groovy b/lib/src/main/groovy/com/jessebrault/ssg/part/EmbeddablePart.groovy index 086d6e7..a3f9283 100644 --- a/lib/src/main/groovy/com/jessebrault/ssg/part/EmbeddablePart.groovy +++ b/lib/src/main/groovy/com/jessebrault/ssg/part/EmbeddablePart.groovy @@ -6,9 +6,10 @@ import groovy.transform.TupleConstructor class EmbeddablePart { private final Part part + private final Map globals String render(Map binding) { - part.type.renderer.render(part.text, binding) + part.type.renderer.render(this.part.text, binding, this.globals) } } diff --git a/lib/src/main/groovy/com/jessebrault/ssg/part/EmbeddablePartsMap.groovy b/lib/src/main/groovy/com/jessebrault/ssg/part/EmbeddablePartsMap.groovy index dbe61c5..60d3aa2 100644 --- a/lib/src/main/groovy/com/jessebrault/ssg/part/EmbeddablePartsMap.groovy +++ b/lib/src/main/groovy/com/jessebrault/ssg/part/EmbeddablePartsMap.groovy @@ -8,10 +8,10 @@ class EmbeddablePartsMap { @Delegate private final Map partsMap = [:] - EmbeddablePartsMap(Collection parts) { + EmbeddablePartsMap(Collection parts, Map globals) { Objects.requireNonNull(parts) parts.each { - this.put(it.name, new EmbeddablePart(it)) + this.put(it.name, new EmbeddablePart(it, globals)) } } diff --git a/lib/src/main/groovy/com/jessebrault/ssg/part/GspPartRenderer.groovy b/lib/src/main/groovy/com/jessebrault/ssg/part/GspPartRenderer.groovy index 32f93bc..0565ad9 100644 --- a/lib/src/main/groovy/com/jessebrault/ssg/part/GspPartRenderer.groovy +++ b/lib/src/main/groovy/com/jessebrault/ssg/part/GspPartRenderer.groovy @@ -8,8 +8,10 @@ class GspPartRenderer implements PartRenderer { private static final TemplateEngine engine = new GStringTemplateEngine() @Override - String render(String partText, Map binding) { - engine.createTemplate(partText).make(binding) + String render(String partText, Map binding, Map globals) { + def bindingCopy = new LinkedHashMap(binding) + bindingCopy['globals'] = globals + engine.createTemplate(partText).make(bindingCopy) } } diff --git a/lib/src/main/groovy/com/jessebrault/ssg/part/PartRenderer.groovy b/lib/src/main/groovy/com/jessebrault/ssg/part/PartRenderer.groovy index ec82ec0..bd0db46 100644 --- a/lib/src/main/groovy/com/jessebrault/ssg/part/PartRenderer.groovy +++ b/lib/src/main/groovy/com/jessebrault/ssg/part/PartRenderer.groovy @@ -1,5 +1,5 @@ package com.jessebrault.ssg.part interface PartRenderer { - String render(String partText, Map binding) + String render(String partText, Map binding, Map globals) } diff --git a/lib/src/main/groovy/com/jessebrault/ssg/specialpage/GspSpecialPageRenderer.groovy b/lib/src/main/groovy/com/jessebrault/ssg/specialpage/GspSpecialPageRenderer.groovy index 94a4873..aa50e50 100644 --- a/lib/src/main/groovy/com/jessebrault/ssg/specialpage/GspSpecialPageRenderer.groovy +++ b/lib/src/main/groovy/com/jessebrault/ssg/specialpage/GspSpecialPageRenderer.groovy @@ -12,10 +12,11 @@ class GspSpecialPageRenderer implements SpecialPageRenderer { private static final TemplateEngine engine = new GStringTemplateEngine() @Override - String render(String text, Collection texts, Collection parts) { + String render(String text, Collection texts, Collection parts, Map globals) { engine.createTemplate(text).make([ - texts: new EmbeddableTextsCollection(texts), - parts: new EmbeddablePartsMap(parts) + globals: globals, + parts: new EmbeddablePartsMap(parts, globals), + texts: new EmbeddableTextsCollection(texts, globals) ]) } diff --git a/lib/src/main/groovy/com/jessebrault/ssg/specialpage/SpecialPageRenderer.groovy b/lib/src/main/groovy/com/jessebrault/ssg/specialpage/SpecialPageRenderer.groovy index 8c25de0..2462c82 100644 --- a/lib/src/main/groovy/com/jessebrault/ssg/specialpage/SpecialPageRenderer.groovy +++ b/lib/src/main/groovy/com/jessebrault/ssg/specialpage/SpecialPageRenderer.groovy @@ -4,5 +4,12 @@ import com.jessebrault.ssg.part.Part import com.jessebrault.ssg.text.Text interface SpecialPageRenderer { - String render(String text, Collection texts, Collection parts) + + String render( + String text, + Collection texts, + Collection parts, + Map globals + ) + } \ No newline at end of file diff --git a/lib/src/main/groovy/com/jessebrault/ssg/template/GspTemplateRenderer.groovy b/lib/src/main/groovy/com/jessebrault/ssg/template/GspTemplateRenderer.groovy index 5173f0d..856c250 100644 --- a/lib/src/main/groovy/com/jessebrault/ssg/template/GspTemplateRenderer.groovy +++ b/lib/src/main/groovy/com/jessebrault/ssg/template/GspTemplateRenderer.groovy @@ -11,11 +11,18 @@ class GspTemplateRenderer implements TemplateRenderer { private static final TemplateEngine engine = new GStringTemplateEngine() @Override - String render(Template template, FrontMatter frontMatter, String text, Collection parts) { + String render( + Template template, + FrontMatter frontMatter, + String text, + Collection parts, + Map globals + ) { engine.createTemplate(template.text).make([ frontMatter: frontMatter, - text: text, - parts: new EmbeddablePartsMap(parts) + globals: globals, + parts: new EmbeddablePartsMap(parts, globals), + text: text ]) } diff --git a/lib/src/main/groovy/com/jessebrault/ssg/template/TemplateRenderer.groovy b/lib/src/main/groovy/com/jessebrault/ssg/template/TemplateRenderer.groovy index fa80228..3df76e2 100644 --- a/lib/src/main/groovy/com/jessebrault/ssg/template/TemplateRenderer.groovy +++ b/lib/src/main/groovy/com/jessebrault/ssg/template/TemplateRenderer.groovy @@ -4,5 +4,13 @@ import com.jessebrault.ssg.part.Part import com.jessebrault.ssg.text.FrontMatter interface TemplateRenderer { - String render(Template template, FrontMatter frontMatter, String text, Collection parts) + + String render( + Template template, + FrontMatter frontMatter, + String text, + Collection parts, + Map globals + ) + } diff --git a/lib/src/main/groovy/com/jessebrault/ssg/text/EmbeddableText.groovy b/lib/src/main/groovy/com/jessebrault/ssg/text/EmbeddableText.groovy index 9ab652d..7e0ca6a 100644 --- a/lib/src/main/groovy/com/jessebrault/ssg/text/EmbeddableText.groovy +++ b/lib/src/main/groovy/com/jessebrault/ssg/text/EmbeddableText.groovy @@ -7,10 +7,11 @@ import groovy.transform.TupleConstructor class EmbeddableText { private final Text text + private final Map globals @Memoized String render() { - this.text.type.renderer.render(this.text.text) + this.text.type.renderer.render(this.text.text, globals) } @Memoized diff --git a/lib/src/main/groovy/com/jessebrault/ssg/text/EmbeddableTextsCollection.groovy b/lib/src/main/groovy/com/jessebrault/ssg/text/EmbeddableTextsCollection.groovy index d2080ec..4b64180 100644 --- a/lib/src/main/groovy/com/jessebrault/ssg/text/EmbeddableTextsCollection.groovy +++ b/lib/src/main/groovy/com/jessebrault/ssg/text/EmbeddableTextsCollection.groovy @@ -8,9 +8,9 @@ class EmbeddableTextsCollection { @Delegate private final Collection embeddableTexts = [] - EmbeddableTextsCollection(Collection texts) { + EmbeddableTextsCollection(Collection texts, Map globals) { Objects.requireNonNull(texts).each { - this << new EmbeddableText(it) + this << new EmbeddableText(it, globals) } } diff --git a/lib/src/main/groovy/com/jessebrault/ssg/text/MarkdownTextRenderer.groovy b/lib/src/main/groovy/com/jessebrault/ssg/text/MarkdownTextRenderer.groovy index 00ca958..ab95af0 100644 --- a/lib/src/main/groovy/com/jessebrault/ssg/text/MarkdownTextRenderer.groovy +++ b/lib/src/main/groovy/com/jessebrault/ssg/text/MarkdownTextRenderer.groovy @@ -12,7 +12,7 @@ class MarkdownTextRenderer implements TextRenderer { private static final HtmlRenderer htmlRenderer = HtmlRenderer.builder().build() @Override - String render(String text) { + String render(String text, Map globals) { htmlRenderer.render(parser.parse(text)) } diff --git a/lib/src/main/groovy/com/jessebrault/ssg/text/TextRenderer.groovy b/lib/src/main/groovy/com/jessebrault/ssg/text/TextRenderer.groovy index 864bfed..f18837b 100644 --- a/lib/src/main/groovy/com/jessebrault/ssg/text/TextRenderer.groovy +++ b/lib/src/main/groovy/com/jessebrault/ssg/text/TextRenderer.groovy @@ -1,5 +1,13 @@ package com.jessebrault.ssg.text interface TextRenderer { - String render(String text) + + /** + * Renders the text from its raw form to html. + * + * @param text in raw form + * @return the rendered text in html + */ + String render(String text, Map globals) + } diff --git a/lib/src/test/groovy/com/jessebrault/ssg/StaticSiteGeneratorTests.groovy b/lib/src/test/groovy/com/jessebrault/ssg/StaticSiteGeneratorTests.groovy index 4f1c18d..d763874 100644 --- a/lib/src/test/groovy/com/jessebrault/ssg/StaticSiteGeneratorTests.groovy +++ b/lib/src/test/groovy/com/jessebrault/ssg/StaticSiteGeneratorTests.groovy @@ -60,7 +60,7 @@ class StaticSiteGeneratorTests { new File(this.templatesDir, 'test.gsp').write('<%= text %>') def buildDir = File.createTempDir() - this.ssg.generate(buildDir) + this.ssg.generate(buildDir, [:]) def outFile = new File(buildDir, 'test.html') assertTrue(outFile.exists()) @@ -78,7 +78,7 @@ class StaticSiteGeneratorTests { new File(this.templatesDir, 'nested.gsp').write('<%= text %>') def buildDir = File.createTempDir() - this.ssg.generate(buildDir) + this.ssg.generate(buildDir, [:]) def outFile = new File(new File(buildDir, 'nested'), 'nested.html') assertTrue(outFile.exists()) @@ -92,7 +92,7 @@ class StaticSiteGeneratorTests { new FileTreeBuilder(this.textsDir).file('test.md', '---\ntemplate: template.gsp\n---\nHello, World!') def buildDir = File.createTempDir() - this.ssg.generate(buildDir) + this.ssg.generate(buildDir, [:]) def outFile = new File(buildDir, 'special.html') assertTrue(outFile.exists()) diff --git a/lib/src/test/groovy/com/jessebrault/ssg/template/GspTemplateRendererTests.groovy b/lib/src/test/groovy/com/jessebrault/ssg/template/GspTemplateRendererTests.groovy index 4055b43..b6d20ce 100644 --- a/lib/src/test/groovy/com/jessebrault/ssg/template/GspTemplateRendererTests.groovy +++ b/lib/src/test/groovy/com/jessebrault/ssg/template/GspTemplateRendererTests.groovy @@ -24,7 +24,7 @@ class GspTemplateRendererTests { new PartType(['.gsp'], new GspPartRenderer()), 'Hello, $person!' ) - def r = this.renderer.render(template, new FrontMatter([:]), '', [part]) + def r = this.renderer.render(template, new FrontMatter([:]), '', [part], [:]) assertEquals('Hello, World!', r) } @@ -35,7 +35,7 @@ class GspTemplateRendererTests { null, null ) - def r = this.renderer.render(template, new FrontMatter([title: ['Hello!']]), '', []) + def r = this.renderer.render(template, new FrontMatter([title: ['Hello!']]), '', [], [:]) assertEquals('Hello!', r) }