diff --git a/Sources/HummingbirdMustache/Lambda.swift b/Sources/HummingbirdMustache/Lambda.swift new file mode 100644 index 0000000..e3dee97 --- /dev/null +++ b/Sources/HummingbirdMustache/Lambda.swift @@ -0,0 +1,2 @@ + +public typealias HBMustacheLambda = (Any, HBMustacheTemplate, HBMustacheLibrary?) -> String diff --git a/Sources/HummingbirdMustache/Template+Render.swift b/Sources/HummingbirdMustache/Template+Render.swift index a7ccc85..a20d9c8 100644 --- a/Sources/HummingbirdMustache/Template+Render.swift +++ b/Sources/HummingbirdMustache/Template+Render.swift @@ -41,6 +41,8 @@ extension HBMustacheTemplate { return array.renderSection(with: template, library: library) case let bool as Bool: return bool ? template.render(parent, library: library) : "" + case let lambda as HBMustacheLambda: + return lambda(parent, template, library) case .some(let value): return template.render(value, library: library) case .none: diff --git a/Tests/HummingbirdMustacheTests/TemplateRendererTests.swift b/Tests/HummingbirdMustacheTests/TemplateRendererTests.swift index 187fcad..35283f4 100644 --- a/Tests/HummingbirdMustacheTests/TemplateRendererTests.swift +++ b/Tests/HummingbirdMustacheTests/TemplateRendererTests.swift @@ -153,6 +153,19 @@ final class TemplateRendererTests: XCTestCase { """) } + func testMustacheManualExample5() throws { + let template = try HBMustacheTemplate(string: """ + {{#wrapped}}{{name}} is awesome.{{/wrapped}} + """) + func wrapped(object: Any, template: HBMustacheTemplate, library: HBMustacheLibrary?) -> String { + return "\(template.render(object, library: library))" + } + let object: [String: Any] = ["name": "Willy", "wrapped": wrapped] + XCTAssertEqual(template.render(object), """ + Willy is awesome. + """) + } + func testMustacheManualExample6() throws { let template = try HBMustacheTemplate(string: """ {{#person?}}