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 paroverwrite: false). Aucune clé ni valeur — pas de fuite de secret dans les journaux.WARNsi 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 pascdavant d'execle binaire, le .env est invisible).- Silencieux complet via
quiet: true(tests, chargements multiples).
Constants
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
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.