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)}}