MapSorter.SortSpecs (Map Sorter v0.2.46) View Source

Generates the AST of a compare function from a list of sort specs.

Link to this section Summary

Functions

Converts sort specs into the AST of a compare function (compile time or runtime).

Link to this section Types

Link to this section Functions

Specs

to_quoted(t() | Macro.t()) :: {:ok, Macro.t()} | {:error, t()}

Converts sort specs into the AST of a compare function (compile time or runtime).

Examples

iex> alias MapSorter.SortSpecs
iex> sort_specs = [:dob, desc: :likes]
iex> {:ok, comp_fun_ast} = SortSpecs.to_quoted(sort_specs)
iex> {:&, _meta, [args]} = comp_fun_ast
iex> Macro.to_string(args)
"""
cond do
  (&1)[:dob] < (&2)[:dob] ->
    true
  (&1)[:dob] > (&2)[:dob] ->
    false
  (&1)[:likes] > (&2)[:likes] ->
    true
  (&1)[:likes] < (&2)[:likes] ->
    false
  true ->
    true or &1 * &2
end
"""
|> String.trim_trailing()

iex> alias MapSorter.SortSpecs
iex> sort_specs = quote do: Tuple.to_list({:dob, {:desc, :likes}})
iex> {:ok, comp_fun_ast} = SortSpecs.to_quoted(sort_specs)
iex> {{:., _, _}, _meta, [args]} = comp_fun_ast
iex> Macro.to_string(args)
"Tuple.to_list({:dob, {:desc, :likes}})"