require "English" module Dotenv module Substitutions # Substitute variables in a value. # # HOST=example.com # URL="https://$HOST" # module Variable class << self VARIABLE = / (\\)? # is it escaped with a backslash? (\$) # literal $ \{? # allow brace wrapping ([A-Z0-9_]+) # match the variable \}? # closing brace /xi def call(value, env) value.gsub(VARIABLE) do |variable| match = $LAST_MATCH_INFO if match[1] == '\\' variable[1..-1] else env.fetch(match[3]) { ENV[match[3]] } end end end end end end end