From 465ad49f1f8c5bafdf918f5994d802bba5b193ce Mon Sep 17 00:00:00 2001 From: Adam Fowler Date: Sun, 14 Mar 2021 17:53:20 +0000 Subject: [PATCH] Add index filter --- Sources/HummingbirdMustache/Context.swift | 4 ++++ Sources/HummingbirdMustache/Method.swift | 11 +++++++++++ Sources/HummingbirdMustache/Sequence.swift | 1 + Tests/HummingbirdMustacheTests/MethodTests.swift | 15 +++++++++++++++ 4 files changed, 31 insertions(+) diff --git a/Sources/HummingbirdMustache/Context.swift b/Sources/HummingbirdMustache/Context.swift index 07053f3..23852e3 100644 --- a/Sources/HummingbirdMustache/Context.swift +++ b/Sources/HummingbirdMustache/Context.swift @@ -2,10 +2,12 @@ struct HBMustacheContext: HBMustacheMethods { var first: Bool var last: Bool + var index: Int init(first: Bool = false, last: Bool = false) { self.first = first self.last = last + self.index = 0 } func runMethod(_ name: String) -> Any? { @@ -14,6 +16,8 @@ struct HBMustacheContext: HBMustacheMethods { return self.first case "last": return self.last + case "index": + return self.index default: return nil } diff --git a/Sources/HummingbirdMustache/Method.swift b/Sources/HummingbirdMustache/Method.swift index 14e26f8..bb5d785 100644 --- a/Sources/HummingbirdMustache/Method.swift +++ b/Sources/HummingbirdMustache/Method.swift @@ -39,3 +39,14 @@ extension Dictionary: HBMustacheMethods { } } } + +extension Int: HBMustacheMethods { + func runMethod(_ name: String) -> Any? { + switch name { + case "plus1": + return self + 1 + default: + return nil + } + } +} diff --git a/Sources/HummingbirdMustache/Sequence.swift b/Sources/HummingbirdMustache/Sequence.swift index dbd6ff5..3695fc1 100644 --- a/Sources/HummingbirdMustache/Sequence.swift +++ b/Sources/HummingbirdMustache/Sequence.swift @@ -15,6 +15,7 @@ extension Sequence { string += template.render(currentObject, context: context) currentObject = object context.first = false + context.index += 1 } context.last = true diff --git a/Tests/HummingbirdMustacheTests/MethodTests.swift b/Tests/HummingbirdMustacheTests/MethodTests.swift index 549f56f..ee7730f 100644 --- a/Tests/HummingbirdMustacheTests/MethodTests.swift +++ b/Tests/HummingbirdMustacheTests/MethodTests.swift @@ -33,6 +33,21 @@ final class MethodTests: XCTestCase { """) } + func testIndex() throws { + let template = try HBMustacheTemplate(string: """ + {{#repo}} + {{#index()}}{{plus1(.)}}) {{/}}{{ name }} + {{/repo}} + """) + let object: [String: Any] = ["repo": [["name": "resque"], ["name": "hub"], ["name": "rip"]]] + XCTAssertEqual(template.render(object), """ + 1) resque + 2) hub + 3) rip + + """) + } + func testReversed() throws { let template = try HBMustacheTemplate(string: """ {{#reversed(repo)}}