module

YamlTidy

YamlTidy range un fichier YAML : trie les clés des mappings par ordre ALPHABÉTIQUE, RÉCURSIVEMENT À TOUS LES NIVEAUX (enfants, petits-enfants…), Y COMPRIS les clés À L'INTÉRIEUR d'un item de séquence qui est un mapping (ex. users: - name/groups → groups avant name). PRÉSERVE :

  • les commentaires AU-DESSUS d'une clé (déplacés avec elle au tri) ;
  • les commentaires INLINE ;
  • l'ORDRE des ÉLÉMENTS de séquence — seules les CLÉS sont triées. Optionnellement, épingle une 1ʳᵉ ligne de commentaire (header), idempotent.

Approche ligne-à-ligne : le YAML de la stdlib perd les commentaires, alors qu'ils portent souvent l'essentiel de l'info pour un humain. Hypothèse : indentation par espaces. Les scalaires MULTI-LIGNES (blocs |/> et chaînes entre apostrophes ou guillemets sur plusieurs lignes) sont recopiés TELS QUELS : leurs lignes sont du texte, jamais des clés à trier.

YamlTidy.tidy(File.read("conf.yml"))                 # tri seul
YamlTidy.tidy(content, header: "monserveur.example") # + `# monserveur.example` en tête

Constants

VERSION = {{ (((read_file("/tmp/tmp.NFKmGp/src/src/../shard.yml")) .lines .find(&.starts_with?("version:")) || "version: 0.0.0") .gsub(/^version:\s*/, "")) .chomp }}

Instance methods

multiline_scalar_kind(stripped : String) : Symbol | Char | Nil

Genre de scalaire multi-ligne OUVERT par la ligne : :block (valeur | ou >, indicateurs -/+/chiffre, commentaire possible), '\'' ou '"' (chaîne entre apostrophes/guillemets non refermée sur la ligne) ; nil sinon.

Source
multiline_scalar_start?(stripped : String) : Bool
Source
tidy(content : String, header : String | Nil = nil) : String
Source

Nested types