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
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
format_errors(errors)
validate_domain(domain)
Validates a domain configuration, returning {:ok, domain} or {:error, errors}.
Non-raising version of validate_domain!/1.
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