WPL.Enforce (WPL Validator v1.9.0)

Copy Markdown View Source

Pass-3 enforcement: evaluate personalization rules against a ClientContext and strip forbidden activities from a compiled WPL plan.

Ported from wpl-validator-ts/src/enforce/index.ts. Pure function, no process state. Maps are immutable in Elixir so "deep clone" is structural copy via Jason.decode!(Jason.encode!(plan_json)) for round-trip purity, matching the TS JSON.parse(JSON.stringify(...)) behavior.

Summary

Functions

Evaluate rules against ctx and strip forbidden activities from plan_json.

Types

client_context()

@type client_context() :: map()

enforce_opts()

@type enforce_opts() :: [{:plan_start_date, String.t()}]

enforcement_result()

@type enforcement_result() :: %{
  plan: map(),
  evaluated_rules: [map()],
  stripped: [map()],
  diagnostics: [map()]
}

rule()

@type rule() :: map()

Functions

enforce(plan_json, ctx, rules, opts \\ [])

@spec enforce(map(), client_context(), [rule()], enforce_opts()) ::
  enforcement_result()

Evaluate rules against ctx and strip forbidden activities from plan_json.

Returns %{plan, evaluated_rules, stripped, diagnostics}.

Options:

  • :plan_start_date — ISO date string of plan day 1 (required for cycle_day-conditioned rules).