Added targetPath to dsl.

This commit is contained in:
Jesse Brault 2023-02-15 11:57:02 +01:00
parent b57ad55396
commit 6de83dff10
8 changed files with 111 additions and 27 deletions

View File

@ -10,6 +10,8 @@ import org.slf4j.LoggerFactory
import org.slf4j.Marker import org.slf4j.Marker
import org.slf4j.MarkerFactory import org.slf4j.MarkerFactory
import static com.jessebrault.ssg.util.ExtensionsUtil.stripExtension
@TupleConstructor(includeFields = true) @TupleConstructor(includeFields = true)
@NullCheck @NullCheck
@EqualsAndHashCode(includeFields = true) @EqualsAndHashCode(includeFields = true)
@ -70,13 +72,16 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator {
} }
logger.debug('found template: {}', template) logger.debug('found template: {}', template)
def targetPath = stripExtension(it.path) + '.html'
// Render the template using the result of rendering the text earlier // Render the template using the result of rendering the text earlier
def templateRenderResult = template.type.renderer.render( def templateRenderResult = template.type.renderer.render(
template, template,
frontMatter, frontMatter,
it, it,
parts, parts,
globals globals,
targetPath
) )
String renderedTemplate String renderedTemplate
if (templateRenderResult.v1.size() > 0) { if (templateRenderResult.v1.size() > 0) {
@ -88,14 +93,21 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator {
} }
// Create a GeneratedPage // Create a GeneratedPage
generatedPages << OutputPage.of(it, '.html', renderedTemplate) generatedPages << new OutputPage(targetPath, renderedTemplate)
} }
// Generate special pages // Generate special pages
specialPages.each { specialPages.each {
logger.info('processing specialPage: {}', it.path) 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 String renderedSpecialPage
if (specialPageRenderResult.v1.size() > 0) { if (specialPageRenderResult.v1.size() > 0) {
diagnostics.addAll(specialPageRenderResult.v1) diagnostics.addAll(specialPageRenderResult.v1)
@ -106,7 +118,7 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator {
} }
// Create a GeneratedPage // Create a GeneratedPage
generatedPages << OutputPage.of(it, '.html', renderedSpecialPage) generatedPages << new OutputPage(targetPath, renderedSpecialPage)
} }
logger.trace(exit, '\n\tdiagnostics: {}\n\tgeneratedPages: {}', diagnostics, generatedPages) logger.trace(exit, '\n\tdiagnostics: {}\n\tgeneratedPages: {}', diagnostics, generatedPages)

View File

@ -10,6 +10,7 @@ import static com.jessebrault.ssg.util.ExtensionsUtil.stripExtension
@EqualsAndHashCode @EqualsAndHashCode
final class OutputPage { final class OutputPage {
@Deprecated
static OutputPage of(InputPage inputFile, String extension, String content) { static OutputPage of(InputPage inputFile, String extension, String content) {
new OutputPage(stripExtension(inputFile.path) + extension, content) new OutputPage(stripExtension(inputFile.path) + extension, content)
} }
@ -17,7 +18,7 @@ final class OutputPage {
final String path final String path
final String content final String content
private OutputPage(String path, String content) { OutputPage(String path, String content) {
this.path = path this.path = path
this.content = content this.content = content
} }

View File

@ -23,7 +23,8 @@ class GspSpecialPageRenderer implements SpecialPageRenderer {
SpecialPage specialPage, SpecialPage specialPage,
Collection<Text> texts, Collection<Text> texts,
Collection<Part> parts, Collection<Part> parts,
Map globals Map globals,
String targetPath
) { ) {
try { try {
Collection<Diagnostic> diagnostics = [] Collection<Diagnostic> diagnostics = []
@ -32,8 +33,9 @@ class GspSpecialPageRenderer implements SpecialPageRenderer {
parts: new EmbeddablePartsMap(parts, globals, diagnostics.&addAll, specialPage.path), parts: new EmbeddablePartsMap(parts, globals, diagnostics.&addAll, specialPage.path),
path: specialPage.path, path: specialPage.path,
tagBuilder: new DynamicTagBuilder(), tagBuilder: new DynamicTagBuilder(),
targetPath: targetPath,
texts: new EmbeddableTextsCollection(texts, globals, diagnostics.&addAll), texts: new EmbeddableTextsCollection(texts, globals, diagnostics.&addAll),
urlBuilder: new PathBasedUrlBuilder(specialPage.path) urlBuilder: new PathBasedUrlBuilder(targetPath)
]) ])
new Tuple2<>(diagnostics, result.toString()) new Tuple2<>(diagnostics, result.toString())
} catch (Exception e) { } catch (Exception e) {

View File

@ -10,7 +10,8 @@ interface SpecialPageRenderer {
SpecialPage specialPage, SpecialPage specialPage,
Collection<Text> texts, Collection<Text> texts,
Collection <Part> parts, Collection <Part> parts,
Map globals Map globals,
String targetPath
) )
} }

View File

@ -26,7 +26,8 @@ class GspTemplateRenderer implements TemplateRenderer {
FrontMatter frontMatter, FrontMatter frontMatter,
Text text, Text text,
Collection<Part> parts, Collection<Part> parts,
Map globals Map globals,
String targetPath
) { ) {
try { try {
Collection<Diagnostic> diagnostics = [] Collection<Diagnostic> diagnostics = []
@ -40,8 +41,9 @@ class GspTemplateRenderer implements TemplateRenderer {
parts: new EmbeddablePartsMap(parts, globals, onDiagnostics, embeddableText, text.path), parts: new EmbeddablePartsMap(parts, globals, onDiagnostics, embeddableText, text.path),
path: text.path, path: text.path,
tagBuilder: new DynamicTagBuilder(), tagBuilder: new DynamicTagBuilder(),
targetPath: targetPath,
text: embeddableText, text: embeddableText,
urlBuilder: new PathBasedUrlBuilder(text.path) urlBuilder: new PathBasedUrlBuilder(targetPath)
]) ])
new Tuple2<>(diagnostics, result.toString()) new Tuple2<>(diagnostics, result.toString())
} catch (Exception e) { } catch (Exception e) {

View File

@ -16,7 +16,8 @@ interface TemplateRenderer {
FrontMatter frontMatter, FrontMatter frontMatter,
Text text, Text text,
Collection<Part> parts, Collection<Part> parts,
Map globals Map globals,
String targetPath
) )
} }

View File

@ -24,7 +24,7 @@ class GspSpecialPageRendererTests {
void rendersGlobal() { void rendersGlobal() {
def specialPage = new SpecialPage("<%= globals['greeting'] %>", 'test.gsp', null) def specialPage = new SpecialPage("<%= globals['greeting'] %>", 'test.gsp', null)
def globals = [greeting: 'Hello, World!'] def globals = [greeting: 'Hello, World!']
def r = this.renderer.render(specialPage, [], [], globals) def r = this.renderer.render(specialPage, [], [], globals, '')
assertEmptyDiagnostics(r) assertEmptyDiagnostics(r)
assertEquals('Hello, World!', r.v2) assertEquals('Hello, World!', r.v2)
} }
@ -37,7 +37,7 @@ class GspSpecialPageRendererTests {
def part = new Part('test', partType , '') def part = new Part('test', partType , '')
def specialPage = new SpecialPage("<%= parts['test'].render() %>", 'test.gsp', null) 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) assertEmptyDiagnostics(r)
assertEquals('Hello, World!', r.v2) assertEquals('Hello, World!', r.v2)
} }
@ -55,7 +55,7 @@ class GspSpecialPageRendererTests {
'test.gsp', 'test.gsp',
null null
) )
def r = this.renderer.render(specialPage, [], [part], [:]) def r = this.renderer.render(specialPage, [], [part], [:], '')
assertEmptyDiagnostics(r) assertEmptyDiagnostics(r)
assertEquals('Hello, World!', r.v2) assertEquals('Hello, World!', r.v2)
} }
@ -72,7 +72,7 @@ class GspSpecialPageRendererTests {
'test.gsp', 'test.gsp',
null null
) )
def r = this.renderer.render(specialPage, [text], [], [:]) def r = this.renderer.render(specialPage, [text], [], [:], '')
assertEmptyDiagnostics(r) assertEmptyDiagnostics(r)
assertEquals('<p><strong>Hello, World!</strong></p>\n', r.v2) assertEquals('<p><strong>Hello, World!</strong></p>\n', r.v2)
} }
@ -80,7 +80,7 @@ class GspSpecialPageRendererTests {
@Test @Test
void tagBuilderAvailable() { void tagBuilderAvailable() {
def specialPage = new SpecialPage('<%= tagBuilder.test() %>', 'test.gsp', null) def specialPage = new SpecialPage('<%= tagBuilder.test() %>', 'test.gsp', null)
def r = this.renderer.render(specialPage, [], [], [:]) def r = this.renderer.render(specialPage, [], [], [:], '')
assertEmptyDiagnostics(r) assertEmptyDiagnostics(r)
assertEquals('<test />', r.v2) assertEquals('<test />', r.v2)
} }
@ -88,7 +88,7 @@ class GspSpecialPageRendererTests {
@Test @Test
void pathAvailable() { void pathAvailable() {
def specialPage = new SpecialPage('<%= path %>', 'test.gsp', null) def specialPage = new SpecialPage('<%= path %>', 'test.gsp', null)
def r = this.renderer.render(specialPage, [], [], [:]) def r = this.renderer.render(specialPage, [], [], [:], '')
assertEmptyDiagnostics(r) assertEmptyDiagnostics(r)
assertEquals('test.gsp', r.v2) assertEquals('test.gsp', r.v2)
} }
@ -100,9 +100,35 @@ class GspSpecialPageRendererTests {
'test.gsp', 'test.gsp',
null null
) )
def r = this.renderer.render(specialPage, [], [], [:]) def r = this.renderer.render(specialPage, [], [], [:], 'test.html')
assertEmptyDiagnostics(r) assertEmptyDiagnostics(r)
assertEquals('images/test.jpg', r.v2) 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)
}
} }

View File

@ -9,6 +9,7 @@ import org.junit.jupiter.api.extension.ExtendWith
import org.mockito.Mock import org.mockito.Mock
import org.mockito.junit.jupiter.MockitoExtension 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.testutil.DiagnosticsUtil.getDiagnosticsMessageSupplier
import static com.jessebrault.ssg.text.TextMocks.* import static com.jessebrault.ssg.text.TextMocks.*
import static org.junit.jupiter.api.Assertions.assertEquals import static org.junit.jupiter.api.Assertions.assertEquals
@ -40,7 +41,8 @@ class GspTemplateRendererTests {
new FrontMatter(null, [:]), new FrontMatter(null, [:]),
blankText(), blankText(),
[part], [part],
[:] [:],
''
) )
assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1)) assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1))
assertEquals('Hello, World!', r.v2) assertEquals('Hello, World!', r.v2)
@ -64,7 +66,8 @@ class GspTemplateRendererTests {
new FrontMatter(null, [:]), new FrontMatter(null, [:]),
blankText(), blankText(),
[part], [part],
[:] [:],
''
) )
assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1)) assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1))
assertEquals('Hello, World!', r.v2) assertEquals('Hello, World!', r.v2)
@ -78,7 +81,8 @@ class GspTemplateRendererTests {
new FrontMatter(null, [title: ['Hello!']]), new FrontMatter(null, [title: ['Hello!']]),
blankText(), blankText(),
[], [],
[:] [:],
''
) )
assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1)) assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1))
assertEquals('Hello!', r.v2) assertEquals('Hello!', r.v2)
@ -92,7 +96,8 @@ class GspTemplateRendererTests {
new FrontMatter(null, [:]), new FrontMatter(null, [:]),
blankText(), blankText(),
[], [],
[test: 'Hello, World!'] [test: 'Hello, World!'],
''
) )
assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1)) assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1))
assertEquals('Hello, World!', r.v2) assertEquals('Hello, World!', r.v2)
@ -106,7 +111,8 @@ class GspTemplateRendererTests {
new FrontMatter(null, [:]), new FrontMatter(null, [:]),
renderableText('Hello, World!'), renderableText('Hello, World!'),
[], [],
[:] [:],
''
) )
assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1)) assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1))
assertEquals('Hello, World!', r.v2) assertEquals('Hello, World!', r.v2)
@ -120,7 +126,8 @@ class GspTemplateRendererTests {
new FrontMatter(null, [:]), new FrontMatter(null, [:]),
blankText(), blankText(),
[], [],
[:] [:],
''
) )
assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1)) assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1))
assertEquals('<test />', r.v2) assertEquals('<test />', r.v2)
@ -134,7 +141,8 @@ class GspTemplateRendererTests {
new FrontMatter(null, [:]), new FrontMatter(null, [:]),
textWithPath('test.md'), textWithPath('test.md'),
[], [],
[:] [:],
''
) )
assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1)) assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1))
assertEquals('test.md', r.v2) assertEquals('test.md', r.v2)
@ -146,12 +154,43 @@ class GspTemplateRendererTests {
def r = this.renderer.render( def r = this.renderer.render(
template, template,
new FrontMatter(null, [:]), new FrontMatter(null, [:]),
textWithPath('test.md'), blankText(),
[], [],
[:] [:],
'test.html'
) )
assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1)) assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1))
assertEquals('images/test.jpg', r.v2) 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)
}
} }