From aaf285154db6c3a8d42996dc174cc83f6ce4be44 Mon Sep 17 00:00:00 2001 From: Adam Fowler Date: Sun, 14 Mar 2021 08:32:50 +0000 Subject: [PATCH] Add support for Lambdas --- Sources/HummingbirdMustache/Lambda.swift | 2 ++ Sources/HummingbirdMustache/Template+Render.swift | 2 ++ .../TemplateRendererTests.swift | 13 +++++++++++++ 3 files changed, 17 insertions(+) create mode 100644 Sources/HummingbirdMustache/Lambda.swift 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?}}