Packages
altworx_runbox
14.0.1
25.0.0
24.0.0
23.1.0
23.0.0
22.2.0
22.1.0
22.0.0
21.2.0
21.1.2
21.1.1
21.1.0
21.0.0
20.0.0
19.0.0
18.0.0
17.2.0
17.1.0
17.0.1
17.0.0
16.2.0
16.1.0
16.0.0
15.0.0
14.1.0
14.0.1
14.0.0
13.0.3
13.0.2
13.0.1
13.0.0
12.1.0
12.0.0
11.0.1
11.0.0
10.0.0
9.0.0
8.0.0
7.0.1
7.0.0
6.0.0
5.0.0
4.0.0
3.0.0
2.1.0
2.0.0
1.4.1
1.4.0
1.3.0
1.2.0
1.1.0
1.0.0
0.1.3
0.1.2
0.1.1
0.1.0
Runbox is a library for running Altworx scenarios.
Current section
Files
Jump to
Current section
Files
lib/runbox/utils/map.ex
defmodule Runbox.Utils.Map do
@moduledoc group: :utilities
@moduledoc """
A set of utility functions for Maps.
"""
@doc """
Follows the `path` in the (deep) map, defaulting to `default` if some of the
objects on the path is missing.
## Example
iex> object = %{"some" => %{"deep" => %{"object" => "data"}}}
...> Runbox.Utils.Map.get_path(object, ["some", "deep", "object"])
"data"
iex> Runbox.Utils.Map.get_path(object, ["non-existent"], "default")
"default"
"""
@spec get_path(map(), [binary() | atom()], any()) :: any()
def get_path(map, path, default \\ nil)
def get_path(map, [_ | _], default) when not is_map(map), do: default
def get_path(map, [el], default) do
Map.get(map, el, default)
end
def get_path(obj, [], default) do
obj || default
end
def get_path(map, [el | rest], default) do
get_path(Map.get(map, el, %{}), rest, default)
end
end