Added targetPath to parts dsl.
This commit is contained in:
parent
6de83dff10
commit
06499a9616
@ -19,8 +19,8 @@ class EmbeddablePart {
|
||||
private final EmbeddableText text
|
||||
|
||||
private final Collection<Part> allParts
|
||||
|
||||
private final String path
|
||||
private final String targetPath
|
||||
|
||||
String render(Map binding = [:]) {
|
||||
def result = part.type.renderer.render(
|
||||
@ -29,7 +29,8 @@ class EmbeddablePart {
|
||||
this.globals,
|
||||
this.text,
|
||||
this.allParts,
|
||||
this.path
|
||||
this.path,
|
||||
this.targetPath
|
||||
)
|
||||
if (result.v1.size() > 0) {
|
||||
this.onDiagnostics.call(result.v1)
|
||||
@ -41,7 +42,8 @@ class EmbeddablePart {
|
||||
|
||||
@Override
|
||||
String toString() {
|
||||
"EmbeddablePart(part: ${ this.part }, globals: ${ this.globals })"
|
||||
"EmbeddablePart(part: ${ this.part }, globals: ${ this.globals }, path: ${ this.path }, " +
|
||||
"targetPath: ${ this.targetPath })"
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -15,13 +15,14 @@ class EmbeddablePartsMap {
|
||||
Map globals,
|
||||
Closure onDiagnostics,
|
||||
@Nullable EmbeddableText text = null,
|
||||
String path
|
||||
String path,
|
||||
String targetPath
|
||||
) {
|
||||
Objects.requireNonNull(parts)
|
||||
Objects.requireNonNull(globals)
|
||||
Objects.requireNonNull(onDiagnostics)
|
||||
parts.each {
|
||||
this.put(it.path, new EmbeddablePart(it, globals, onDiagnostics, text, parts, path))
|
||||
this.put(it.path, new EmbeddablePart(it, globals, onDiagnostics, text, parts, path, targetPath))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -7,6 +7,7 @@ import com.jessebrault.ssg.url.PathBasedUrlBuilder
|
||||
import groovy.text.GStringTemplateEngine
|
||||
import groovy.text.TemplateEngine
|
||||
import groovy.transform.EqualsAndHashCode
|
||||
import groovy.transform.NullCheck
|
||||
import org.jetbrains.annotations.Nullable
|
||||
|
||||
@EqualsAndHashCode
|
||||
@ -21,23 +22,33 @@ class GspPartRenderer implements PartRenderer {
|
||||
Map globals,
|
||||
@Nullable EmbeddableText text = null,
|
||||
Collection<Part> allParts,
|
||||
String path
|
||||
String path,
|
||||
String targetPath
|
||||
) {
|
||||
Objects.requireNonNull(part)
|
||||
Objects.requireNonNull(binding)
|
||||
Objects.requireNonNull(globals)
|
||||
Objects.requireNonNull(allParts)
|
||||
Objects.requireNonNull(path)
|
||||
Objects.requireNonNull(targetPath)
|
||||
def embeddedPartDiagnostics = []
|
||||
try {
|
||||
def result = engine.createTemplate(part.text).make([
|
||||
binding: binding,
|
||||
globals: globals,
|
||||
parts: new EmbeddablePartsMap(allParts, globals, embeddedPartDiagnostics.&addAll, text, path),
|
||||
parts: new EmbeddablePartsMap(
|
||||
allParts,
|
||||
globals,
|
||||
embeddedPartDiagnostics.&addAll,
|
||||
text,
|
||||
path,
|
||||
targetPath
|
||||
),
|
||||
path: path,
|
||||
tagBuilder: new DynamicTagBuilder(),
|
||||
targetPath: targetPath,
|
||||
text: text,
|
||||
urlBuilder: new PathBasedUrlBuilder(path)
|
||||
urlBuilder: new PathBasedUrlBuilder(targetPath)
|
||||
])
|
||||
new Tuple2<>([], result.toString())
|
||||
} catch (Exception e) {
|
||||
|
@ -12,7 +12,8 @@ interface PartRenderer {
|
||||
Map globals,
|
||||
@Nullable EmbeddableText text,
|
||||
Collection<Part> allParts,
|
||||
String path
|
||||
String path,
|
||||
String targetPath
|
||||
)
|
||||
|
||||
}
|
||||
|
@ -30,7 +30,7 @@ class GspSpecialPageRenderer implements SpecialPageRenderer {
|
||||
Collection<Diagnostic> diagnostics = []
|
||||
def result = engine.createTemplate(specialPage.text).make([
|
||||
globals: globals,
|
||||
parts: new EmbeddablePartsMap(parts, globals, diagnostics.&addAll, specialPage.path),
|
||||
parts: new EmbeddablePartsMap(parts, globals, diagnostics.&addAll, specialPage.path, targetPath),
|
||||
path: specialPage.path,
|
||||
tagBuilder: new DynamicTagBuilder(),
|
||||
targetPath: targetPath,
|
||||
|
@ -38,7 +38,7 @@ class GspTemplateRenderer implements TemplateRenderer {
|
||||
def result = engine.createTemplate(template.text).make([
|
||||
frontMatter: frontMatter,
|
||||
globals: globals,
|
||||
parts: new EmbeddablePartsMap(parts, globals, onDiagnostics, embeddableText, text.path),
|
||||
parts: new EmbeddablePartsMap(parts, globals, onDiagnostics, embeddableText, text.path, targetPath),
|
||||
path: text.path,
|
||||
tagBuilder: new DynamicTagBuilder(),
|
||||
targetPath: targetPath,
|
||||
|
@ -16,7 +16,15 @@ class GspPartRendererTests {
|
||||
@Test
|
||||
void rendersWithNoBindingOrGlobals() {
|
||||
def part = new Part('', null, 'Hello, World!')
|
||||
def r = this.renderer.render(part, [:], [:], null, [part], '')
|
||||
def r = this.renderer.render(
|
||||
part,
|
||||
[:],
|
||||
[:],
|
||||
null,
|
||||
[part],
|
||||
'',
|
||||
''
|
||||
)
|
||||
assertTrue(r.v1.size() == 0)
|
||||
assertEquals('Hello, World!', r.v2)
|
||||
}
|
||||
@ -30,6 +38,7 @@ class GspPartRendererTests {
|
||||
[:],
|
||||
null,
|
||||
[part],
|
||||
'',
|
||||
''
|
||||
)
|
||||
assertTrue(r.v1.size() == 0)
|
||||
@ -45,6 +54,7 @@ class GspPartRendererTests {
|
||||
[greeting: 'Hello, World!'],
|
||||
null,
|
||||
[part],
|
||||
'',
|
||||
''
|
||||
)
|
||||
assertTrue(r.v1.size() == 0)
|
||||
@ -61,6 +71,7 @@ class GspPartRendererTests {
|
||||
[:],
|
||||
new EmbeddableText(renderableText('Hello, World!'), [:], textDiagnostics.&addAll),
|
||||
[part],
|
||||
'',
|
||||
''
|
||||
)
|
||||
assertTrue(textDiagnostics.isEmpty())
|
||||
@ -71,7 +82,15 @@ class GspPartRendererTests {
|
||||
@Test
|
||||
void tagBuilderAvailable() {
|
||||
def part = new Part('', null, '<%= tagBuilder.test() %>')
|
||||
def r = this.renderer.render(part, [:], [:], null, [part], '')
|
||||
def r = this.renderer.render(
|
||||
part,
|
||||
[:],
|
||||
[:],
|
||||
null,
|
||||
[part],
|
||||
'',
|
||||
''
|
||||
)
|
||||
assertTrue(r.v1.isEmpty())
|
||||
assertEquals('<test />', r.v2)
|
||||
}
|
||||
@ -81,7 +100,15 @@ class GspPartRendererTests {
|
||||
def partType = new PartType(['.gsp'], this.renderer)
|
||||
def part0 = new Part('part0.gsp', partType, '<%= parts["part1.gsp"].render() %>')
|
||||
def part1 = new Part('part1.gsp', partType, 'Hello, World!')
|
||||
def r = this.renderer.render(part0, [:], [:], null, [part0, part1], '')
|
||||
def r = this.renderer.render(
|
||||
part0,
|
||||
[:],
|
||||
[:],
|
||||
null,
|
||||
[part0, part1],
|
||||
'',
|
||||
''
|
||||
)
|
||||
assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1))
|
||||
assertEquals('Hello, World!', r.v2)
|
||||
}
|
||||
@ -95,7 +122,8 @@ class GspPartRendererTests {
|
||||
[:],
|
||||
null,
|
||||
[part],
|
||||
'test.md'
|
||||
'test.md',
|
||||
''
|
||||
)
|
||||
assertEmptyDiagnostics(r)
|
||||
assertEquals('test.md', r.v2)
|
||||
@ -110,10 +138,27 @@ class GspPartRendererTests {
|
||||
[:],
|
||||
null,
|
||||
[part],
|
||||
'test.md'
|
||||
'',
|
||||
'test/test.html'
|
||||
)
|
||||
assertEmptyDiagnostics(r)
|
||||
assertEquals('images/test.jpg', r.v2)
|
||||
assertEquals('../images/test.jpg', r.v2)
|
||||
}
|
||||
|
||||
@Test
|
||||
void targetPathAvailable() {
|
||||
def part = new Part('', null, '<%= targetPath %>')
|
||||
def r = this.renderer.render(
|
||||
part,
|
||||
[:],
|
||||
[:],
|
||||
null,
|
||||
[part],
|
||||
'',
|
||||
'test/test.html'
|
||||
)
|
||||
assertEmptyDiagnostics(r)
|
||||
assertEquals('test/test.html', r.v2)
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -31,7 +31,7 @@ class GspSpecialPageRendererTests {
|
||||
|
||||
@Test
|
||||
void rendersPartWithNoBinding(@Mock PartRenderer partRenderer) {
|
||||
when(partRenderer.render(any(), any(), any(), any(), any(), any()))
|
||||
when(partRenderer.render(any(), any(), any(), any(), any(), any(), any()))
|
||||
.thenReturn(new Tuple2<>([], 'Hello, World!'))
|
||||
def partType = new PartType([], partRenderer)
|
||||
def part = new Part('test', partType , '')
|
||||
@ -45,7 +45,7 @@ class GspSpecialPageRendererTests {
|
||||
@Test
|
||||
void rendersPartWithBinding(@Mock PartRenderer partRenderer) {
|
||||
when(partRenderer.render(
|
||||
any(), argThat { Map m -> m.get('greeting') == 'Hello, World!'}, any(), any(), any(), any()
|
||||
any(), argThat { Map m -> m.get('greeting') == 'Hello, World!'}, any(), any(), any(), any(), any()
|
||||
)).thenReturn(new Tuple2<>([], 'Hello, World!'))
|
||||
def partType = new PartType([], partRenderer)
|
||||
def part = new Part('test', partType, '')
|
||||
|
@ -31,7 +31,7 @@ class GspTemplateRendererTests {
|
||||
null
|
||||
)
|
||||
|
||||
when(partRenderer.render(any(), any(), any(), any(), any(), any()))
|
||||
when(partRenderer.render(any(), any(), any(), any(), any(), any(), any()))
|
||||
.thenReturn(new Tuple2<>([], 'Hello, World!'))
|
||||
def partType = new PartType([], partRenderer)
|
||||
def part = new Part('test', partType, null)
|
||||
@ -56,7 +56,7 @@ class GspTemplateRendererTests {
|
||||
null
|
||||
)
|
||||
|
||||
when(partRenderer.render(any(), argThat { Map m -> m.get('person') == 'World' }, any(), any(), any(), any()))
|
||||
when(partRenderer.render(any(), argThat { Map m -> m.get('person') == 'World' }, any(), any(), any(), any(), any()))
|
||||
.thenReturn(new Tuple2<>([], 'Hello, World!'))
|
||||
def partType = new PartType([], partRenderer)
|
||||
def part = new Part('greeting', partType, null)
|
||||
@ -69,7 +69,7 @@ class GspTemplateRendererTests {
|
||||
[:],
|
||||
''
|
||||
)
|
||||
assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1))
|
||||
assertEmptyDiagnostics(r)
|
||||
assertEquals('Hello, World!', r.v2)
|
||||
}
|
||||
|
||||
@ -84,7 +84,7 @@ class GspTemplateRendererTests {
|
||||
[:],
|
||||
''
|
||||
)
|
||||
assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1))
|
||||
assertEmptyDiagnostics(r)
|
||||
assertEquals('Hello!', r.v2)
|
||||
}
|
||||
|
||||
@ -99,7 +99,7 @@ class GspTemplateRendererTests {
|
||||
[test: 'Hello, World!'],
|
||||
''
|
||||
)
|
||||
assertTrue(r.v1.isEmpty(), getDiagnosticsMessageSupplier(r.v1))
|
||||
assertEmptyDiagnostics(r)
|
||||
assertEquals('Hello, World!', r.v2)
|
||||
}
|
||||
|
||||
|
@ -1,11 +1,5 @@
|
||||
package com.jessebrault.ssg.text
|
||||
|
||||
import com.jessebrault.ssg.text.ExcerptGetter
|
||||
import com.jessebrault.ssg.text.FrontMatterGetter
|
||||
import com.jessebrault.ssg.text.Text
|
||||
import com.jessebrault.ssg.text.TextRenderer
|
||||
import com.jessebrault.ssg.text.TextType
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any
|
||||
import static org.mockito.Mockito.mock
|
||||
import static org.mockito.Mockito.when
|
||||
|
Loading…
Reference in New Issue
Block a user