Files
swiftpm-stencil/Sources/Filters.swift
2018-01-21 16:49:32 -08:00

56 lines
1.3 KiB
Swift

func capitalise(_ value: Any?) -> Any? {
return stringify(value).capitalized
}
func uppercase(_ value: Any?) -> Any? {
return stringify(value).uppercased()
}
func lowercase(_ value: Any?) -> Any? {
return stringify(value).lowercased()
}
func defaultFilter(value: Any?, arguments: [Any?]) -> Any? {
// value can be optional wrapping nil, so this way we check for underlying value
if let value = value, String(describing: value) != "nil" {
return value
}
for argument in arguments {
if let argument = argument {
return argument
}
}
return nil
}
func joinFilter(value: Any?, arguments: [Any?]) throws -> Any? {
guard arguments.count < 2 else {
throw TemplateSyntaxError("'join' filter takes a single argument")
}
let separator = stringify(arguments.first ?? "")
if let value = value as? [Any] {
return value
.map(stringify)
.joined(separator: separator)
}
return value
}
func splitFilter(value: Any?, arguments: [Any?]) throws -> Any? {
guard arguments.count < 2 else {
throw TemplateSyntaxError("'split' filter takes a single argument")
}
let separator = stringify(arguments.first ?? " ")
if let value = value as? String {
return value.components(separatedBy: separator)
}
return value
}