Add support for dynamic partials

This commit is contained in:
Adam Fowler
2021-03-12 08:54:49 +00:00
parent fc53f09dfb
commit 02af0ec296
2 changed files with 30 additions and 1 deletions

View File

@@ -8,8 +8,12 @@ extension HBMustacheTemplate {
string += text string += text
case .variable(let variable): case .variable(let variable):
if let child = getChild(named: variable, from: object) { if let child = getChild(named: variable, from: object) {
if let template = child as? HBMustacheTemplate {
string += template.render(object, library: library)
} else {
string += encodedEscapedCharacters(String(describing: child)) string += encodedEscapedCharacters(String(describing: child))
} }
}
case .unescapedVariable(let variable): case .unescapedVariable(let variable):
if let child = getChild(named: variable, from: object) { if let child = getChild(named: variable, from: object) {
string += String(describing: child) string += String(describing: child)

View File

@@ -192,6 +192,7 @@ final class TemplateRendererTests: XCTestCase {
""") """)
} }
/// Testing partials
func testMustacheManualExample9() throws { func testMustacheManualExample9() throws {
let library = HBMustacheLibrary() let library = HBMustacheLibrary()
let template = try HBMustacheTemplate(string: """ let template = try HBMustacheTemplate(string: """
@@ -215,4 +216,28 @@ final class TemplateRendererTests: XCTestCase {
""") """)
} }
/// Testing dynamic partials
func testDynamicPartials() throws {
let library = HBMustacheLibrary()
let template = try HBMustacheTemplate(string: """
<h2>Names</h2>
{{partial}}
""")
let template2 = try HBMustacheTemplate(string: """
{{#names}}
<strong>{{.}}</strong>
{{/names}}
""")
library.register(template, named: "base")
let object: [String: Any] = ["names": ["john", "adam", "claire"], "partial": template2]
XCTAssertEqual(library.render(object, withTemplateNamed: "base"), """
<h2>Names</h2>
<strong>john</strong>
<strong>adam</strong>
<strong>claire</strong>
""")
}
} }