Podmienky
Podmienky sú deklaratívny JSON. Neexistuje žiadny výrazový jazyk, žiadny kód a žiadne regulárne výrazy od používateľov: pevný interpret prechádza spracovaný strom a číta len registrované polia.
{ "all": [ // all = AND, any = OR, not = negation; nest freely
{ "field": "subject.amount", "op": "gt", "value": "50000" },
{ "any": [
{ "field": "subject.department", "op": "in", "value": ["legal", "finance"] },
{ "field": "input.urgent", "op": "equals", "value": true } ] },
{ "field": "subject.due_on", "op": "before", "value": { "relative": "P7D" } }, // now + 7 days
{ "field": "owner.plan", "op": "equals", "value": { "ref": "trigger.plan" } }
] }- Ľavý operand: field — cesta k hodnote (subject.*, owner.*, input.*, trigger.*, steps.<id>.output.*).
- Pravý operand: literál, {"ref": path}, {"relative": duration} (len dátumy, relatívne k teraz) alebo [low, high] pre between.
- Operátory: equals, in, gt, lt, between (vrátane hraníc), empty, contains, before, after.
To isté v zostavovači grafu:
use RoundlyConsulting\Workflows\Graph\Build\{Ref, When};
When::all(
When::field('subject.amount')->gt('50000'),
When::any(
When::field('subject.department')->in(['legal', 'finance']),
When::field('input.urgent')->equals(true),
),
When::field('subject.title')->contains('laptop', insensitive: true),
When::not(When::field('subject.note')->isEmpty()),
When::field('owner.plan')->equals(Ref::trigger('plan')),
);Operátory podľa typu poľa
| Typ poľa | Povolené operátory |
|---|---|
| string, text | equals, in, empty, contains (rozlišuje veľkosť písmen; pridajte "case": "insensitive") |
| integer, decimal | equals, in, gt, lt, between, empty |
| boolean | equals, empty |
| date, datetime | equals, before, after, between, empty |
| enum | equals, in, empty |
| party | equals (podľa kľúča alebo {"kind": "triggered_by"}), in, empty |
| list | contains, empty |
Správanie
- null pri každom operátore okrem empty vyhodnotí ako nepravdu. empty platí pre null, "" aj [].
- Desatinné čísla sa porovnávajú ako presné reťazce (bez float): "50000", 50000 a "50000.00" sú rovnaké; exponenty sa odmietnu.
- Pole date sa porovnáva podľa kalendárneho dňa v časovom pásme verzie; before/after sú ostré. Obyčajný literál YYYY-MM-DD je dátum v tomto pásme. Dátum uložený o polnoci — stĺpec DATE, cast date v Laraveli, vstup spúšťača typu date — si zachová kalendárny deň, v ktorom bol uložený, bez ohľadu na časové pásmo verzie a aplikácie. Pole date s časom dňa je deň, na ktorý tento okamih pripadne v časovom pásme verzie; datetime sa porovnáva ako okamih.
- Pole party sa rovná modelu, jeho kľúču alebo používateľovi, ktorý beh spustil.
- Neregistrovaný atribút sa nikdy neprečíta, ani keď na modeli existuje.
Validácia pri publikovaní
| Problém | Kód |
|---|---|
| Neznáme pole | unknown_field |
| Operátor nie je povolený pre typ poľa | operator_not_allowed |
| Literál nesprávneho typu | invalid_value |
| Nedeklarovaný input.* | unknown_input |
| steps.<id>, ktorý nie je predchodca | invalid_reference |
| Hlbšia než conditions.max_depth (6) alebo viac než conditions.max_clauses (100) klauzúl | condition_too_complex |
Kde sa podmienky používajú
condition.when, branch.cases[].when, wait.condition, wait.where, for_each.where pri plánoch a condition spúšťača — filter vyhodnotený ešte pred vznikom inštancie; nepravda → žiadna inštancia, v EmitResult uvedená ako preskočená.
Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.