module

LoadEnv

Chargeur .env minimaliste, Crystal pur, zéro dépendance externe.

Parse les formats usuels KEY=VALUE, KEY="...", KEY='...', export KEY=..., ignore les lignes vides et les commentaires (#). Pose les variables dans ENV sans écraser par défaut (les variables déjà définies dans le shell ou en CLI restent prioritaires).

Usage typique au démarrage d'un CLI :

require "load-env"
LoadEnv.load              # charge `.env` dans le cwd
LoadEnv.load(".env.prod") # autre chemin
LoadEnv.load(overwrite: true)
LoadEnv.load(quiet: true) # n'émet aucun log

Les valeurs entre guillemets conservent leurs espaces internes ; les séquences \n, \r, \t, \\, \" sont déséchappées dans les chaînes à guillemets doubles (bash-like). Les guillemets simples sont littéraux. Un commentaire de fin de ligne (précédé d'un espace) est retiré sur les valeurs non quotées (FOO=bar # note).

Logging :

  • INFO à chaque chargement réussi : chemin résolu (absolu), nombre de variables posées, nombre laissées de côté (déjà présentes dans ENV ou skippées par overwrite: false). Aucune clé ni valeur — pas de fuite de secret dans les journaux.
  • WARN si le chemin demandé n'existe pas — pratique pour repérer un mauvais cwd ou un .env oublié (cas vécu : un wrapper rc.d qui ne fait pas cd avant d'exec le binaire, le .env est invisible).
  • Silencieux complet via quiet: true (tests, chargements multiples).

Constants

Log = ::Log.for(self)
VERSION = {{ (((read_file("/tmp/tmp.OGfcmL/src/src/load-env/../../shard.yml")) .lines .find(&.starts_with?("version:")) || "version: 0.0.0") .gsub(/^version:\s*/, "")) .chomp }}

Lue au compile-time depuis shard.yml via le macro read_file. Cf. note mémoire feedback_shard_version_macro.md (mémoire ALOLI).

Class methods

load(path : String = ".env", overwrite : Bool = false, quiet : Bool = false) : Int32

Charge un fichier .env dans ENV.

overwrite: false (défaut) : n'écrase pas les variables déjà présentes dans ENV. Convention : ce qui est explicitement exporté avant d'invoquer le programme l'emporte sur le fichier.

quiet: false (défaut) : émet une ligne INFO au succès, WARN si fichier absent. Aucune clé ni valeur n'est loggée.

Retourne le nombre de variables effectivement posées.

Source
parse(content : String) : Hash(String, String)

Parse un contenu .env en Hash(String, String). Utile pour les tests et pour accéder aux variables sans toucher ENV.

Source