presence v0.8.0 Presence protocol
The Presence protocol is responsible for
checking the presence of a value.
The functions required to be implemented are
is_blank/1, is_present/1 and presence/1.
The functions are not automatically imported
by Kernel.
Currently, these modules implements Presence protocol.
Summary
Functions
A value is blank if it’s false, empty, or a whitespace string
A value is present if it’s not blank
Returns the value if it’s present otherwise returns nil
Types
Functions
A value is blank if it’s false, empty, or a whitespace string.
For example
false''' 'nil[]%{}{}
are all blank.
This simplifies
!address || Enum.empty?(address)
to
is_blank(address)
Examples
Atom
nil is blank:
iex> is_blank(nil)
true
false is blank:
iex> is_blank(false)
true
:false atom is blank:
iex> is_blank(:false)
true
List
[] is blank:
iex> is_blank([])
true
' ' is blank:
iex> is_blank(' ')
true
Map
%{} is blank:
iex> is_blank(%{})
true
String
A string is blank if it’s empty or contains whitespaces only:
iex> is_blank("")
true
iex> is_blank(" ")
true
iex> is_blank("\t\n\r")
true
iex> is_blank(" blah ")
false
Unicode whitespace is supported:
iex> is_blank("\u00a0")
true
Tuple
{} is blank:
iex> is_blank({})
true
Returns the value if it’s present otherwise returns nil.
presence(value)
is equivalent to
is_present(value) ? value : nil
For example, something like
if is_present(state), do: state = state
if is_present(country), do: country = country
region = state || country || 'US'
becomes
region = state.presence || country.presence || 'US'