From 6de83dff10321f01d804940b091c7a3dda5242d5 Mon Sep 17 00:00:00 2001 From: Jesse Brault Date: Wed, 15 Feb 2023 11:57:02 +0100 Subject: [PATCH] Added targetPath to dsl. --- .../ssg/SimpleStaticSiteGenerator.groovy | 20 +++++-- .../jessebrault/ssg/output/OutputPage.groovy | 3 +- .../specialpage/GspSpecialPageRenderer.groovy | 6 +- .../specialpage/SpecialPageRenderer.groovy | 3 +- .../ssg/template/GspTemplateRenderer.groovy | 6 +- .../ssg/template/TemplateRenderer.groovy | 3 +- .../GspSpecialPageRendererTests.groovy | 40 ++++++++++--- .../template/GspTemplateRendererTests.groovy | 57 ++++++++++++++++--- 8 files changed, 111 insertions(+), 27 deletions(-) diff --git a/lib/src/main/groovy/com/jessebrault/ssg/SimpleStaticSiteGenerator.groovy b/lib/src/main/groovy/com/jessebrault/ssg/SimpleStaticSiteGenerator.groovy index 53d2a43..c357c2e 100644 --- a/lib/src/main/groovy/com/jessebrault/ssg/SimpleStaticSiteGenerator.groovy +++ b/lib/src/main/groovy/com/jessebrault/ssg/SimpleStaticSiteGenerator.groovy @@ -10,6 +10,8 @@ import org.slf4j.LoggerFactory import org.slf4j.Marker import org.slf4j.MarkerFactory +import static com.jessebrault.ssg.util.ExtensionsUtil.stripExtension + @TupleConstructor(includeFields = true) @NullCheck @EqualsAndHashCode(includeFields = true) @@ -70,13 +72,16 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator { } logger.debug('found template: {}', template) + def targetPath = stripExtension(it.path) + '.html' + // Render the template using the result of rendering the text earlier def templateRenderResult = template.type.renderer.render( template, frontMatter, it, parts, - globals + globals, + targetPath ) String renderedTemplate if (templateRenderResult.v1.size() > 0) { @@ -88,14 +93,21 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator { } // Create a GeneratedPage - generatedPages << OutputPage.of(it, '.html', renderedTemplate) + generatedPages << new OutputPage(targetPath, renderedTemplate) } // Generate special pages specialPages.each { logger.info('processing specialPage: {}', it.path) - def specialPageRenderResult = it.type.renderer.render(it, texts, parts, globals) + def targetPath = stripExtension(it.path) + '.html' + def specialPageRenderResult = it.type.renderer.render( + it, + texts, + parts, + globals, + targetPath + ) String renderedSpecialPage if (specialPageRenderResult.v1.size() > 0) { diagnostics.addAll(specialPageRenderResult.v1) @@ -106,7 +118,7 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator { } // Create a GeneratedPage - generatedPages << OutputPage.of(it, '.html', renderedSpecialPage) + generatedPages << new OutputPage(targetPath, renderedSpecialPage) } logger.trace(exit, '\n\tdiagnostics: {}\n\tgeneratedPages: {}', diagnostics, generatedPages) diff --git a/lib/src/main/groovy/com/jessebrault/ssg/output/OutputPage.groovy b/lib/src/main/groovy/com/jessebrault/ssg/output/OutputPage.groovy index c4a17b1..9b900d4 100644 --- a/lib/src/main/groovy/com/jessebrault/ssg/output/OutputPage.groovy +++ b/lib/src/main/groovy/com/jessebrault/ssg/output/OutputPage.groovy @@ -10,6 +10,7 @@ import static com.jessebrault.ssg.util.ExtensionsUtil.stripExtension @EqualsAndHashCode final class OutputPage { + @Deprecated static OutputPage of(InputPage inputFile, String extension, String content) { new OutputPage(stripExtension(inputFile.path) + extension, content) } @@ -17,7 +18,7 @@ final class OutputPage { final String path final String content - private OutputPage(String path, String content) { + OutputPage(String path, String content) { this.path = path this.content = content } 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 d084d16..70b3b99 100644 --- a/lib/src/main/groovy/com/jessebrault/ssg/specialpage/GspSpecialPageRenderer.groovy +++ b/lib/src/main/groovy/com/jessebrault/ssg/specialpage/GspSpecialPageRenderer.groovy @@ -23,7 +23,8 @@ class GspSpecialPageRenderer implements SpecialPageRenderer { SpecialPage specialPage, Collection texts, Collection parts, - Map globals + Map globals, + String targetPath ) { try { Collection diagnostics = [] @@ -32,8 +33,9 @@ class GspSpecialPageRenderer implements SpecialPageRenderer { parts: new EmbeddablePartsMap(parts, globals, diagnostics.&addAll, specialPage.path), path: specialPage.path, tagBuilder: new DynamicTagBuilder(), + targetPath: targetPath, texts: new EmbeddableTextsCollection(texts, globals, diagnostics.&addAll), - urlBuilder: new PathBasedUrlBuilder(specialPage.path) + urlBuilder: new PathBasedUrlBuilder(targetPath) ]) new Tuple2<>(diagnostics, result.toString()) } catch (Exception e) { 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 a87f57c..c597100 100644 --- a/lib/src/main/groovy/com/jessebrault/ssg/specialpage/SpecialPageRenderer.groovy +++ b/lib/src/main/groovy/com/jessebrault/ssg/specialpage/SpecialPageRenderer.groovy @@ -10,7 +10,8 @@ interface SpecialPageRenderer { SpecialPage specialPage, Collection texts, Collection parts, - Map globals + Map globals, + String targetPath ) } \ 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 901b90e..a585382 100644 --- a/lib/src/main/groovy/com/jessebrault/ssg/template/GspTemplateRenderer.groovy +++ b/lib/src/main/groovy/com/jessebrault/ssg/template/GspTemplateRenderer.groovy @@ -26,7 +26,8 @@ class GspTemplateRenderer implements TemplateRenderer { FrontMatter frontMatter, Text text, Collection parts, - Map globals + Map globals, + String targetPath ) { try { Collection diagnostics = [] @@ -40,8 +41,9 @@ class GspTemplateRenderer implements TemplateRenderer { parts: new EmbeddablePartsMap(parts, globals, onDiagnostics, embeddableText, text.path), path: text.path, tagBuilder: new DynamicTagBuilder(), + targetPath: targetPath, text: embeddableText, - urlBuilder: new PathBasedUrlBuilder(text.path) + urlBuilder: new PathBasedUrlBuilder(targetPath) ]) new Tuple2<>(diagnostics, result.toString()) } catch (Exception e) { 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 15f23ad..71b97fe 100644 --- a/lib/src/main/groovy/com/jessebrault/ssg/template/TemplateRenderer.groovy +++ b/lib/src/main/groovy/com/jessebrault/ssg/template/TemplateRenderer.groovy @@ -16,7 +16,8 @@ interface TemplateRenderer { FrontMatter frontMatter, Text text, Collection parts, - Map globals + Map globals, + String targetPath ) } diff --git a/lib/src/test/groovy/com/jessebrault/ssg/specialpage/GspSpecialPageRendererTests.groovy b/lib/src/test/groovy/com/jessebrault/ssg/specialpage/GspSpecialPageRendererTests.groovy index 5a61fcb..29bb7f0 100644 --- a/lib/src/test/groovy/com/jessebrault/ssg/specialpage/GspSpecialPageRendererTests.groovy +++ b/lib/src/test/groovy/com/jessebrault/ssg/specialpage/GspSpecialPageRendererTests.groovy @@ -24,7 +24,7 @@ class GspSpecialPageRendererTests { void rendersGlobal() { def specialPage = new SpecialPage("<%= globals['greeting'] %>", 'test.gsp', null) def globals = [greeting: 'Hello, World!'] - def r = this.renderer.render(specialPage, [], [], globals) + def r = this.renderer.render(specialPage, [], [], globals, '') assertEmptyDiagnostics(r) assertEquals('Hello, World!', r.v2) } @@ -37,7 +37,7 @@ class GspSpecialPageRendererTests { def part = new Part('test', partType , '') def specialPage = new SpecialPage("<%= parts['test'].render() %>", 'test.gsp', null) - def r = this.renderer.render(specialPage, [], [part], [:]) + def r = this.renderer.render(specialPage, [], [part], [:], '') assertEmptyDiagnostics(r) assertEquals('Hello, World!', r.v2) } @@ -55,7 +55,7 @@ class GspSpecialPageRendererTests { 'test.gsp', null ) - def r = this.renderer.render(specialPage, [], [part], [:]) + def r = this.renderer.render(specialPage, [], [part], [:], '') assertEmptyDiagnostics(r) assertEquals('Hello, World!', r.v2) } @@ -72,7 +72,7 @@ class GspSpecialPageRendererTests { 'test.gsp', null ) - def r = this.renderer.render(specialPage, [text], [], [:]) + def r = this.renderer.render(specialPage, [text], [], [:], '') assertEmptyDiagnostics(r) assertEquals('

Hello, World!

\n', r.v2) } @@ -80,7 +80,7 @@ class GspSpecialPageRendererTests { @Test void tagBuilderAvailable() { def specialPage = new SpecialPage('<%= tagBuilder.test() %>', 'test.gsp', null) - def r = this.renderer.render(specialPage, [], [], [:]) + def r = this.renderer.render(specialPage, [], [], [:], '') assertEmptyDiagnostics(r) assertEquals('', r.v2) } @@ -88,7 +88,7 @@ class GspSpecialPageRendererTests { @Test void pathAvailable() { def specialPage = new SpecialPage('<%= path %>', 'test.gsp', null) - def r = this.renderer.render(specialPage, [], [], [:]) + def r = this.renderer.render(specialPage, [], [], [:], '') assertEmptyDiagnostics(r) assertEquals('test.gsp', r.v2) } @@ -100,9 +100,35 @@ class GspSpecialPageRendererTests { 'test.gsp', null ) - def r = this.renderer.render(specialPage, [], [], [:]) + def r = this.renderer.render(specialPage, [], [], [:], 'test.html') assertEmptyDiagnostics(r) assertEquals('images/test.jpg', r.v2) } + @Test + void urlBuilderIsRelativeToTargetPath() { + def specialPage = new SpecialPage( + '<%= urlBuilder.relative("images/test.jpg") %>', + '', + null + ) + def r = this.renderer.render( + specialPage, [], [], [:], 'test/test.html' + ) + assertEmptyDiagnostics(r) + assertEquals('../images/test.jpg', r.v2) + } + + @Test + void targetPathAvailable() { + def specialPage = new SpecialPage( + '<%= targetPath %>', + '', + null + ) + def r = this.renderer.render(specialPage, [], [], [:], 'test.html') + assertEmptyDiagnostics(r) + assertEquals('test.html', r.v2) + } + } 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 5b301ea..67c171a 100644 --- a/lib/src/test/groovy/com/jessebrault/ssg/template/GspTemplateRendererTests.groovy +++ b/lib/src/test/groovy/com/jessebrault/ssg/template/GspTemplateRendererTests.groovy @@ -9,6 +9,7 @@ import org.junit.jupiter.api.extension.ExtendWith import org.mockito.Mock import org.mockito.junit.jupiter.MockitoExtension +import static com.jessebrault.ssg.testutil.DiagnosticsUtil.assertEmptyDiagnostics import static com.jessebrault.ssg.testutil.DiagnosticsUtil.getDiagnosticsMessageSupplier import static com.jessebrault.ssg.text.TextMocks.* import static org.junit.jupiter.api.Assertions.assertEquals @@ -40,7 +41,8 @@ class GspTemplateRendererTests { new FrontMatter(null, [:]), blankText(), [part], - [:] + [:], + '' ) assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1)) assertEquals('Hello, World!', r.v2) @@ -64,7 +66,8 @@ class GspTemplateRendererTests { new FrontMatter(null, [:]), blankText(), [part], - [:] + [:], + '' ) assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1)) assertEquals('Hello, World!', r.v2) @@ -78,7 +81,8 @@ class GspTemplateRendererTests { new FrontMatter(null, [title: ['Hello!']]), blankText(), [], - [:] + [:], + '' ) assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1)) assertEquals('Hello!', r.v2) @@ -92,7 +96,8 @@ class GspTemplateRendererTests { new FrontMatter(null, [:]), blankText(), [], - [test: 'Hello, World!'] + [test: 'Hello, World!'], + '' ) assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1)) assertEquals('Hello, World!', r.v2) @@ -106,7 +111,8 @@ class GspTemplateRendererTests { new FrontMatter(null, [:]), renderableText('Hello, World!'), [], - [:] + [:], + '' ) assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1)) assertEquals('Hello, World!', r.v2) @@ -120,7 +126,8 @@ class GspTemplateRendererTests { new FrontMatter(null, [:]), blankText(), [], - [:] + [:], + '' ) assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1)) assertEquals('', r.v2) @@ -134,7 +141,8 @@ class GspTemplateRendererTests { new FrontMatter(null, [:]), textWithPath('test.md'), [], - [:] + [:], + '' ) assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1)) assertEquals('test.md', r.v2) @@ -146,12 +154,43 @@ class GspTemplateRendererTests { def r = this.renderer.render( template, new FrontMatter(null, [:]), - textWithPath('test.md'), + blankText(), [], - [:] + [:], + 'test.html' ) assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1)) assertEquals('images/test.jpg', r.v2) } + @Test + void urlBuilderIsRelativeToTargetPath() { + def template = new Template('<%= urlBuilder.relative("images/test.jpg") %>', null, null) + def r = this.renderer.render( + template, + new FrontMatter(null, [:]), + blankText(), + [], + [:], + 'test/test.html' + ) + assertEmptyDiagnostics(r) + assertEquals('../images/test.jpg', r.v2) + } + + @Test + void targetPathAvailable() { + def template = new Template('<%= targetPath %>', null, null) + def r = this.renderer.render( + template, + new FrontMatter(null, [:]), + blankText(), + [], + [:], + 'test.html' + ) + assertEmptyDiagnostics(r) + assertEquals('test.html', r.v2) + } + }