Last active
January 23, 2018 10:15
-
-
Save Electron-libre/395ccaab556c4ce874fffe6deefd106c to your computer and use it in GitHub Desktop.
elixir_config_wrapper.ex
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
defmodule Gifnoc.Config do | |
@spec get(atom, atom, term | nil) :: term | |
def get(app, key, default \\ nil) when is_atom(app) and is_atom(key) do | |
case read_config(Application.get_env(app, key)) do | |
nil -> default | |
val -> val | |
end | |
end | |
def read_config({:system, var_name}), do: System.get_env(var_name) | |
def read_config({:system, var_name, default}) do | |
case System.get_env(var_name) do | |
nil -> default | |
val -> val | |
end | |
end | |
def read_config(list) when is_list(list) do | |
Enum.reduce(list, [], fn(e, acc) -> [ read_config(e) | acc] end) | |
end | |
def read_config({subconfig, val}) when is_atom(subconfig), do: {subconfig, read_config(val)} | |
def read_config(other), do: other | |
@spec get_cast(:integer, atom(), atom(), integer()) :: integer | |
def get_cast(:integer, app, key, default \\ nil) do | |
case get(app, key, default) do | |
val when is_integer(val) -> val | |
val -> with {i, ""} <- Integer.parse(val) | |
do | |
i | |
else | |
err -> raise ArgumentError, message: ~s""" | |
Error parsing Config value for #{app}, #{key} : | |
#{err} does not seem to be valid integer | |
""" | |
end | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment