Why?
We found ourselves copy-pasting a few useful "helper" functions
across our Elixir projects ...
it wasn't
"DRY",
so we created this library.
What?
A library of useful functions that we need for building Elixir
Apps.
Who?
This library is for our use on our various Elixir
/ Phoenix
apps.
As with everything we do it's Open Source, Tested and Documented
so that anyone can benefit from it.
How?
Install
The package can be installed
by adding useful
to your list of dependencies in mix.exs
:
def deps do
[
{:useful, "~> 0.2.0"}
]
end
Function Reference
atomize_map_keys/1
Converts a Map
that has strings as keys (or mixed keys)
to have only atom keys. e.g:
# map that has different types of keys:
my_map = %{"name" => "Alex", id: 1}
Useful.atomize_map_keys(my_map)
%{name: Alex, id: 1}
Works recursively for deeply nested maps:
person = %{"name" => "Alex", id: 1, details: %{"age" => 17, height: 185}}
Useful.atomize_map_keys(person)
%{name: Alex, id: 1, details: %{age: 17, height: 185}}
flatten_map/1
Flatten a Map
of any depth/nesting:
iex> map = %{name: "alex", data: %{age: 17, height: 185}}
iex> Useful.flatten_map(map)
%{data__age: 17, data__height: 185, name: "alex"}
Note: flatten_map/1
converts all Map keys to Atom
as it's easier to work with atoms as keys
e.g: map.person__name
instead of map["person__name"]
.
We use the __
(double underscore)
as the delimiter for the keys of nested maps,
because if we attempt to use .
(period character)
we get an error:
iex(1)> :a.b
** (UndefinedFunctionError) function :a.b/0 is undefined (module :a is not available)
:a.b()
Docs
Detailed docs available at: https://hexdocs.pm/useful/Useful.html