Git Product home page Git Product logo

envar's Introduction

envar rainbow logo

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

GitHub Workflow Status codecov.io Hex.pm Dependencies: None contributions welcome HitCount


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.


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"}
  ]
end

Usage

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

Envar.load(".env")

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, invoke:

Envar.require_env_file(".env")

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

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

DATABASE_URL = Envar.get("DATABASE_URL")

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"")

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

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

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
end

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
end

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 Envar.read/1:

iex> Envar.read(".env")
%{
  "ADMIN_EMAIL" => "[email protected]",
  "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")
["ADMIN_EMAIL", "EVERYTHING", "SECRET"]

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

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

For more detail, please see docs: https://hexdocs.pm/envar/Envar.html#functions



Happy Elixir Coding! ๐Ÿš€



Context

We created this module after doing a search of the Elixir (Hex.pm) ecosystem,
see: dwyl/learn-environment-variables/issues/18

There are several modules available, we wanted something very basic/specific to our needs.
We don't expect anyone else to use this; it's Open Source because that's just what we do:
/manifesto.md#open-source-always

envar's People

Contributors

nelsonic avatar dependabot[bot] avatar simonlab avatar tomkra avatar vans163 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.