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") {