NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky

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ľaPovolené operátory
string, textequals, in, empty, contains (rozlišuje veľkosť písmen; pridajte "case": "insensitive")
integer, decimalequals, in, gt, lt, between, empty
booleanequals, empty
date, datetimeequals, before, after, between, empty
enumequals, in, empty
partyequals (podľa kľúča alebo {"kind": "triggered_by"}), in, empty
listcontains, 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émKód
Neznáme poleunknown_field
Operátor nie je povolený pre typ poľaoperator_not_allowed
Literál nesprávneho typuinvalid_value
Nedeklarovaný input.*unknown_input
steps.<id>, ktorý nie je predchodcainvalid_reference
Hlbšia než conditions.max_depth (6) alebo viac než conditions.max_clauses (100) klauzúlcondition_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 kryptomien

Odoslaní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.