Useful (useful v0.4.0)
A Library of Useful
functions for building Elixir
Apps.
Link to this section Summary
Functions
atomize_map_keys/1
converts a Map
with different keys
to a map with just atom keys. Works recursively for nested maps.
Inspired by stackoverflow.com/questions/31990134
flatten_map/1
flattens a Map
of any depth/nesting for easier processing.
Deeply nested maps are denoted by "" (double underscore) e.g:
%{name: Alex, detail: %{age: 17}}
becomes `%{name: Alex, detailage: 17}`
this makes it easy to see what the data structure was before flattening.
Map keys are converted to Atom for simpler access and consistency.
Inspired by: https://stackoverflow.com/questions/39401947/flatten-nested-map
stringy_map/1
converts a Map
of any depth/nesting into a string.
Deeply nested maps are denoted by "__" (double underscore). See flatten_map/1
for more details.
stringify_tuple/1
stringifies a Tuple
with arbitrary values.
Handy when you want to print out a tuple during debugging.
Link to this section Functions
atomize_map_keys(map)
atomize_map_keys/1
converts a Map
with different keys
to a map with just atom keys. Works recursively for nested maps.
Inspired by stackoverflow.com/questions/31990134
Examples
iex> Useful.atomize_map_keys(%{"name" => "alex", id: 1})
%{id: 1, name: "alex"}
iex> Useful.atomize_map_keys(%{"name" => "alex", data: %{ "age" => 17}})
%{name: "alex", data: %{age: 17}}
flatten_map(map)
flatten_map/1
flattens a Map
of any depth/nesting for easier processing.
Deeply nested maps are denoted by "" (double underscore) e.g:
%{name: Alex, detail: %{age: 17}}
becomes `%{name: Alex, detailage: 17}`
this makes it easy to see what the data structure was before flattening.
Map keys are converted to Atom for simpler access and consistency.
Inspired by: https://stackoverflow.com/questions/39401947/flatten-nested-map
Examples
iex> map = %{name: "alex", data: %{age: 17, height: 185}}
iex> Useful.flatten_map(map)
%{data__age: 17, data__height: 185, name: "alex"}
stringify_map(map)
stringy_map/1
converts a Map
of any depth/nesting into a string.
Deeply nested maps are denoted by "__" (double underscore). See flatten_map/1
for more details.
Examples
iex> map = %{name: "alex", data: %{age: 17, height: 185}}
iex> Useful.stringify_map(map)
"data__age: 17, data__height: 185, name: alex"
stringify_tuple(arg)
stringify_tuple/1
stringifies a Tuple
with arbitrary values.
Handy when you want to print out a tuple during debugging.
Examples
iex> tuple = {:name, "alex"}
iex> Useful.stringify_tuple(tuple)
"name: alex"
typeof(x)
typeof/1
returns the type of a vairable.
Inspired by stackoverflow.com/questions/28377135/check-typeof-variable-in-elixir
Examples
iex> Useful.typeof(:atom)
"atom"
iex> bin = "hello"
iex> Useful.typeof(bin)
"binary"
iex> bitstr = <<1::3>>
iex> Useful.typeof(bitstr)
"bitstring"
iex> Useful.typeof(:true)
"boolean"
iex> pi = 3.14159
iex> Useful.typeof(pi)
"float"
iex> fun = fn (a, b) -> a + b end
iex> Useful.typeof(fun)
"function"
iex> Useful.typeof(&Useful.typeof/1)
"function"
iex> int = 42
iex> Useful.typeof(int)
"integer"
iex> list = [1,2,3,4]
iex> Useful.typeof(list)
"list"
iex> map = %{:foo => "bar", "hello" => :world}
iex> Useful.typeof(map)
"map"
iex> Useful.typeof(nil)
"nil"
iex> pid = spawn(fn -> 1 + 2 end)
iex> Useful.typeof(pid)
"pid"
iex> port = Port.open({:spawn, "cat"}, [:binary])
iex> Useful.typeof(port)
"port"
iex> ref = :erlang.make_ref
iex> Useful.typeof(ref)
"reference"
iex> tuple = {:name, "alex"}
iex> Useful.typeof(tuple)
"tuple"