Concepts
Conditions
Conditions have various use cases in Eventvisor projects, ranging from filtering events from being tracked to conditionally routing them to different destinations.
Anatomy of a condition#
A condition is based on the following properties:
- A source for original value (see sources page), which can be expressed via several different properties like:
sourceattributepayloadlookup
- An
operatorfor the comparison between the source and the value - A
valueto compare against
Operators#
These operators are supported as conditions:
| Operator | Type of attribute | Description |
|---|---|---|
exists | Attribute exists in context | |
notExists | Attribute does not exist | |
equals | any | Equals to |
notEquals | any | Not equals to |
greaterThan | integer, double | Greater than |
greaterThanOrEquals | integer, double | Greater than or equal to |
lessThan | integer, double | Less than |
lessThanOrEquals | integer, double | Less than or equal to |
contains | string | Contains string |
notContains | string | Does not contain string |
startsWith | string | Starts with string |
endsWith | string | Ends with string |
in | string | In array of strings |
notIn | string | Not in array of strings |
before | string, date | Date comparison |
after | string, date | Date comparison |
matches | string | Matches regex pattern |
notMatches | string | Does not match regex pattern |
semverEquals | string | Semver equals to |
semverNotEquals | string | Semver not equals to |
semverGreaterThan | string | Semver greater than |
semverGreaterThanOrEquals | string | Semver greater than or equals |
semverLessThan | string | Semver less than |
semverLessThanOrEquals | string | Semver less than or equals |
includes | array | Array includes value |
notIncludes | array | Array does not include value |
Several examples below showing how attribute source can be used with each of them. You can of course use other sources as well.
equals#
# ...conditions: - attribute: country operator: equals value: usnotEquals#
# ...conditions: - attribute: country operator: notEquals value: usgreaterThan#
# ...conditions: - attribute: age operator: greaterThan value: 21greaterThanOrEquals#
# ...conditions: - attribute: age operator: greaterThanOrEquals value: 18lessThan#
# ...conditions: - attribute: age operator: lessThan value: 65lessThanOrEquals#
# ...conditions: - attribute: age operator: lessThanOrEquals value: 64contains#
# ...conditions: - attribute: name operator: contains value: JohnnotContains#
# ...conditions: - attribute: name operator: notContains value: SmithstartsWith#
# ...conditions: - attribute: name operator: startsWith value: JohnendsWith#
# ...conditions: - attribute: name operator: endsWith value: Smithin#
# ...conditions: - attribute: country operator: in value: - be - nl - lunotIn#
# ...conditions: - attribute: country operator: notIn value: - fr - gb - debefore#
# ...conditions: - attribute: date operator: before value: 2023-12-25T00:00:00Zafter#
# ...conditions: - attribute: date operator: after value: 2023-12-25T00:00:00ZsemverEquals#
# ...conditions: - attribute: version operator: semverEquals value: 1.0.0semverNotEquals#
# ...conditions: - attribute: version operator: semverNotEquals value: 1.0.0semverGreaterThan#
# ...conditions: - attribute: version operator: semverGreaterThan value: 1.0.0semverGreaterThanOrEquals#
# ...conditions: - attribute: version operator: semverGreaterThanOrEquals value: 1.0.0semverLessThan#
# ...conditions: - attribute: version operator: semverLessThan value: 1.0.0semverLessThanOrEquals#
# ...conditions: - attribute: version operator: semverLessThanOrEquals value: 1.0.0exists#
# ...conditions: - attribute: country operator: existsnotExists#
# ...conditions: - attribute: country operator: notExistsincludes#
# ...conditions: - attribute: permissions operator: includes value: writenotIncludes#
# ...conditions: - attribute: permissions operator: notIncludes value: writematches#
# ...conditions: - attribute: email operator: matches value: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ # optional regex flags regexFlags: i # case-insensitivenotMatches#
# ...conditions: - attribute: email operator: notMatches value: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ # optional regex flags regexFlags: i # case-insensitiveAdvanced conditions#
Conditions can also be combined using and, or, and not operators.
and#
When using and, it means all the direct children conditions under it must match against provided context.
# ...conditions: and: - attribute: country operator: equals value: us - attribute: device operator: equals value: iPhoneBy default if and is not specified directly under conditions, it is implied.
or#
When using or, it means at least one of the direct children conditions under it must match against provided context.
# ...conditions: or: - attribute: country operator: equals value: us - attribute: country operator: equals value: canot#
# ...conditions: not: - attribute: country operator: equals value: usComplex#
and and or can be combined to create complex conditions:
# ...conditions: - and: - attribute: device operator: equals value: iPhone - or: - attribute: country operator: equals value: us - attribute: country operator: equals value: caYou can also nest and, or, and not operators:
# ...conditions: - not: - or: - attribute: country operator: equals value: us - attribute: country operator: equals value: ca
