Added InputPages; fixed output paths.
This commit is contained in:
parent
076bc9bc52
commit
bbb0484a74
@ -1,6 +1,7 @@
|
||||
package com.jessebrault.ssg
|
||||
|
||||
import com.jessebrault.ssg.buildscript.GroovyBuildScriptRunner
|
||||
import com.jessebrault.ssg.output.OutputPage
|
||||
import com.jessebrault.ssg.part.GspPartRenderer
|
||||
import com.jessebrault.ssg.part.PartFilePartsProvider
|
||||
import com.jessebrault.ssg.part.PartType
|
||||
@ -75,10 +76,10 @@ abstract class AbstractBuildCommand extends AbstractSubCommand {
|
||||
logger.error(it.message)
|
||||
}
|
||||
} else {
|
||||
result.v2.each { GeneratedPage generatedPage ->
|
||||
def target = new File(it.outDir, generatedPage.path + '.html')
|
||||
result.v2.each { OutputPage outputPage ->
|
||||
def target = new File(it.outDir, outputPage.path)
|
||||
target.createParentDirectories()
|
||||
target.write(generatedPage.html)
|
||||
target.write(outputPage.content)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,20 +0,0 @@
|
||||
package com.jessebrault.ssg
|
||||
|
||||
import groovy.transform.EqualsAndHashCode
|
||||
import groovy.transform.NullCheck
|
||||
import groovy.transform.TupleConstructor
|
||||
|
||||
@TupleConstructor(includeFields = true, defaults = false)
|
||||
@NullCheck
|
||||
@EqualsAndHashCode
|
||||
class GeneratedPage {
|
||||
|
||||
String path
|
||||
String html
|
||||
|
||||
@Override
|
||||
String toString() {
|
||||
"GeneratedPage(path: ${ this.path })"
|
||||
}
|
||||
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
package com.jessebrault.ssg
|
||||
|
||||
import com.jessebrault.ssg.output.OutputPage
|
||||
import com.jessebrault.ssg.text.FrontMatter
|
||||
import groovy.transform.EqualsAndHashCode
|
||||
import groovy.transform.NullCheck
|
||||
@ -19,7 +20,7 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator {
|
||||
private static final Marker exit = MarkerFactory.getMarker('EXIT')
|
||||
|
||||
@Override
|
||||
Tuple2<Collection<Diagnostic>, Collection<GeneratedPage>> generate(Build build) {
|
||||
Tuple2<Collection<Diagnostic>, Collection<OutputPage>> generate(Build build) {
|
||||
logger.trace(enter, 'build: {}', build)
|
||||
logger.info('processing build with name: {}', build.name)
|
||||
|
||||
@ -35,7 +36,7 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator {
|
||||
|
||||
def globals = build.globals
|
||||
Collection<Diagnostic> diagnostics = []
|
||||
Collection<GeneratedPage> generatedPages = []
|
||||
Collection<OutputPage> generatedPages = []
|
||||
|
||||
// Generate pages from each text, but only those that have a 'template' frontMatter field with a valid value
|
||||
texts.each {
|
||||
@ -87,7 +88,7 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator {
|
||||
}
|
||||
|
||||
// Create a GeneratedPage
|
||||
generatedPages << new GeneratedPage(it.path, renderedTemplate)
|
||||
generatedPages << OutputPage.of(it, '.html', renderedTemplate)
|
||||
}
|
||||
|
||||
// Generate special pages
|
||||
@ -105,7 +106,7 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator {
|
||||
}
|
||||
|
||||
// Create a GeneratedPage
|
||||
generatedPages << new GeneratedPage(it.path, renderedSpecialPage)
|
||||
generatedPages << OutputPage.of(it, '.html', renderedSpecialPage)
|
||||
}
|
||||
|
||||
logger.trace(exit, '\n\tdiagnostics: {}\n\tgeneratedPages: {}', diagnostics, generatedPages)
|
||||
|
@ -1,5 +1,7 @@
|
||||
package com.jessebrault.ssg
|
||||
|
||||
import com.jessebrault.ssg.output.OutputPage
|
||||
|
||||
interface StaticSiteGenerator {
|
||||
Tuple2<Collection<Diagnostic>, Collection<GeneratedPage>> generate(Build build)
|
||||
Tuple2<Collection<Diagnostic>, Collection<OutputPage>> generate(Build build)
|
||||
}
|
||||
|
@ -0,0 +1,5 @@
|
||||
package com.jessebrault.ssg.input
|
||||
|
||||
interface InputPage {
|
||||
String getPath()
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
package com.jessebrault.ssg.output
|
||||
|
||||
import com.jessebrault.ssg.input.InputPage
|
||||
import groovy.transform.EqualsAndHashCode
|
||||
import groovy.transform.NullCheck
|
||||
|
||||
import static com.jessebrault.ssg.util.ExtensionsUtil.stripExtension
|
||||
|
||||
@NullCheck
|
||||
@EqualsAndHashCode
|
||||
final class OutputPage {
|
||||
|
||||
static OutputPage of(InputPage inputFile, String extension, String content) {
|
||||
new OutputPage(stripExtension(inputFile.path) + extension, content)
|
||||
}
|
||||
|
||||
final String path
|
||||
final String content
|
||||
|
||||
private OutputPage(String path, String content) {
|
||||
this.path = path
|
||||
this.content = content
|
||||
}
|
||||
|
||||
@Override
|
||||
String toString() {
|
||||
"GeneratedPage(path: ${ this.path })"
|
||||
}
|
||||
|
||||
}
|
@ -32,9 +32,7 @@ class GspSpecialPageRenderer implements SpecialPageRenderer {
|
||||
parts: new EmbeddablePartsMap(parts, globals, diagnostics.&addAll, specialPage.path),
|
||||
path: specialPage.path,
|
||||
tagBuilder: new DynamicTagBuilder(),
|
||||
texts: new EmbeddableTextsCollection(texts, globals, { Collection<Diagnostic> textDiagnostics ->
|
||||
diagnostics.addAll(textDiagnostics)
|
||||
}),
|
||||
texts: new EmbeddableTextsCollection(texts, globals, diagnostics.&addAll),
|
||||
urlBuilder: new PathBasedUrlBuilder(specialPage.path)
|
||||
])
|
||||
new Tuple2<>(diagnostics, result.toString())
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.jessebrault.ssg.specialpage
|
||||
|
||||
import com.jessebrault.ssg.input.InputPage
|
||||
import groovy.transform.EqualsAndHashCode
|
||||
import groovy.transform.NullCheck
|
||||
import groovy.transform.TupleConstructor
|
||||
@ -7,7 +8,7 @@ import groovy.transform.TupleConstructor
|
||||
@TupleConstructor(defaults = false)
|
||||
@NullCheck
|
||||
@EqualsAndHashCode
|
||||
class SpecialPage {
|
||||
class SpecialPage implements InputPage {
|
||||
|
||||
String text
|
||||
String path
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.jessebrault.ssg.text
|
||||
|
||||
import com.jessebrault.ssg.input.InputPage
|
||||
import groovy.transform.EqualsAndHashCode
|
||||
import groovy.transform.NullCheck
|
||||
import groovy.transform.TupleConstructor
|
||||
@ -7,7 +8,7 @@ import groovy.transform.TupleConstructor
|
||||
@TupleConstructor(defaults = false)
|
||||
@NullCheck
|
||||
@EqualsAndHashCode
|
||||
class Text {
|
||||
class Text implements InputPage {
|
||||
|
||||
String text
|
||||
String path
|
||||
|
@ -17,6 +17,7 @@ import com.jessebrault.ssg.text.TextType
|
||||
import org.junit.jupiter.api.BeforeEach
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
import static com.jessebrault.ssg.testutil.DiagnosticsUtil.assertEmptyDiagnostics
|
||||
import static org.junit.jupiter.api.Assertions.*
|
||||
|
||||
class SimpleStaticSiteGeneratorIntegrationTests {
|
||||
@ -65,12 +66,12 @@ class SimpleStaticSiteGeneratorIntegrationTests {
|
||||
|
||||
def result = this.ssg.generate(this.build)
|
||||
|
||||
assertTrue(result.v1.size() == 0)
|
||||
assertEmptyDiagnostics(result)
|
||||
assertTrue(result.v2.size() == 1)
|
||||
|
||||
def p0 = result.v2[0]
|
||||
assertEquals('test', p0.path)
|
||||
assertEquals('<p><strong>Hello, World!</strong></p>\n', p0.html)
|
||||
assertEquals('test.html', p0.path)
|
||||
assertEquals('<p><strong>Hello, World!</strong></p>\n', p0.content)
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -85,39 +86,40 @@ class SimpleStaticSiteGeneratorIntegrationTests {
|
||||
|
||||
def result = this.ssg.generate(this.build)
|
||||
|
||||
assertTrue(result.v1.size() == 0)
|
||||
assertEmptyDiagnostics(result)
|
||||
assertTrue(result.v2.size() == 1)
|
||||
|
||||
def p0 = result.v2[0]
|
||||
assertEquals('nested/nested', p0.path)
|
||||
assertEquals('<p><strong>Hello, World!</strong></p>\n', p0.html)
|
||||
assertEquals('nested/nested.html', p0.path)
|
||||
assertEquals('<p><strong>Hello, World!</strong></p>\n', p0.content)
|
||||
}
|
||||
|
||||
@Test
|
||||
void outputsSpecialPage() {
|
||||
new FileTreeBuilder(this.specialPagesDir).file('special.gsp', $/<%= texts.find { it.path == 'test' }.render() %>/$)
|
||||
new FileTreeBuilder(this.specialPagesDir)
|
||||
.file('special.gsp', $/<%= texts.find { it.path == 'test.md' }.render() %>/$)
|
||||
new FileTreeBuilder(this.templatesDir).file('template.gsp', '<%= 1 + 1 %>')
|
||||
new FileTreeBuilder(this.textsDir).file('test.md', '---\ntemplate: template.gsp\n---\nHello, World!')
|
||||
|
||||
def result = this.ssg.generate(this.build)
|
||||
|
||||
assertEquals(0, result.v1.size())
|
||||
assertEmptyDiagnostics(result)
|
||||
assertEquals(2, result.v2.size())
|
||||
|
||||
def testPage = result.v2.find { it.path == 'test' }
|
||||
def testPage = result.v2.find { it.path == 'test.html' }
|
||||
assertNotNull(testPage)
|
||||
assertEquals('2', testPage.html)
|
||||
assertEquals('2', testPage.content)
|
||||
|
||||
def specialPage = result.v2.find { it.path == 'special' }
|
||||
def specialPage = result.v2.find { it.path == 'special.html' }
|
||||
assertNotNull(specialPage)
|
||||
assertEquals('<p>Hello, World!</p>\n', specialPage.html)
|
||||
assertEquals('<p>Hello, World!</p>\n', specialPage.content)
|
||||
}
|
||||
|
||||
@Test
|
||||
void doesNotGenerateIfNoTemplateInFrontMatter() {
|
||||
new File(this.textsDir, 'test.md').write('Hello, World!')
|
||||
def result = this.ssg.generate(this.build)
|
||||
assertEquals(0, result.v1.size())
|
||||
assertEmptyDiagnostics(result)
|
||||
assertEquals(0, result.v2.size())
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user