Current section

Files

Jump to
server_utils lib parsers pagination pagination.ex
Raw

lib/parsers/pagination/pagination.ex

defmodule ServerUtils.Parsers.Pagination do
@moduledoc false
alias ServerUtils.Parsers.Params.ParamGetter
@doc """
Receives a key, a default value and a maximum value.
This function gets a non neg value from a map:
* If the value is not present or is not a valid integer, the default value is returned
* If the value is negative, the default value is returned
* If the value exceeds the maximum value, the maximum value is returned
* Otherwise, the value is returned
iex> #{__MODULE__}.get_non_neg_param_value_with_max_limit(%{}, "luke", 15, 10)
10
iex> #{__MODULE__}.get_non_neg_param_value_with_max_limit(%{}, "luke", 5, 10)
5
iex> #{__MODULE__}.get_non_neg_param_value_with_max_limit(%{"luke" => 23}, "luke", 5, 10)
5
iex> #{__MODULE__}.get_non_neg_param_value_with_max_limit(%{"luke" => 23}, "luke", 25, 10)
23
iex> #{__MODULE__}.get_non_neg_param_value_with_max_limit(%{luke: 23}, :luke, 25, 10)
23
"""
@spec get_non_neg_param_value_with_max_limit(
map(),
String.t(),
non_neg_integer,
non_neg_integer
) :: non_neg_integer
def get_non_neg_param_value_with_max_limit(params_map, param_key, max_value, default_value) do
case ParamGetter.get_integer_param(params_map, param_key, default_value) do
param_value when param_value > max_value ->
max_value
param_value when param_value <= 0 ->
default_value
param_value ->
param_value
end
end
end