Current section

Files

Jump to
funx lib predicate less_than_or_equal.ex
Raw

lib/predicate/less_than_or_equal.ex

defmodule Funx.Predicate.LessThanOrEqual do
@moduledoc """
Predicate that checks if a value is less than or equal to a reference value
using an `Ord` comparator.
Options
- `:value` (required)
The reference value to compare against.
- `:ord` (optional)
An ordering comparator. Defaults to `Funx.Ord.Protocol`.
## Examples
use Funx.Predicate
# Check if score is at most 100
pred do
check :score, {LessThanOrEqual, value: 100}
end
# With custom Ord comparator
pred do
check :date, {LessThanOrEqual, value: deadline, ord: Date.Ord}
end
"""
@behaviour Funx.Predicate.Dsl.Behaviour
alias Funx.Ord
@impl true
def pred(opts) do
reference = Keyword.fetch!(opts, :value)
ord = Keyword.get(opts, :ord, Ord.Protocol)
fn value ->
Ord.compare(value, reference, ord) in [:lt, :eq]
end
end
end