Colle du Ruby à gauche et clique sur "Convertir" — on le transforme en XMLColle du code Ruby

Ce que fait cet outil

Si tu as déjà dû bricoler à la main un payload XML pour qu'il colle à une classe Ruby — peut-être pour un fixture Rails to_xml, un vieux appel SOAP, ou un template Nokogiri Builder — tu sais à quel point le boilerplate s'accumule. Colle le Ruby ici et l'outil te rend du XML bien formé en une passe. Une classe avec attr_accessor, un Struct.new, un fichier de modèles entier ou des objets imbriqués en profondeur — même résultat : un document XML complet avec chaque champ préservé.

Ce n'est pas juste du remplacement de chaînes. Le convertisseur comprend comment les valeurs Ruby se sérialisent vraiment : BigDecimal("49.99") ressort en chaîne numérique simple (pas de notation scientifique), Time et DateTime sont rendus en chaînes ISO-8601, les Symbol perdent le deux-points de tête, nil devient un élément vide au lieu d'être supprimé, et les arrays deviennent des éléments conteneurs avec un enfant par entrée — exactement ce que produisent Nokogiri::XML::Builder et le to_xml de Rails.

La structure des classes est aussi respectée. Chaque classe de premier niveau devient un élément racine nommé d'après la classe (en snake_case), les symboles attr_accessor deviennent des éléments enfants, les objets imbriqués sont dépliés inline, et les arrays de OrderItem se transforment en un wrapper <items> avec un enfant <order_item> par entrée. Les hashes donnent des éléments enfants clé/valeur. Les attributs hérités passent aussi. Si tu colles un modèle Rails ou un simple PORO, le résultat ressemble à ce que render xml: ou REXML::Document.new (voir REXML) te donneraient, sans le cérémonial.

Comment l'utiliser

Trois étapes. Même flux que tu colles un seul Struct ou un dossier lib entier.

1

Colle ton Ruby (ou teste l'exemple)

Balance ton Ruby tel quel dans l'éditeur de gauche. Une classe attr_accessor, un raccourci Struct.new, plusieurs classes, ou une instance remplie — tout passe. Clique sur Charger un exemple pour voir d'abord un cas Order réaliste.

Pas besoin de retirer les require, de virer les modules ou de simplifier la syntaxe. Garde le code tel qu'il est dans ton éditeur. Colle-le, c'est tout.

2

Appuie sur Convertir

Clique sur le bouton vert Convertir. L'outil lit le Ruby, garde chaque classe et chaque attribut, et construit le XML en une passe. Un petit scintillement apparaît pendant le traitement.

3

Copie le XML

Le panneau de droite se remplit d'un XML indenté et bien formé qu'accepte n'importe quel parseur conforme. Glisse-le dans une requête SOAP, un fichier fixture RSpec, un test d'intégration Rails ou la doc de ton API.

Quand ça rend vraiment service

Construire des fixtures Nokogiri ou Builder

Tu as une classe Ruby et il te faut un template XML pour Nokogiri::XML::Builder ou un template ERB. Colle la classe, prends le XML, colle-le dans ton bloc Builder — fini.

Données seed Rails to_xml

Un modèle ActiveRecord ou un PORO avec 20 attributs devient un fichier seed XML prêt à éditer pour tes tests d'intégration ou un système externe qui consomme encore du XML.

Intégrations SOAP héritées

Un client Ruby qui discute avec un vieux service SOAP/XML-RPC a besoin d'un body de requête qui colle à une classe Ruby. Colle le modèle, récupère la forme de l'enveloppe XML, arrête de te battre avec les templates <a href="https://www.ruby-doc.org/" target="_blank" rel="noopener">Savon</a>.

Garder la doc et le code alignés

Génère des exemples de réponse XML pour un README, une référence API ou une doc adossée à un XSD directement depuis les vrais modèles Ruby, pour que la doc ne dérive jamais du code.

Questions fréquentes

Je peux coller plusieurs classes d'un coup ?

Oui — colle un fichier lib entier. Chaque classe de premier niveau est sortie avec les classes imbriquées dépliées et les attributs de la superclasse intégrés. Les mixins sont traités comme apportant leurs attr_accessor. Rien n'est perdu en silence.

Le raccourci Struct.new fonctionne ?

Oui. Order = Struct.new(:order_id, :customer_name, :total_amount) est traité comme une classe avec les attr_accessor équivalents. Les structs à keywords (Struct.new(:a, keyword_init: true)) marchent aussi — le XML résultant est identique des deux côtés.

Comment sont gérés BigDecimal, Time, Symbol et nil ?

BigDecimal("49.99") devient la chaîne simple 49.99 (pas de notation scientifique, pas de marqueur bd en queue). Time, DateTime et Date sont rendus en chaînes ISO-8601. Les Symbol perdent le deux-points et deviennent du texte brut. nil devient un élément vide (<field/>) plutôt que d'être supprimé, pour que la forme XML reste cohérente.

Et les arrays, hashes et objets imbriqués ?

Les arrays deviennent des éléments conteneurs — items = [OrderItem.new, OrderItem.new] devient <items><order_item/><order_item/></items>, un enfant par entrée, nommé d'après la classe de l'élément. Les hashes deviennent des paires <entry><key/><value/></entry>. Les objets imbriqués sont dépliés inline en tant qu'éléments enfants, comme le fait le to_xml de Rails.

Mon code est-il stocké ?

Ton code est envoyé au backend pour la conversion et n'est pas conservé — on ne logge pas le payload. Comme toujours avec les outils en ligne, si le Ruby contient des littéraux vraiment sensibles (clés d'API, PII clients), nettoie-les avant de coller.

Et si le code utilise de la métaprogrammation ou define_method ?

Tout ce qui n'existe qu'à l'exécution (méthodes ajoutées via define_method, attributs posés par method_missing, modules mixés avec des attributs calculés) ne peut pas être déduit du code statique seul. L'outil lit les attr_accessor, attr_reader, champs Struct et assignations explicites déclarés. Si un champ n'apparaît que par métaprogrammation, liste-le en attr_accessor pour que le convertisseur le voie.

D'autres outils qui peuvent servir

Ruby vers XML n'est qu'une pièce du puzzle. Ceux-ci vont bien avec :