doc-burger

How to implement advanced JEXL functions in Peaka

An overview of the advanced functions in JEXL

Unary Operators


OperationSymbol
Negate!

Example

The exclamation mark negates the boolean that appears next to it.

    {{!true}}

Binary Operators


OperationSymbol
Add, Concat+
Subtract-
Multiply*
Divide/
Divide and floor//
Modulus%
Power of^
Logical AND&&
Logical OR||

Comparisons


ComparisonSymbol
Equal==
Not equal!=
Greater than>
Greater than or equal>=
Less than<
Less than or equal<=
Element in array or stringin

A note about in

The in operator can be used to check for a substring: "Cad" in "Ron Cadillac", and it can be used to check for an array element: "coarse" in ['fine', 'medium', 'coarse']. However, the == operator is used behind-the-scenes to search arrays, so it should not be used with arrays of objects. The following expression returns false: {a: 'b'} in [{a: 'b'}].

Ternary operator

Conditional expressions are used to check if the first segment returns a correct value. If that’s the case, the value in the next segment is applied. Otherwise, the other value is applied. If the next segmeent is missing, the test result itself will be used instead.


ExpressionResult
"" ? "Full" : "Empty"Empty
"foo" in "foobar" ? "Yes" : "No"Yes
{agent: "Archer"}.agent ?: "Kane"Archer

Native Types


TypeExamples
Booleanstrue, false
Strings"Hello "user"", 'Hey there!'
Numerics6, -7.2, 5, -3.14159
Objects{hello: "world!"}
Arrays['hello', 'world!']

Groups


Parentheses work just how you'd expect them to:

ExpressionResult
(83 + 1) / 242
1 < 3 && (4 > 2 || 2 > 4)true

Identifiers

Access variables in the context object by just typing their name. Objects can be accessed with dot notation, or by using brackets to access a dynamic property name.

Example context:

{
  name: {
    first: "Malory",
    last: "Archer"
  },
  exes: [
    "Nikolai Jakov",
    "Len Trexler",
    "Burt Reynolds"
  ],
  lastEx: 2
}

ExpressionResult
name.firstMalory
name['la' + 'st']Archer
exes[2]Burt Reynolds
exes[lastEx - 1]Len Trexler

Functions

In JEXL, common built-in functions are readily available, but also functions library is extended with lodash functions.

You can use lodash functions from this link.

Additionally, you can check our functions from this article.

using advanced jexl

Example

Check out the JEXL codes below:

Find Min

    {{ min([65, 42, 87, 88]) }}

    // => 42

Reverse Array

    {{ reverse([1, 2, 3, 4]) }}

    // => [4, 3, 2, 1]

Check Equal

    {{ eq({ a:1 }, { a:1 }) }}
    // => true

    {{ eq(3, 4) }}
    // => false

Add Elements To Array

    {{ concat([1], 2, 3, 4) }}

    // => [1, 2, 3, 4]

Get Last Element of Array

    {{ reverse([1, 2, 3]) }}

    // => 3