Links Ruby reinpacken und "Konvertieren" drücken — wir machen XML drausRuby-Code reinpacken

Was dieses Tool macht

Wer schon mal von Hand ein XML-Payload passend zu einer Ruby-Klasse basteln musste — vielleicht für ein Rails to_xml-Fixture, einen alten SOAP-Call oder ein Nokogiri-Builder-Template — weiß, wie schnell sich der Boilerplate aufstapelt. Ruby hier reinpacken und das Tool liefert dir in einem Rutsch wohlgeformtes XML. Eine attr_accessor-Klasse, ein Struct.new, eine komplette Modell-Datei oder tief verschachtelte Objekte — Ergebnis ist gleich: ein vollständiges XML-Dokument mit jedem Feld.

Das ist nicht bloß String-Ersetzung. Der Konverter versteht, wie Ruby-Werte wirklich serialisieren: BigDecimal("49.99") kommt als schlichter Zahlen-String raus (keine wissenschaftliche Notation), Time und DateTime werden als ISO-8601-Strings gerendert, Symbol-Werte verlieren den führenden Doppelpunkt, nil wird zu einem leeren Element statt wegzufallen, und Arrays werden Container-Elemente mit einem Kind pro Eintrag — genau das, was Nokogiri::XML::Builder und Rails to_xml normalerweise produzieren.

Die Klassenstruktur wird auch respektiert. Jede Top-Level-Klasse wird zu einem Root-Element, das nach der Klasse heißt (in snake_case), attr_accessor-Symbole werden zu Kindelementen, verschachtelte Objekte werden inline aufgeklappt, und Arrays von OrderItem werden zu einem <items>-Wrapper mit einem <order_item>-Kind pro Eintrag. Hashes werden zu Key/Value-Kindelementen. Geerbte Attribute kommen mit durch. Wenn du ein Rails-Modell oder ein simples PORO reinpackst, sieht das Ergebnis aus wie das, was render xml: oder REXML::Document.new (siehe REXML) dir geben würden — nur ohne den ganzen Zinnober.

So nutzt du es

Drei Schritte. Selber Ablauf, egal ob du einen einzelnen Struct reinpackst oder einen ganzen lib-Ordner.

1

Ruby reinpacken (oder das Beispiel probieren)

Ruby einfach so in den linken Editor werfen. Eine attr_accessor-Klasse, eine Struct.new-Kurzschreibweise, mehrere Klassen oder eine befüllte Instanz — alles passt. Auf Beispiel laden klicken, um vorher ein realistisches Order-Beispiel zu sehen.

Du musst keine require-Zeilen entfernen, keine Module rausschneiden und die Syntax nicht vereinfachen. Lass den Code so, wie er im Editor aussieht. Einfach reinpacken.

2

Konvertieren drücken

Auf den grünen Konvertieren-Button klicken. Das Tool liest das Ruby, behält jede Klasse und jedes Attribut, und baut das XML in einem Rutsch. Während der Verarbeitung läuft ein kurzer Schimmer.

3

XML kopieren

Rechts füllt sich das Panel mit eingerücktem, wohlgeformtem XML, das jeder standardkonforme Parser frisst. Ab in einen SOAP-Request, eine Fixture-Datei für RSpec, einen Rails-Integrationstest oder deine API-Doku.

Wann das wirklich was bringt

Nokogiri- oder Builder-Fixtures bauen

Du hast eine Ruby-Klasse und brauchst ein XML-Template für Nokogiri::XML::Builder oder ein ERB-Template. Klasse reinpacken, XML nehmen, in deinen Builder-Block packen — fertig.

Rails-to_xml-Seed-Daten

Ein ActiveRecord-Modell oder PORO mit 20 Attributen wird zu einer sofort editierbaren XML-Seed-Datei — für deine Integrationstests oder ein externes System, das immer noch XML frisst.

Alte SOAP-Integrationen

Ein Ruby-Client, der mit einem alten SOAP/XML-RPC-Service redet, braucht einen Request-Body, der zu einer Ruby-Klasse passt. Modell reinpacken, XML-Envelope-Form abgreifen und aufhören, mit <a href="https://www.ruby-doc.org/" target="_blank" rel="noopener">Savon</a>-Templates zu kämpfen.

Doku und Code im Gleichschritt halten

XML-Response-Beispiele für ein README, eine API-Referenz oder XSD-gestützte Doku direkt aus den echten Ruby-Modellen erzeugen — dann driftet die Doku nie vom Code weg.

Häufige Fragen

Kann ich mehrere Klassen auf einmal reinpacken?

Ja — pack eine ganze lib-Datei rein. Jede Top-Level-Klasse kommt mit ausgeklappten verschachtelten Klassen und eingerollten Superklassen-Attributen raus. Mixins werden so behandelt, als würden sie ihre attr_accessor beisteuern. Nichts wird heimlich fallengelassen.

Funktioniert die Struct.new-Kurzschreibweise?

Ja. Order = Struct.new(:order_id, :customer_name, :total_amount) wird wie eine Klasse mit den passenden attr_accessor behandelt. Keyword-Structs (Struct.new(:a, keyword_init: true)) gehen auch — das resultierende XML ist in beiden Fällen identisch.

Wie werden BigDecimal, Time, Symbol und nil behandelt?

BigDecimal("49.99") wird zum simplen String 49.99 (keine wissenschaftliche Notation, kein nachgestelltes bd-Marker). Time, DateTime und Date werden als ISO-8601-Strings gerendert. Symbol-Werte verlieren den Doppelpunkt und werden zu Plain-Text. nil wird zu einem leeren Element (<field/>), statt zu verschwinden — so bleibt die XML-Form konsistent.

Was ist mit Arrays, Hashes und verschachtelten Objekten?

Arrays werden zu Container-Elementen — items = [OrderItem.new, OrderItem.new] wird zu <items><order_item/><order_item/></items>, ein Kind pro Eintrag, benannt nach der Elementklasse. Hashes werden zu <entry><key/><value/></entry>-Paaren. Verschachtelte Objekte werden inline als Kindelemente aufgeklappt — genau wie Rails to_xml das macht.

Wird mein Code gespeichert?

Dein Code wird zur Konvertierung ans Backend geschickt und nicht persistiert — wir loggen das Payload nicht. Wie immer bei Online-Tools: wenn das Ruby echt sensible Literale enthält (API-Keys, Kunden-PII), vorher rausnehmen.

Was ist mit Metaprogrammierung oder define_method?

Alles, was nur zur Laufzeit existiert (Methoden via define_method, über method_missing gesetzte Attribute, reingemixte Module mit berechneten Attrs), kann aus rein statischem Code nicht abgeleitet werden. Das Tool liest deklarierte attr_accessor, attr_reader, Struct-Felder und explizite Zuweisungen. Wenn ein Feld nur über Metaprogrammierung auftaucht, list es als attr_accessor, damit der Konverter es sieht.

Andere Tools, die du brauchen könntest

Ruby zu XML ist ein Baustein. Diese passen gut dazu: