feat: Add a default filter

This commit is contained in:
Kyle Fuller
2016-11-27 18:27:30 +00:00
parent 3293d8a526
commit dfd57e9571
5 changed files with 34 additions and 0 deletions

View File

@@ -12,6 +12,11 @@
### Enhancements
- You may now register custom template filters which make use of arguments.
- There is now a `default` filter.
```html+django
Hello {{ name|default:"World" }}
```
### Bug Fixes

View File

@@ -31,3 +31,7 @@ func lowercase(_ value: Any?) -> Any? {
return value
}
func defaultFilter(value: Any?, arguments: [Any?]) -> Any? {
return value ?? arguments.first as Any
}

View File

@@ -45,6 +45,7 @@ public class Namespace {
}
fileprivate func registerDefaultFilters() {
registerFilter("default", filter: defaultFilter)
registerFilter("capitalize", filter: capitalise)
registerFilter("uppercase", filter: uppercase)
registerFilter("lowercase", filter: lowercase)

View File

@@ -89,4 +89,18 @@ func testFilter() {
try expect(result) == "kyle"
}
}
describe("default filter") {
let template = Template(templateString: "Hello {{ name|default:\"World\" }}")
$0.it("shows the variable value") {
let result = try template.render(Context(dictionary: ["name": "Kyle"]))
try expect(result) == "Hello Kyle"
}
$0.it("shows the default value") {
let result = try template.render(Context(dictionary: [:]))
try expect(result) == "Hello World"
}
}
}

View File

@@ -120,3 +120,13 @@ For example, `Stencil` to `stencil`.
.. code-block:: html+django
{{ "Stencil"|lowercase }}
``default``
~~~~~~~~~~~
If a variable not present in the context, use given default. Otherwise, use the
value of the variable. For example:
.. code-block:: html+django
Hello {{ name|default:"World" }}