feat(filters): Allow filters with arguments

This commit is contained in:
Kyle Fuller
2016-11-27 01:59:57 +00:00
parent 1e3afc0dd5
commit 60b378d482
6 changed files with 95 additions and 10 deletions

View File

@@ -10,7 +10,7 @@ func testFilter() {
let template = Template(templateString: "{{ name|repeat }}")
let namespace = Namespace()
namespace.registerFilter("repeat") { value in
namespace.registerFilter("repeat") { (value: Any?) in
if let value = value as? String {
return "\(value) \(value)"
}
@@ -22,10 +22,27 @@ func testFilter() {
try expect(result) == "Kyle Kyle"
}
$0.it("allows you to register a custom filter which accepts arguments") {
let template = Template(templateString: "{{ name|repeat:'value' }}")
let namespace = Namespace()
namespace.registerFilter("repeat") { value, arguments in
print(arguments)
if !arguments.isEmpty {
return "\(value!) \(value!) with args \(arguments.first!!)"
}
return nil
}
let result = try template.render(Context(dictionary: context, namespace: namespace))
try expect(result) == "Kyle Kyle with args value"
}
$0.it("allows you to register a custom which throws") {
let template = Template(templateString: "{{ name|repeat }}")
let namespace = Namespace()
namespace.registerFilter("repeat") { value in
namespace.registerFilter("repeat") { (value: Any?) in
throw TemplateSyntaxError("No Repeat")
}
@@ -37,6 +54,11 @@ func testFilter() {
let result = try template.render(Context(dictionary: ["name": "kyle"]))
try expect(result) == "KYLE"
}
$0.it("throws when you pass arguments to simple filter") {
let template = Template(templateString: "{{ name|uppercase:5 }}")
try expect(try template.render(Context(dictionary: ["name": "kyle"]))).toThrow()
}
}