diff options
| author | Nathan Perry <np@nathanperry.dev> | 2020-01-28 20:20:12 -0500 |
|---|---|---|
| committer | Nathan Perry <np@nathanperry.dev> | 2020-01-28 20:20:12 -0500 |
| commit | 33caa2ba29b771a1cc05e15a5f3fe0f4cfc2cdf5 (patch) | |
| tree | 07b0688baf65bebfe9edcc2afdaea3a61f7e2d2b | |
| parent | ebbe27625ba2594bd71f2b48f0f38d67ed805c02 (diff) | |
write config provider
| -rw-r--r-- | apps/thulani_bot/lib/thulani/bot/env_config_provider.ex | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/apps/thulani_bot/lib/thulani/bot/env_config_provider.ex b/apps/thulani_bot/lib/thulani/bot/env_config_provider.ex new file mode 100644 index 0000000..c8815e0 --- /dev/null +++ b/apps/thulani_bot/lib/thulani/bot/env_config_provider.ex @@ -0,0 +1,61 @@ +defmodule Thulani.Bot.EnvConfigProvider do + @behaviour Config.Provider + + @env_vars %{ + database_url: nil, + spreadsheet_id: nil, + sheets_api_key: nil, + steam_api_key: nil, + max_sheet_column: "zz", + default_hist: "5", + max_hist: "30" + } + + def init(prefix) do + "#{String.upcase(prefix)}_" + end + + def load(config, prefix) do + logger_config = + if System.get_env("#{prefix}DEBUG") do + %{ + logger: [level: :debug] + } + else + %{} + end + + result = + %{ + nostrum: [ + token: System.fetch_env!("#{prefix}TOKEN"), + shards: System.get_env("#{prefix}DISCORD_SHARDS", "1") |> Integer.parse() + ], + thulani_bot: thulani_env(prefix) + } + |> Map.merge(logger_config) + + IO.inspect(Config.Reader.merge(config, result)) + end + + defp thulani_env(prefix) do + @env_vars + |> Enum.map(fn {env_var, default} -> + canonical_env_var = + env_var + |> to_string + |> String.upcase() + |> (fn x -> prefix <> x end).() + + value = + canonical_env_var + |> System.get_env(default) + + if value == nil do + raise "required environment variable not found: #{canonical_env_var}" + end + + {env_var, value} + end) + end +end |
