Skip to main content
Taking actions conditionally and looping over collections of data are very common requirements from a templating system. This article explains how these are achieved in WireMock Cloud.

Conditional logic with if / else and unless

Handlebars provides a set of core helpers that implement if / else if / else logic of the kind found in many programming languages. As with most implementations of if, the simples form is to take an action only if the condition is true:
An else clause can be used:
And any number of else if clauses can also be added:
Finally, you can take an action if a condition is false using unless:

Comparison helpers

The if, else if and unless helpers all take a single boolean value as their parameter. In practice you often need to derive that value by comparing other values, and for this we have a set of helpers implementing common comparison operations. For instance if you needed to check that a variable equalled a particular string you would use the eq helper:
You can nest comparison helpers inside the if helper:
You can also use comparison helpers with else:
The following comparison helpers are available: eq - equal
neq - not equal
gt - greater than
gte - greater than or equal to
lt - less than
lte - less than or equal
and - logical AND
or - logical OR
not - logical NOT

Iteration

You can loop over collections of data using the each helper.

Iterating over JSON and XML elements

The jsonPath and xPath helpers both output collections so these can be used in an each loop. See Working with JSON and Working with XML for details.

Detecting the first and last element while looping

Often it can be useful to know when you’re processing the first or last element in a collection e.g. so that you can decide whether to output a separate character. You can do this using the @first and @last variables that are automatically provided to the scope inside the each block. For instance, if you wanted to output a list of JSON objects, separated with commas and avoiding an extraneous comma at the end:

Getting the loop index

The each helper also creates an @index variable in its scope which you can use to get at the (zero-indexed) element counter:

String and collection conditionals

Contains helper

The contains helper returns a boolean value indicating whether the string or array passed as the first parameter contains the string passed in the second. It can be used as parameter to the if helper:
Or as a block element on its own:

Matches helper

The matches helper returns a boolean value indicating whether the string passed as the first parameter matches the regular expression passed in the second: Like the contains helper it can be used as parameter to the if helper:
Or as a block element on its own: