aboutsummaryrefslogtreecommitdiff
path: root/config/load_from_dotenv.exs
diff options
context:
space:
mode:
authorNathan Perry <np@nathanperry.dev>2020-01-28 16:06:48 -0500
committerNathan Perry <np@nathanperry.dev>2020-01-28 16:06:48 -0500
commit5dadc47eb07be076a8b270458badb9d8cd7dfead (patch)
tree69918ab33ded1e98905ebdf99c6f88f373a7a396 /config/load_from_dotenv.exs
parentdde5eb52706a9ca8ee257a6cbd75e243582d0a86 (diff)
start elixir conversion
Diffstat (limited to 'config/load_from_dotenv.exs')
-rw-r--r--config/load_from_dotenv.exs36
1 files changed, 36 insertions, 0 deletions
diff --git a/config/load_from_dotenv.exs b/config/load_from_dotenv.exs
new file mode 100644
index 0000000..244e2bc
--- /dev/null
+++ b/config/load_from_dotenv.exs
@@ -0,0 +1,36 @@
+def load_dotenv!() do
+ {:ok, projroot} = __DIR__ |> get_projroot
+
+ contents =
+ case projroot |> Path.join(".env") |> File.read() do
+ {:error, :enoent} ->
+ Logger.warn("skipping dotenv file: doesn't exist")
+ ""
+
+ {:ok, contents} ->
+ contents
+ end
+
+ contents
+ |> String.split("\n")
+ |> Enum.map(&String.trim/1)
+ |> Enum.filter(fn x -> x != "" end)
+ |> Enum.map(fn x ->
+ result = String.split(x, "=")
+ {Enum.at(result, 0), Enum.at(result, 1)}
+ end)
+ |> System.put_env()
+end
+
+def get_projroot(base) do
+ result =
+ with {:ok, info} <- base |> Path.join(".thulani_root") |> File.stat(),
+ :regular <- info.type,
+ do: {:ok, base}
+
+ case result do
+ {:error, :enoent} -> get_projroot(base |> Path.join("..") |> Path.expand())
+ {:ok, "/"} -> {:error, "couldn't find .thulani_root"}
+ x -> x
+ end
+end