From 02af0ec296630d28e744151b00b80c06532eb3b5 Mon Sep 17 00:00:00 2001 From: Adam Fowler Date: Fri, 12 Mar 2021 08:54:49 +0000 Subject: [PATCH] Add support for dynamic partials --- .../HummingbirdMustache/Template+Render.swift | 6 ++++- .../TemplateRendererTests.swift | 25 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/Sources/HummingbirdMustache/Template+Render.swift b/Sources/HummingbirdMustache/Template+Render.swift index 48a6869..16730f6 100644 --- a/Sources/HummingbirdMustache/Template+Render.swift +++ b/Sources/HummingbirdMustache/Template+Render.swift @@ -8,7 +8,11 @@ extension HBMustacheTemplate { string += text case .variable(let variable): if let child = getChild(named: variable, from: object) { - string += encodedEscapedCharacters(String(describing: child)) + if let template = child as? HBMustacheTemplate { + string += template.render(object, library: library) + } else { + string += encodedEscapedCharacters(String(describing: child)) + } } case .unescapedVariable(let variable): if let child = getChild(named: variable, from: object) { diff --git a/Tests/HummingbirdMustacheTests/TemplateRendererTests.swift b/Tests/HummingbirdMustacheTests/TemplateRendererTests.swift index 062c1fa..612ea86 100644 --- a/Tests/HummingbirdMustacheTests/TemplateRendererTests.swift +++ b/Tests/HummingbirdMustacheTests/TemplateRendererTests.swift @@ -192,6 +192,7 @@ final class TemplateRendererTests: XCTestCase { """) } + /// Testing partials func testMustacheManualExample9() throws { let library = HBMustacheLibrary() 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: """ +

Names

+ {{partial}} + """) + let template2 = try HBMustacheTemplate(string: """ + {{#names}} + {{.}} + {{/names}} + """) + library.register(template, named: "base") + + let object: [String: Any] = ["names": ["john", "adam", "claire"], "partial": template2] + XCTAssertEqual(library.render(object, withTemplateNamed: "base"), """ +

Names

+ john + adam + claire + + """) + } }