Packages
enux
0.9.0
1.6.0
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.4.2
1.4.1
1.4.0
1.3.3
1.3.2
1.3.1
1.3.0
1.2.5
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.3
1.1.2
1.1.1
1.1.0
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.9.19
0.9.18
0.9.17
0.9.16
0.9.15
0.9.14
0.9.13
0.9.12
0.9.11
0.9.10
0.9.9
0.9.8
0.9.7
0.9.6
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.1
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
utility package for loading, validating and documenting your app's configuration variables from env, json, jsonc and toml files at runtime and injecting them into your environment
Current section
Files
Jump to
Current section
Files
lib/json.ex
defmodule Enux.Json do
@moduledoc """
handles json files
"""
import Enux.Utils
@doc """
decodes the json passed to it by `Enux.load` and format it into a keyword list
"""
def decode(content, opts) do
decode = get_decoder()
decode.(content) |> map_to_keyword_list(opts)
end
defp get_decoder do
cond do
is_list(Application.spec(:jason)) ->
&Jason.decode!/1
is_list(Application.spec(:poison)) ->
&Poison.decode!/1
true ->
throw("No json decoder found")
end
end
defp map_to_keyword_list(map, opts) when is_map(map) do
map
|> Enum.map(fn {k, v} ->
case {k, v} do
{k, v} when is_map(v) ->
{k |> handle_number() |> String.to_atom(), map_to_keyword_list(v, opts)}
{k, v} ->
{k |> handle_number() |> String.to_atom(), v |> url_encode_conditional(opts)}
end
end)
|> Keyword.new()
end
end