Current section
Files
Jump to
Current section
Files
lib/integer_helper/integer_helper.ex
defmodule ElixirTools.IntegerHelper do
@moduledoc """
Helper module for dealing with Integers
"""
require Logger
@doc """
Ensures a value is an integer. If it is not, it tries to make it an integer. If it is not
parsable, it returns the given default with a warning
"""
@typep ensure_integer_opt :: {:telemetry, module}
@spec ensure_integer(String.t(), any, integer, [ensure_integer_opt]) :: integer | no_return()
def ensure_integer(key, value, default, opts \\ [])
def ensure_integer(_, integer, _, _) when is_integer(integer), do: integer
def ensure_integer(_, string, _, _) when is_binary(string), do: String.to_integer(string)
def ensure_integer(parameter_name, value, default, opts) when is_integer(default) do
telemetry_module = opts[:telemetry_module] || :telemetry
telemetry_module.execute(
[:pagantis_elixir_tools, :ensure_integer, :not_valid],
%{
error_info:
"#{inspect(value)} is not valid for #{parameter_name}. Using default #{default}"
}
)
Logger.warn(fn ->
"#{inspect(value)} is not valid for #{parameter_name}. Using default #{default}"
end)
default
end
def ensure_integer(_, _, default, _) do
raise "Default has to be an integer. Given: #{inspect(default)}"
end
end