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}}
])