設定ファイルから環境変数をセットするfigaroのコードリーディングをしました。バージョンは1.1.1です

まずRailtieのconfig.before_configurationのフックでFigaro.loadを呼び出します

Figaro.loadではFigaro::Application#loadを呼び出します

initializerファイルで Figaro.require_keys('hoge', ...)を呼び出すことで設定ファイルに含まれていないキーがあればエラーを返すようにできますが、パラメータのキーから::ENV.keysを引いてパラメータが残っていればエラーをraiseしています。

Figaro::Application#loadは設定ファイルを読み込んで各設定に応じて環境変数をセットします。

環境変数は指定のキー値とFIGARO_ENV_PREFIX + キー値にセットされます。ロード前に既に環境変数をセットしている場合はskip?がtrueを返し環境変数を上書きしません。またフィガロで設定した環境変数に関してはFIGARO_ENV_PREFIXの方にも環境変数がセットされているのでskip?がfalseを返して再ロードされます。また、設定キーと値がStringではないときはWARNINGを表示します。

eachはconfiguration.eachにブロックを渡します

configurationでYAMLファイルをパースして取得した設定ファイルからネストしている(=値がハッシュのもの。環境ごとの設定も含む)設定と、環境ごとの設定をマージします。このハッシュ値に対してeachで回して環境変数をセットしています。

figaro installのCLIの処理はThorを使っています。