AuthManager.Tools.MapTools (auth_manager_core v0.1.1)

Utilidades para manipulación de mapas.

Summary

Functions

Filtra un mapa recursivamente, manteniendo solo las entradas que cumplen con la función de predicado.

Transforma los valores de un mapa recursivamente utilizando una función.

Fusiona dos mapas profundamente, combinando mapas anidados.

Aplana un mapa anidado en un mapa plano con claves compuestas.

Obtiene un valor de un mapa anidado utilizando una lista de claves o una ruta separada por puntos.

Convierte claves de string a átomos en un mapa, recursivamente.

Convierte claves de átomos a strings en un mapa, recursivamente.

Desaplana un mapa plano con claves compuestas en un mapa anidado.

Functions

deep_filter(map, predicate)

Filtra un mapa recursivamente, manteniendo solo las entradas que cumplen con la función de predicado.

Ejemplos

iex> MapTools.deep_filter(%{a: 1, b: %{c: 2, d: nil}}, fn {_k, v} -> not is_nil(v) end)
%{a: 1, b: %{c: 2}}

deep_map(map, fun)

Transforma los valores de un mapa recursivamente utilizando una función.

Ejemplos

iex> MapTools.deep_map(%{a: 1, b: %{c: 2}}, fn v -> v * 2 end)
%{a: 2, b: %{c: 4}}

deep_merge(left, right)

Fusiona dos mapas profundamente, combinando mapas anidados.

Ejemplos

iex> MapTools.deep_merge(%{a: 1, b: %{c: 2}}, %{b: %{d: 3}, e: 4})
%{a: 1, b: %{c: 2, d: 3}, e: 4}

flatten(map, prefix \\ "")

Aplana un mapa anidado en un mapa plano con claves compuestas.

Ejemplos

iex> MapTools.flatten(%{user: %{name: "Juan", address: %{city: "Madrid"}}})
%{"user.name" => "Juan", "user.address.city" => "Madrid"}

get_in_path(map, path)

Obtiene un valor de un mapa anidado utilizando una lista de claves o una ruta separada por puntos.

Ejemplos

iex> MapTools.get_in_path(%{user: %{name: "Juan"}}, [:user, :name])
"Juan"

iex> MapTools.get_in_path(%{user: %{name: "Juan"}}, "user.name")
"Juan"

keys_to_atoms(map)

Convierte claves de string a átomos en un mapa, recursivamente.

Ejemplos

iex> MapTools.keys_to_atoms(%{"name" => "Juan", "age" => 30})
%{name: "Juan", age: 30}

iex> MapTools.keys_to_atoms(%{"user" => %{"name" => "Juan", "age" => 30}})
%{user: %{name: "Juan", age: 30}}

keys_to_strings(map)

Convierte claves de átomos a strings en un mapa, recursivamente.

Ejemplos

iex> MapTools.keys_to_strings(%{name: "Juan", age: 30})
%{"name" => "Juan", "age" => 30}

iex> MapTools.keys_to_strings(%{user: %{name: "Juan", age: 30}})
%{"user" => %{"name" => "Juan", "age" => 30}}

unflatten(map)

Desaplana un mapa plano con claves compuestas en un mapa anidado.

Ejemplos

iex> MapTools.unflatten(%{"user.name" => "Juan", "user.address.city" => "Madrid"})
%{"user" => %{"name" => "Juan", "address" => %{"city" => "Madrid"}}}