<div align="center">

<img src=""
alt="envar rainbow logo">

A collection of functions for checking/getting/setting **environment variables** in **`Elixir`**.

<!-- Better LOGO #HelpWanted -->

![GitHub Workflow Status](
[![Dependencies: None](]( "Zero Dependencies")
[![contributions welcome](](

</div><br />

## Why?

We needed a way of checking that environment variables were defined
and improving the developer experience when they are not.

## What?

**`envar`** is our solution to a very specific problem:
the developer experience when a required environment variable is undefined.

<br />

## How?

### Installation

Install the package
by adding `envar` to your list of dependencies in your `mix.exs` file:

def deps do
    {:envar, "~> 1.1.0"}

## Usage

Load an `.env` file
containing a line-separated list of environment variables
on your `localhost`:


That will locate the `.env` file in your project
and set each environment variable in it.

If the `.env` _must_ exist e.g. in a `:test` context,


That will log an `Error` if the file does not exist (or can't be found):

09:10:54.103 [error] Required .env file does not exist at path: /Alex/awesome/project/.env

<br />

When you need to retrieve a specific environment variable,
use the following:


<br />

If you want to define a default/fallback value
for the environment variable when it's not set,
simply add it as the second argument:

DATABASE_URL = Envar.get("DATABASE_URL", "postgres://uname:pass@host:5432/dbname"")

<br />

If you need to check that a variable is set,
use `is_set?/1`

if Envar.is_set?("Heroku") do
  # do stuff on Heroku

To check if _any_ of the variables in a `List` are set,
invoke `Envar.is_set_any?/1`:

if Envar.is_set_any?(~w/HEROKU FLYIO/) do
  # Do something on non-prod environment

Conversely, to confirm that _all_ the environment variables
in a list are set, invoke `Envar.is_set_all?/1`:

if Envar.is_set_all?(~w/ADMIN_EMAIL AUTH_API_KEY/) do
  # Do something with the required environment variables

We needed a couple more convenience functions,
so we wrote them!

If you need to read an `.env` file and get the
keys & values as a `Map`, invoke ``:

  "ADMIN_EMAIL" => "",
  "EVERYTHING" => "awesome!",
  "SECRET" => "master plan"

If you need just the `keys`
of the list of environment variables in an `.env` file,
invoke: `Envar.keys/1`:

iex> Envar.keys(".env")

And if you need just the `values`
of the environment variables in an `.env` file,
invoke: `Envar.values/1`:

iex> Envar.values(".env")
["", "awesome!", "master plan"]

For more detail, please see docs:

<br /><br />

Happy `Elixir` Coding! 🚀

<br /><br />

## Context

We created this module after doing
a search of the `Elixir` (
ecosystem, <br />

There are several modules available,
we wanted something very basic/specific to our needs. <br />
We don't expect anyone else to use this;
it's Open Source
because that's just what we do: <br />