Klistra in Ruby till vänster och tryck "Konvertera" — vi gör om det till XMLKlistra in Ruby-kod

Vad verktyget gör

Om du någon gång har fått snickra ihop en XML-payload för hand för att passa en Ruby-klass — kanske för en Rails-to_xml-fixture, ett gammalt SOAP-anrop eller en Nokogiri Builder-mall — vet du hur snabbt boilerplate-koden växer. Klistra in Ruby här och verktyget ger dig välformad XML i ett svep. En attr_accessor-klass, en Struct.new, en hel modellfil eller djupt nästlade objekt — samma resultat: ett komplett XML-dokument med varje fält bevarat.

Det är inte bara sträng-ersättning. Konverteraren förstår hur Ruby-värden faktiskt serialiseras: BigDecimal("49.99") kommer ut som en vanlig numerisk sträng (ingen vetenskaplig notation), Time och DateTime renderas som ISO-8601-strängar, Symbol-värden tappar inledande kolonet, nil blir ett tomt element istället för att försvinna, och arrayer blir container-element med ett barn per post — precis det som Nokogiri::XML::Builder och Rails to_xml brukar producera.

Klasstrukturen respekteras också. Varje topp-nivå-klass blir ett rot-element uppkallat efter klassen (i snake_case), attr_accessor-symboler blir barn-element, nästlade objekt viks ut inline, och arrayer av OrderItem förvandlas till en <items>-omslagare med ett <order_item>-barn per post. Hashar blir nyckel/värde-barnelement. Ärvda attribut följer med. Om du klistrar in en Rails-modell eller ett vanligt PORO ser resultatet ut som det render xml: eller REXML::Document.new (se REXML) skulle ge dig — bara utan allt krångel.

Så använder du det

Tre steg. Samma flöde vare sig du klistrar in en enda Struct eller en hel lib-mapp.

1

Klistra in din Ruby (eller testa exemplet)

Släpp din Ruby som den är i den vänstra editorn. En attr_accessor-klass, en Struct.new-förkortning, flera klasser, eller en ifylld instans — allt funkar. Klicka på Ladda exempel för att först se ett realistiskt Order-exempel.

Du behöver inte ta bort require-rader, skala av moduler eller förenkla syntaxen. Låt koden vara som den ser ut i din editor. Klistra bara in.

2

Tryck på Konvertera

Klicka på den gröna Konvertera-knappen. Verktyget läser Ruby-koden, behåller varje klass och attribut, och bygger XML:en i ett svep. Ett kort skimmer syns medan det arbetar.

3

Kopiera XML:en

Höger panel fylls med indenterad, välformad XML som alla standard-kompatibla parsers accepterar. Släng in den i en SOAP-begäran, en fixture-fil för RSpec, ett Rails-integrationstest eller din API-dokumentation.

När det faktiskt kommer till nytta

Bygga Nokogiri- eller Builder-fixtures

Du har en Ruby-klass och behöver en XML-mall för Nokogiri::XML::Builder eller en ERB-mall. Klistra in klassen, ta XML:en, klistra in den i ditt Builder-block — klart.

Rails to_xml-seed-data

En ActiveRecord-modell eller PORO med 20 attribut blir en redigeringsklar XML-seed-fil för dina integrationstester eller ett externt system som fortfarande käkar XML.

Legacy SOAP-integrationer

En Ruby-klient som pratar med en gammal SOAP/XML-RPC-tjänst behöver en request body som matchar en Ruby-klass. Klistra in modellen, få formen på XML-enveloppen och sluta slåss med <a href="https://www.ruby-doc.org/" target="_blank" rel="noopener">Savon</a>-mallar.

Hålla dokumentation och kod i synk

Generera XML-responseexempel för en README, API-referens eller XSD-baserad dokumentation direkt från de riktiga Ruby-modellerna, så att dokumentationen aldrig glider iväg från koden.

Vanliga frågor

Kan jag klistra in flera klasser samtidigt?

Ja — klistra in en hel lib-fil. Varje topp-nivå-klass kommer ut med nästlade klasser utvikta och superklass-attribut inbakade. Mixins behandlas som att de bidrar med sina attr_accessor. Inget tappas bort i tysthet.

Fungerar Struct.new-förkortningen?

Ja. Order = Struct.new(:order_id, :customer_name, :total_amount) behandlas som en klass med motsvarande attr_accessor. Keyword-strukturer (Struct.new(:a, keyword_init: true)) fungerar också — resulterande XML är identisk i båda fallen.

Hur hanteras BigDecimal, Time, Symbol och nil?

BigDecimal("49.99") blir strängen 49.99 (ingen vetenskaplig notation, inget efterhängande bd-märke). Time, DateTime och Date renderas som ISO-8601-strängar. Symbol-värden tappar kolonet och blir vanlig text. nil blir ett tomt element (<field/>) istället för att försvinna, så XML-formen förblir konsekvent.

Och arrayer, hashar och nästlade objekt?

Arrayer blir container-element — items = [OrderItem.new, OrderItem.new] blir <items><order_item/><order_item/></items>, ett barn per post, uppkallat efter element-klassen. Hashar blir <entry><key/><value/></entry>-par. Nästlade objekt viks ut inline som barn-element, precis som Rails to_xml gör.

Sparas min kod?

Din kod skickas till backend för konvertering och sparas inte — vi loggar inte payloaden. Som alltid med online-verktyg: om Ruby-koden innehåller riktigt känsliga literaler (API-nycklar, kund-PII), rensa dem innan du klistrar in.

Vad händer om koden använder metaprogrammering eller define_method?

Allt som bara finns vid körning (metoder tillagda via define_method, attribut satta via method_missing, inmixade moduler med beräknade attr) kan inte härledas från enbart statisk kod. Verktyget läser deklarerade attr_accessor, attr_reader, Struct-fält och explicita tilldelningar. Om ett fält bara dyker upp via metaprogrammering, lista det som en attr_accessor så att konverteraren kan se det.

Andra verktyg du kan behöva

Ruby till XML är en pusselbit. De här matchar bra ihop med det: