Packages
moar
1.25.0
5.0.0
4.3.0
4.2.0
4.1.0
4.0.0
3.2.0
3.1.0
3.0.0
2.7.0
2.6.0
2.5.0
2.4.2
2.4.1
2.4.0
2.3.0
2.2.0
2.1.0
2.0.1
2.0.0
1.64.0
1.63.1
1.63.0
1.62.0
1.61.2
1.61.1
1.61.0
1.60.0
1.59.2
1.59.1
1.59.0
1.58.0
1.57.0
1.56.2
1.56.1
1.56.0
1.55.0
1.54.0
1.53.0
1.52.1
1.52.0
1.51.0
1.50.0
1.49.0
1.48.0
1.47.0
1.46.0
1.45.1
1.45.0
1.44.0
1.43.0
1.42.0
1.41.0
1.40.0
1.39.0
1.38.0
1.37.0
1.36.0
1.35.0
1.34.0
1.33.0
1.32.0
1.31.0
1.30.0
1.29.0
1.28.0
1.27.0
1.26.0
1.25.0
1.24.1
1.24.0
1.23.0
1.22.0
1.21.0
1.20.0
1.19.3
1.19.2
1.19.1
1.19.0
1.18.1
1.18.0
1.17.0
1.16.0
1.15.0
1.14.0
1.13.1
1.13.0
1.12.0
1.11.0
1.10.0
1.9.0
1.8.0
1.7.0
1.6.0
1.5.0
1.4.0
1.3.0
1.2.0
1.1.0
1.0.0
0.1.0
A dependency-free utility library containing 100+ useful functions.
Current section
Files
Jump to
Current section
Files
lib/term.ex
defmodule Moar.Term do
# @related [test](/test/term_test.exs)
@moduledoc """
Blank/present functions for terms.
A term is considered present when it is not blank.
A term is considered blank when:
* it is `nil`
* it is `false`
* it is a string, and its length after being trimmed is 0
* it is an empty list
* it is an empty map
"""
@doc """
Returns true if the term is blank, nil, or empty.
```elixir
iex> Moar.Term.blank?(nil)
true
iex> Moar.Term.blank?(" ")
true
iex> Moar.Term.blank?([])
true
iex> Moar.Term.blank?(%{})
true
```
"""
@spec blank?(any()) :: boolean()
def blank?(nil), do: true
def blank?(s) when is_binary(s), do: s |> String.trim() |> String.length() == 0
def blank?([]), do: true
def blank?(list) when is_list(list), do: false
def blank?(m) when is_map(m), do: map_size(m) == 0
def blank?(true), do: false
def blank?(false), do: true
def blank?(_), do: false
@doc """
Returns true if the term is not blank, nil, or empty.
```elixir
iex> Moar.Term.present?(1)
true
iex> Moar.Term.present?([1])
true
iex> Moar.Term.present?(%{a: 1})
true
iex> Moar.Term.present?("1")
true
```
"""
@spec present?(any()) :: boolean()
def present?(term), do: !blank?(term)
@doc """
Returns the value if it is present (via `present?`), or else returns the default value.
```elixir
iex> Moar.Term.presence(20, 100)
20
iex> Moar.Term.presence(nil, 100)
100
```
"""
@spec presence(any(), any()) :: any()
def presence(term, default \\ nil), do: if(present?(term), do: term, else: default)
end