From b1da85b140eb857e1c88e5fa94e9b94b28cf9111 Mon Sep 17 00:00:00 2001 From: Kyle Fuller Date: Mon, 28 Nov 2016 19:10:48 +0000 Subject: [PATCH] feat(default filter): Support multiple defaults --- Sources/Filters.swift | 12 +++++++++++- Tests/StencilTests/FilterSpec.swift | 6 ++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/Sources/Filters.swift b/Sources/Filters.swift index 0bac235..a172516 100644 --- a/Sources/Filters.swift +++ b/Sources/Filters.swift @@ -33,7 +33,17 @@ func lowercase(_ value: Any?) -> Any? { } func defaultFilter(value: Any?, arguments: [Any?]) -> Any? { - return value ?? arguments.first as Any + if let value = value { + return value + } + + for argument in arguments { + if let argument = argument { + return argument + } + } + + return nil } func joinFilter(value: Any?, arguments: [Any?]) throws -> Any? { diff --git a/Tests/StencilTests/FilterSpec.swift b/Tests/StencilTests/FilterSpec.swift index 0b6610a..5b63057 100644 --- a/Tests/StencilTests/FilterSpec.swift +++ b/Tests/StencilTests/FilterSpec.swift @@ -101,6 +101,12 @@ func testFilter() { let result = try template.render(Context(dictionary: [:])) try expect(result) == "Hello World" } + + $0.it("supports multiple defaults") { + let template = Template(templateString: "Hello {{ name|default:a,b,c,\"World\" }}") + let result = try template.render(Context(dictionary: [:])) + try expect(result) == "Hello World" + } } describe("join filter") {