0.0
No release in over 3 years
Low commit activity in last 3 years
Custom YAML tag for referring environment variables in YAML files
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 12.0
~> 3.6
~> 0.49.0
~> 0.14
 Project Readme

YAML !ENV Tag

CI Status Test Coverage Codacy Code quality Gem Version

A custom YAML tag for referring environment variables in YAML files. No need to use ERB in YAML just to set some keys from environment variables.

Sample YAML file using !ENV tag
oauth:
  base_uri: !ENV API_BASE_URI
  client_id: !ENV [API_CLIENT_ID, "demo"]
  client_secret: !ENV [API_CLIENT_SECRET, API_CLIENT_KEY, ~]

Usage

Just require yaml-env-tag and load YAML as you’re used to:

require 'yaml-env-tag'

yaml = YAML.safe_load('secret: !ENV API_CLIENT_SECRET', permitted_classes: [YamlEnvTag::EnvVariable])
yaml['secret']  # => "top-secret"

Note: Since Ruby 3.1, YAML.load is an alias for YAML.safe_load, which means you have to explicitly whitelist the YamlEnvTag::EnvVariable class (see keyword argument permitted_classes). Analogously, YAML.load_file became an alias for YAML.safe_load_file. Also keep in mind that the safe variant disables aliases (anchors); you can enable them by setting the aliases parameter to true (e.g. YAML.safe_load(…​, aliases: true)). For compatibility with older Ruby versions, it’s better to always use YAML.safe_load and YAML.safe_load_file.

Single Required Variable

Specify one environment variable as a !ENV tagged scalar. If it does not exist (is not set), YAML.load (and other load methods) will raise YamlEnvTag::MissingEnvVariableError.

!ENV SOME_VARIABLE

This can be also written as a tagged sequence !ENV [SOME_VARIABLE] or !ENV [SOME_VARIABLE, ~], all three variants are equivalent.

Default Value

You can define a default value that is used when the specified environment variable does not exist. This makes the variable optional. Default value is the last element of a !ENV tagged sequence (array) with more than one element.

!ENV [SOME_VARIABLE, "default value"]

Multiple Variables (Fallbacks)

You may also specify more environment variables in a !ENV tagged sequence (array) – the first one that does exist is used. Keep in mind that the last element of a multi-element sequence is always interpreted as a default value, not a name of environment variable!

!ENV [SOME_VARIABLE, LEGACY_VARIABLE, "default value"]

If you want to raise an exception when none of the specified environment variables exist, use ~ (nil) as the last element:

!ENV [SOME_VARIABLE, LEGACY_VARIABLE, ~]

License

This project is licensed under MIT License. For the full text of the license, see the LICENSE file.