Matcha.Spec (Matcha v0.1.3) View Source
About specs.
Link to this section Summary
Link to this section Types
Specs
t() :: %Matcha.Spec{ compiled: Matcha.Source.compiled() | nil, context: Matcha.Context.t(), node: Node.t() | nil, source: Matcha.Source.spec() }
Link to this section Functions
Specs
filter_map(t(), Enumerable.t()) :: list()
Uses a spec
to filter out and manipulate elements of an enumerable
.
Elements of the enumerable
that match one of the spec
's clauses
will transformed as instructed. Elements that do not match
will be filtered out of the result.
Always returns a list.
Examples
iex> require Matcha
...> spec = Matcha.spec do
...> {amount, tax} when is_integer(amount) and amount > 0 -> {:credit, amount + tax}
...> end
...> Matcha.Spec.filter_map(spec, [
...> {9001, 0},
...> {-200, -2.50},
...> {-3, -0.5},
...> {:error, "bank was offline"},
...> {100, 0},
...> {-743, -16.0},
...> ])
[credit: 9001, credit: 100]
Note
This function converts the enumerable
to a list,
which will trigger full enumeration of things like lazy Stream
s.
If used with an infinite stream, it will run forever!
Consider using stream/2
if you need lazy filter/mapping.
It isn't as efficient, but plays nicer with infinite streams,
and fits into the Stream
APIs.
Specs
run(t(), Matcha.Source.test_target()) :: {:ok, Matcha.Source.test_result()} | {:error, Matcha.Error.problems()}
Specs
run!(t(), Matcha.Source.test_target()) :: Matcha.Source.test_result() | no_return()
Specs
stream(t(), Enumerable.t()) :: Enumerable.t()
Produces a Stream
that filters out and manipulates elements of an enumerable
.
Elements of the enumerable
that match one of the spec
's clauses
will transformed as instructed.
Elements that do not match will be filtered out of the result.
Always returns a lazy Stream
enumerable.
Examples
iex> require Matcha
...> spec = Matcha.spec do
...> {amount, tax} when is_integer(amount) and amount < 0 -> {:charge, amount + tax}
...> end
...> Matcha.Spec.stream(spec, [
...> {9001, 0},
...> {-200, -2.50},
...> {-3, -0.5},
...> {:error, "bank was offline"},
...> {100, 0},
...> {-743, -16.0},
...> ])
...> |> Stream.take(2)
...> |> Enum.to_list
[charge: -202.5, charge: -3.5]
Note
This function wraps the enumerable
in a lazy Stream
.
If the enumerable
is something you can safely convert
to a list without going on forever or loading too much into memory,
consider using filter_map/2
instead, as it is much more efficient.
Specs
Specs
validate(t()) :: {:ok, t()} | {:error, Matcha.Error.problems()}