Collection Casts
You can render a cast multiple times using the each property. The each property is a Go template that is evaluated with the cast variables. The result of the template MUST be a string representing a JSON array. Each element in the list is used to render the cast, and its value is passed to the context of the render as the It variable named. For example, the following cast renders a list of users:
casts:
users:
to: ./users-{{ .It.name }}.txt
from: |
{{ .It.name }} is {{ .It.age }} years old.
each: |
[
{ "name": "John", "age": 30 },
{ "name": "Jane", "age": 25 }
]
Item Alias
You can override the default It variable name using the as property.
casts:
users:
to: ./users-{{ .user.name }}.txt
from: |
{{ .user.name }} is {{ .user.age }} years old.
each: |
[
{ "name": "John", "age": 30 },
{ "name": "Jane", "age": 25 }
]
as: user
Iteration properties
In addition to the item value, the following properties are available in the each render context:
Index: The index of the item in the list.First:trueif the item is the first in the list,falseotherwise.Last:trueif the item is the last in the list,falseotherwise.
For example, the following cast renders a list of users:
casts:
users:
to: ./users-{{ .Index }}.txt
from: |
{{ .It.name }} is {{ .It.age }} years old.
each: |
[
{ "name": "John", "age": 30 },
{ "name": "Jane", "age": 25 }
]
Conditional Item Rendering
You can use the include or omit properties to conditionally render an item. The include property is a Go template that is evaluated with the cast variables. The result of the template should be a boolean value. If the result is true, the item is rendered. If the result is false, the item is not rendered. The omit property is the opposite of the include property. If the result of the omit template is true, the item is not rendered.
The include and omit properties are mutually exclusive. If both properties are specified, the include property is used.
The iteration properties (Index, First, and Last) are available in the include and omit render context.
For example, the following cast renders a list of users:
casts:
users:
to: ./users
from: |
{{ .It.name }} is {{ .It.age }} years old.
each: |
[
{ "name": "John", "age": 30 },
{ "name": "Jane", "age": 25 }
]
include: |
{{ .It.age > 25 }}
Combination with if and unless
You can combine the each property with the if and unless properties. These last properties affects to the whole cast, not to each item. For example, the following cast wont be rendered if the renderUsers variable is false:
variables:
- name: renderUsers
value: false
casts:
users:
to: ./users
from: |
{{ .It.name }} is {{ .It.age }} years old.
each: |
[
{ "name": "John", "age": 30 },
{ "name": "Jane", "age": 25 }
]
if: |
{{ .renderUsers }}