YAML !ENV Tag
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.
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_VARIABLEThis 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.