54 lines
1.4 KiB
Elixir
54 lines
1.4 KiB
Elixir
defmodule Plausible.ConfigHelpers do
|
|
def get_var_from_path_or_env(config_dir, var_name, default \\ nil) do
|
|
var_path = Path.join(config_dir, var_name)
|
|
|
|
if File.exists?(var_path) do
|
|
File.read!(var_path) |> String.trim()
|
|
else
|
|
System.get_env(var_name, default)
|
|
end
|
|
end
|
|
|
|
def get_int_from_path_or_env(config_dir, var_name, default \\ nil) do
|
|
var = get_var_from_path_or_env(config_dir, var_name)
|
|
|
|
case var do
|
|
nil ->
|
|
default
|
|
|
|
var ->
|
|
case Integer.parse(var) do
|
|
{int, ""} -> int
|
|
_ -> raise "Config variable #{var_name} must be an integer. Got #{var}"
|
|
end
|
|
end
|
|
end
|
|
|
|
def get_bool_from_path_or_env(config_dir, var_name, default \\ nil) do
|
|
case get_var_from_path_or_env(config_dir, var_name) do
|
|
nil -> default
|
|
var -> parse_bool(var)
|
|
end
|
|
end
|
|
|
|
@var_true ["1", "t", "true", "y", "yes", "on"]
|
|
@var_false ["0", "f", "false", "n", "no", "off"]
|
|
@var_bool_message Enum.zip_with(@var_true, @var_false, fn t, f -> [t, f] end)
|
|
|> List.flatten()
|
|
|> Enum.join(", ")
|
|
|
|
defp parse_bool(var) do
|
|
case String.downcase(var) do
|
|
t when t in @var_true ->
|
|
true
|
|
|
|
f when f in @var_false ->
|
|
false
|
|
|
|
_ ->
|
|
raise ArgumentError,
|
|
"Invalid boolean value: #{inspect(var)}. Expected one of: " <> @var_bool_message
|
|
end
|
|
end
|
|
end
|