Selecto.Subfilter.Parser (Selecto v0.3.8)

Parse subfilter configurations into structured subfilter specs.

This module handles parsing relationship paths like "film.rating" or "film.category.name" and filter specifications like "R", ["R", "PG-13"], or {:count, ">", 5} into structured data that can be used by the SQL generation system.

examples

Examples

iex> Selecto.Subfilter.Parser.parse("film.rating", "R")
{:ok, %Selecto.Subfilter.Spec{...}}

iex> Selecto.Subfilter.Parser.parse("film", {:count, ">", 5})
{:ok, %Selecto.Subfilter.Spec{...}}

iex> Selecto.Subfilter.Parser.parse("film.category.name", "Action")
{:ok, %Selecto.Subfilter.Spec{...}}

Link to this section Summary

Functions

Parse subfilter into standardized configuration.

Parse compound subfilter operations (AND/OR).

Link to this section Functions

Link to this function

parse(relationship_path, filter_spec, opts \\ [])

@spec parse(String.t(), any(), keyword()) ::
  {:ok, Selecto.Subfilter.Spec.t()} | {:error, Selecto.Subfilter.Error.t()}

Parse subfilter into standardized configuration.

parameters

Parameters

  • relationship_path - String path like "film.rating" or "film.category.name"
  • filter_spec - Filter specification (value, tuple, list, etc.)
  • opts - Options including :strategy, :negate, etc.

examples

Examples

parse("film.rating", "R")
#=> {:ok, %Spec{relationship_path: %RelationshipPath{...}, ...}}

parse("film.rating", ["R", "PG-13"], strategy: :in)
#=> {:ok, %Spec{strategy: :in, ...}}

parse("film", {:count, ">", 5})
#=> {:ok, %Spec{filter_spec: %FilterSpec{type: :aggregation, ...}}}
Link to this function

parse_compound(compound_type, subfilter_specs, opts \\ [])

@spec parse_compound(:and | :or, [{String.t(), any()}], keyword()) ::
  {:ok, Selecto.Subfilter.CompoundSpec.t()}
  | {:error, Selecto.Subfilter.Error.t()}

Parse compound subfilter operations (AND/OR).

examples

Examples

parse_compound(:and, [
  {"film.rating", "R"},
  {"film.release_year", {">", 2000}}
])