From 51410d2ce901e2472c8439e49f5d35bc244e0f14 Mon Sep 17 00:00:00 2001 From: Kyle Fuller Date: Sun, 26 Oct 2014 17:29:57 +0000 Subject: [PATCH] [Template] Expose token parser --- Stencil/Context.swift | 4 ++++ Stencil/Template.swift | 7 ++++++- StencilTests/StencilTests.swift | 18 ++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/Stencil/Context.swift b/Stencil/Context.swift index 9691a9c..a9c3e3c 100644 --- a/Stencil/Context.swift +++ b/Stencil/Context.swift @@ -8,6 +8,10 @@ public class Context : Equatable { dictionaries = [dictionary] } + public init() { + dictionaries = [] + } + public subscript(key: String) -> AnyObject? { get { for dictionary in reverse(dictionaries) { diff --git a/Stencil/Template.swift b/Stencil/Template.swift index 7d66f1e..490546f 100644 --- a/Stencil/Template.swift +++ b/Stencil/Template.swift @@ -1,7 +1,7 @@ import Foundation public class Template { - let parser:TokenParser + public let parser:TokenParser public convenience init?(named:String) { self.init(named:named, inBundle:nil) @@ -45,4 +45,9 @@ public class Template { return .Error(error:error) } } + + public func render() -> Result { + let context = Context() + return render(context) + } } diff --git a/StencilTests/StencilTests.swift b/StencilTests/StencilTests.swift index fbeca80..2ab069d 100644 --- a/StencilTests/StencilTests.swift +++ b/StencilTests/StencilTests.swift @@ -20,6 +20,12 @@ func assertFailure(result:TokenParser.Results, description:String) { } } +class CustomNode : Node { + func render(context:Context) -> (String?, Error?) { + return ("Hello World", nil) + } +} + class StencilTests: XCTestCase { func testReadmeExample() { let templateString = "There are {{ articles.count }} articles.\n" + @@ -46,4 +52,16 @@ class StencilTests: XCTestCase { XCTAssertEqual(result, Result.Success(string: fixture)) } + + func testCustomTag() { + let templateString = "{% custom %}" + let template = Template(templateString:templateString) + + template.parser.registerTag("custom") { parser, token in + return .Success(node:CustomNode()) + } + + let result = template.render() + XCTAssertEqual(result, Result.Success(string: "Hello World")) + } }