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