Selecto.DomainValidator (Selecto v0.3.16)

Domain validation for Selecto configurations.

Validates domain configuration to catch errors early and prevent runtime failures. Checks for join dependency cycles, missing references, required keys for advanced join types, and other structural integrity issues.

usage

Usage

# Validate during configure (enabled by default)
domain = %{source: ..., schemas: ..., joins: ...}
selecto = Selecto.configure(domain, postgrex_opts)

# Disable validation for performance-critical scenarios
selecto = Selecto.configure(domain, postgrex_opts, validate: false)

# Or validate explicitly
Selecto.DomainValidator.validate_domain!(domain)
{:ok, _} = Selecto.DomainValidator.validate_domain(domain)

compile-time-validation

Compile-time Validation

# Validate domain at compile time (recommended for static configurations)
defmodule MyDomain do
  use Selecto.DomainValidator, domain: %{
    source: %{...},
    schemas: %{...},
    joins: %{...}
  }
end

Link to this section Summary

Functions

Compile-time domain validation macro.

Validates a domain configuration, returning {:ok, domain} or {:error, errors}.

Validates a domain configuration, raising on validation errors.

Link to this section Functions

Link to this macro

__using__(opts)

(macro)

Compile-time domain validation macro.

When used in a module, validates the provided domain configuration at compile time. This catches domain configuration errors early and provides better error messages.

options

Options

  • :domain - The domain configuration to validate (required)

example

Example

defmodule MyApp.UserDomain do
  use Selecto.DomainValidator, domain: %{
    source: %{
      source_table: "users",
      primary_key: :id,
      fields: [:id, :name, :email],
      columns: %{
        id: %{type: :integer},
        name: %{type: :string},
        email: %{type: :string}
      }
    },
    schemas: %{}
  }

  def domain, do: @validated_domain
end
Link to this function

format_errors(errors)

Link to this function

validate_domain(domain)

Validates a domain configuration, returning {:ok, domain} or {:error, errors}.

Non-raising version of validate_domain!/1.

Link to this function

validate_domain!(domain)

@spec validate_domain!(Selecto.Types.domain()) :: :ok

Validates a domain configuration, raising on validation errors.

validations-performed

Validations Performed

  • Join dependency cycle detection
  • Association existence validation
  • Schema reference validation
  • Column/field existence validation
  • Advanced join type required key validation
  • Custom column/filter reference validation

examples

Examples

iex> domain = %{source: valid_source, schemas: valid_schemas, joins: valid_joins}
iex> Selecto.DomainValidator.validate_domain!(domain)
:ok

iex> domain = %{source: valid_source, schemas: valid_schemas, joins: cyclic_joins}
iex> Selecto.DomainValidator.validate_domain!(domain)
** (Selecto.DomainValidator.ValidationError) Join dependency cycle detected: a -> b -> c -> a