Ruby-naar-XML converter
Plak Ruby-classes of -objects. Krijg schone XML terug.
Wat deze tool doet
Als je ooit een XML-payload handmatig in elkaar hebt moeten zetten om te matchen met een Ruby-class — misschien voor een Rails to_xml-fixture, een oude SOAP-call of een Nokogiri Builder-template — dan weet je hoe snel het boilerplate zich opstapelt. Plak hier Ruby en de tool geeft je in één pass keurig XML terug. Eén attr_accessor-class, een Struct.new, een compleet modellenbestand of diep geneste objecten — zelfde resultaat: een compleet XML-document met elk veld behouden.
Het is niet zomaar string-vervanging. De converter begrijpt hoe Ruby-waarden echt serialiseren: BigDecimal("49.99") komt eruit als een gewone numerieke string (geen wetenschappelijke notatie), Time en DateTime worden gerenderd als ISO-8601-strings, Symbol-waarden verliezen de leidende dubbele punt, nil wordt een leeg element in plaats van te verdwijnen, en arrays worden container-elementen met één kind per item — precies wat Nokogiri::XML::Builder en Rails to_xml doorgaans produceren.
Classe-structuur wordt ook gerespecteerd. Elke top-level class wordt een root-element vernoemd naar de class (in snake_case), attr_accessor-symbolen worden kind-elementen, geneste objecten worden inline uitgeklapt, en arrays van OrderItem worden een <items>-wrapper met één <order_item>-kind per item. Hashes worden key/value-kindelementen. Overgeërfde attributen komen ook mee. Als je een Rails-model of een gewoon PORO plakt, ziet het resultaat eruit zoals render xml: of REXML::Document.new (zie REXML) het je zouden geven — zonder alle ceremonie.
Hoe je het gebruikt
Drie stappen. Zelfde flow of je nu één Struct plakt of een hele lib-folder.
Plak je Ruby (of probeer het voorbeeld)
Gooi je Ruby gewoon in de linker editor. Een attr_accessor-class, een Struct.new-shortcut, meerdere classes, of een ingevulde instance — allemaal prima. Klik op Voorbeeld laden om eerst een realistisch Order-voorbeeld te zien.
Je hoeft geen require-regels weg te halen, modules eruit te knippen of de syntax te vereenvoudigen. Laat de code staan zoals-ie in je editor staat. Gewoon plakken.
Druk op Converteren
Klik op de groene Converteren-knop. De tool leest het Ruby, houdt elke class en elk attribuut, en bouwt de XML in één pass. Tijdens het draaien zie je een korte shimmer.
Kopieer de XML
Het rechterpaneel vult zich met ingesprongen, welgevormde XML die elke standaardcompatibele parser accepteert. Zet het in een SOAP-request, een fixture-bestand voor RSpec, een Rails-integratietest of je API-docs.
Wanneer dit echt handig is
Nokogiri- of Builder-fixtures maken
Je hebt een Ruby-class en je hebt een XML-template nodig voor Nokogiri::XML::Builder of een ERB-template. Plak de class, pak de XML, plak die in je Builder-block — klaar.
Rails to_xml-seeddata
Een ActiveRecord-model of PORO met 20 attributen wordt een direct te bewerken XML-seedbestand voor je integratietests of voor een extern systeem dat nog XML wil.
Legacy SOAP-integraties
Een Ruby-client die praat met een oude SOAP/XML-RPC-service heeft een request body nodig die matcht met een Ruby-class. Plak het model, pak de vorm van de XML-envelope, en stop met worstelen met <a href="https://www.ruby-doc.org/" target="_blank" rel="noopener">Savon</a>-templates.
Docs en code in sync houden
Genereer XML-responsevoorbeelden voor een README, API-referentie of XSD-gebaseerde documentatie rechtstreeks uit de echte Ruby-modellen, zodat de docs nooit afdwalen van de code.
Veelgestelde vragen
Kan ik meerdere classes tegelijk plakken?
Ja — plak gerust een hele lib-file. Elke top-level class komt eruit met geneste classes uitgeklapt en superclass-attributen meegenomen. Mixins worden behandeld alsof ze hun attr_accessors bijdragen. Er verdwijnt niks stilletjes.
Werkt Struct.new-shorthand?
Ja. Order = Struct.new(:order_id, :customer_name, :total_amount) wordt hetzelfde behandeld als een class met bijpassende attr_accessors. Keyword-style structs (Struct.new(:a, keyword_init: true)) werken ook — het resulterende XML is in beide gevallen identiek.
Hoe worden BigDecimal, Time, Symbol en nil afgehandeld?
BigDecimal("49.99") wordt gewoon de string 49.99 (geen wetenschappelijke notatie, geen bd-suffix). Time, DateTime en Date worden gerenderd als ISO-8601-strings. Symbol-waarden verliezen de dubbele punt en worden gewone tekst. nil wordt een leeg element (<field/>) in plaats van weggelaten, zodat de XML-vorm consistent blijft.
En arrays, hashes en geneste objecten?
Arrays worden container-elementen — items = [OrderItem.new, OrderItem.new] wordt <items><order_item/><order_item/></items>, één kind per item, vernoemd naar de element-class. Hashes worden <entry><key/><value/></entry>-paren. Geneste objecten worden inline uitgeklapt als kindelementen, zoals Rails to_xml dat doet.
Wordt mijn code opgeslagen?
Je code gaat naar de backend voor conversie en wordt niet bewaard — we loggen de payload niet. Zoals altijd met online tools: als het Ruby echt gevoelige literals bevat (API-keys, klant-PII), haal die er eerst uit voordat je plakt.
Wat als de code metaprogramming of define_method gebruikt?
Alles wat alleen at runtime bestaat (methoden toegevoegd via define_method, attributen gezet via method_missing, ingemixte modules met berekende attrs) is niet uit statische code af te leiden. De tool leest wat er aan attr_accessor, attr_reader, Struct-velden en expliciete toewijzingen staat. Als een veld alleen via metaprogramming opduikt, zet het er dan als attr_accessor bij zodat de converter het kan zien.
Andere tools die je misschien nodig hebt
Ruby naar XML is één stukje van de puzzel. Deze combineren er goed mee: