View Source Moar.Map (Moar v1.19.3)

Map-related functions.

Link to this section Summary

Functions

Converts key in map to an atom, optionally transforming the value with value_transformer.

Converts keys in map to atoms.

Converts keys to atoms, traversing through descendant lists and maps.

Deeply merges two enumerables into a single map.

Merges two enumerables into a single map.

Like rename_key/2 but raises if key is not in map

Like rename_key/3 but raises if key is not in map

Returns a copy of map with old_key_name changed to new_key_name.

Returns a copy of map with old_key_name changed to new_key_name.

Like rename_keys/2 but raises if any key in keys_map is not in map.

Returns a copy of map after changing key names supplied by keys_map.

Converts keys in map to strings.

Transforms values of map using transformer function.

Link to this section Functions

Link to this function

atomize_key!(map, key, value_fn \\ &Function.identity/1)

View Source
@spec atomize_key!(map(), binary() | atom(), (any() -> any()) | nil) :: map()

Like atomize_key/3 but raises if key is not in map.

Link to this function

atomize_key(map, key, value_transformer \\ &Function.identity/1)

View Source
@spec atomize_key(map(), binary() | atom(), (any() -> any()) | nil) :: map()

Converts key in map to an atom, optionally transforming the value with value_transformer.

Raises if key is a string and map already has an atomized version of that key.

iex> Moar.Map.atomize_key(%{"number-one" => "one", "number-two" => "two"}, "number-one")
%{:number_one => "one", "number-two" => "two"}

iex> Moar.Map.atomize_key(%{"number-one" => "one", "number-two" => "two"}, "number-one", &String.upcase/1)
%{:number_one => "ONE", "number-two" => "two"}
@spec atomize_keys(map()) :: map()

Converts keys in map to atoms.

Raises if converting a key from a string to an atom would result in a key conflict.

iex> Moar.Map.atomize_keys(%{"a" => 1, "b" => 2})
%{a: 1, b: 2}
@spec deep_atomize_keys(list() | map()) :: map()

Converts keys to atoms, traversing through descendant lists and maps.

Raises if converting a key from a string to an atom would result in a key conflict.

iex> Moar.Map.deep_atomize_keys(%{"a" => %{"aa" => 1}, "b" => [%{"bb" => 2}, %{"bbb" => 3}]})
%{a: %{aa: 1}, b: [%{bb: 2}, %{bbb: 3}]}
@spec deep_merge(Enum.t(), Enum.t()) :: map()

Deeply merges two enumerables into a single map.

iex> Moar.Map.deep_merge(%{fruit: %{apples: 3, bananas: 5}, veggies: %{carrots: 10}}, [fruit: [cherries: 20]])
%{fruit: %{apples: 3, bananas: 5, cherries: 20}, veggies: %{carrots: 10}}
@spec merge(Enum.t(), Enum.t()) :: map()

Merges two enumerables into a single map.

iex> Moar.Map.merge(%{a: 1}, [b: 2])
%{a: 1, b: 2}
Link to this function

rename_key!(map, old_and_new_key)

View Source
@spec rename_key!(
  map(),
  {binary(), binary()}
) :: map()

Like rename_key/2 but raises if key is not in map

Link to this function

rename_key!(map, old_key_name, new_key_name)

View Source
@spec rename_key!(map(), binary() | atom(), binary() | atom()) :: map()

Like rename_key/3 but raises if key is not in map

Link to this function

rename_key(map, old_and_new_key)

View Source
@spec rename_key(
  map(),
  {binary(), binary()}
) :: map()

Returns a copy of map with old_key_name changed to new_key_name.

old_key_name and new_key_name are passed in as a {old_key_name, new_key_name} tuple.

iex> %{"color" => "red", "size" => "medium"} |> Moar.Map.rename_key({"color", "colour"})
%{"colour" => "red", "size" => "medium"}
Link to this function

rename_key(map, old_key_name, new_key_name)

View Source
@spec rename_key(map(), binary() | atom(), binary() | atom()) :: map()

Returns a copy of map with old_key_name changed to new_key_name.

iex> %{"color" => "red", "size" => "medium"} |> Moar.Map.rename_key("color", "colour")
%{"colour" => "red", "size" => "medium"}
Link to this function

rename_keys!(map, keys_map)

View Source
@spec rename_keys!(map(), map()) :: map()

Like rename_keys/2 but raises if any key in keys_map is not in map.

Link to this function

rename_keys(map, keys_map)

View Source
@spec rename_keys(map(), map()) :: map()

Returns a copy of map after changing key names supplied by keys_map.

%{"behavior" => "chill", "color" => "red"} |> Moar.Map.rename_keys(%{"behavior" => "behaviour", "color" => "colour"})
%{"behaviour" => "chill", "colour" => "red"}
@spec stringify_keys(map()) :: map()

Converts keys in map to strings.

iex> Moar.Map.stringify_keys(%{a: 1, b: 2} )
%{"a" => 1, "b" => 2}
Link to this function

transform(map, keys, transformer)

View Source
@spec transform(map(), atom() | binary() | list(), (any() -> any())) :: map()

Transforms values of map using transformer function.

iex> %{"foo" => "chicken", "bar" => "cow", "baz" => "pig"} |> Moar.Map.transform("foo", &String.upcase/1)
%{"foo" => "CHICKEN", "bar" => "cow", "baz" => "pig"}

iex> %{"foo" => "chicken", "bar" => "cow", "baz" => "pig"} |> Moar.Map.transform(["foo", "bar"], &String.upcase/1)
%{"foo" => "CHICKEN", "bar" => "COW", "baz" => "pig"}