Why?
We found ourselves copy-pasting a few useful "helper" functions across our Elixir projects ... <br /> 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.3.0"}
]
endFunction 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