Skip to content

GrottoPress/envy.rb

Repository files navigation

Envy

Envy loads and sets environment variables from YAML. It supports all YAML data types, including arrays and hashes.

Envy uses the YAML key mapping of a value as the environment variable name. For example, the following YAML configuration...

---
app:
  database:
    host: localhost
    port: 4321
  server:
    hosts:
      - localhost
      - grottopress.localhost
    port: 8080
  webhooks:
    - url: "https://example.com"
      token: "a1b2c2"
    - url: "https://myapp.net"
      token: "d4e5f6"

...sets environment variables as follows:

ENV["APP_DATABASE_HOST"] = "localhost"
ENV["APP_DATABASE_PORT"] = "4321"

ENV["APP_SERVER_HOSTS_0"] = "localhost"
ENV["APP_SERVER_HOSTS_1"] = "grottopress.localhost"
ENV["APP_SERVER_PORT"] = "8080"

ENV["APP_WEBHOOKS_0_URL"] = "https://example.com"
ENV["APP_WEBHOOKS_0_TOKEN"] = "a1b2c2"
ENV["APP_WEBHOOKS_1_URL"] = "https://myapp.net"
ENV["APP_WEBHOOKS_1_TOKEN"] = "d4e5f6"

Envy loads environment variables only once per application life-cycle. This avoids the overhead of reading and parsing YAML files on every single request.

It sets file permission (0600 by default) for all config files.

Envy supports loading a file from a supplied list of files in decreasing order of priority; the first readable file is loaded.

Installation

Install the gem and add to the application's Gemfile by executing:

bundle add envy --git=https://github.com/GrottoPress/envy.rb

If bundler is not being used to manage dependencies, install the gem by executing:

# Clone repository
git clone https://github.com/GrottoPress/envy.rb.git ./envy

# Change to the envy directory
cd ./envy

# Build gem
gem build envy.gemspec -o envy.gem

# Install gem
gem install envy.gem

Usage

  • Load the first readable file from a supplied list of files. Optionally set files permissions. This does not overwrite existing environment variables:

    require "envy"
    
    Envy.from_file ".env.yml", ".env.dev.yml", perm: 0o400
  • Load the first readable file from a supplied list of files. Optionally set files permissions. This overwrites existing environment variables:

    require "envy"
    
    Envy.from_file! ".env.yml", ".env.dev.yml", perm: 0o400

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and the created tag, and push the .gem file to rubygems.org.

Contributing

  1. Fork it
  2. Switch to the master branch: git checkout master
  3. Create your feature branch: git checkout -b my-new-feature
  4. Make your changes, updating changelog and documentation as appropriate.
  5. Commit your changes: git commit
  6. Push to the branch: git push origin my-new-feature
  7. Submit a new Pull Request against the GrottoPress:master branch.