Lim inn Ruby til venstre og trykk "Konverter" — så gjør vi det om til XMLLim inn Ruby-kode

Hva verktøyet gjør

Hvis du noen gang har måttet mekke sammen en XML-payload for hånd så den matcher en Ruby-klasse — kanskje for en Rails-to_xml-fixture, et gammelt SOAP-kall eller en Nokogiri Builder-mal — vet du hvor fort boilerplate-koden bygger seg opp. Lim inn Ruby her, så gir verktøyet deg velformet XML i én omgang. Én attr_accessor-klasse, en Struct.new, en hel modellfil eller dypt nøstede objekter — samme resultat: et komplett XML-dokument med hvert felt bevart.

Det er ikke bare strengerstatning. Konverteren skjønner hvordan Ruby-verdier faktisk serialiseres: BigDecimal("49.99") kommer ut som en vanlig numerisk streng (ingen vitenskapelig notasjon), Time og DateTime rendres som ISO-8601-strenger, Symbol-verdier mister det innledende kolonet, nil blir et tomt element i stedet for å bli droppet, og arrays blir container-elementer med ett barn per post — akkurat det Nokogiri::XML::Builder og Rails to_xml vanligvis produserer.

Klassestrukturen blir også respektert. Hver toppnivåklasse blir et rotelement oppkalt etter klassen (i snake_case), attr_accessor-symboler blir barne-elementer, nøstede objekter brettes ut inline, og arrays av OrderItem blir en <items>-wrapper med ett <order_item>-barn per post. Hashes blir nøkkel/verdi-barneelementer. Arvede attributter følger med. Limer du inn en Rails-modell eller et vanlig PORO, ser resultatet ut som det du ville fått fra render xml: eller REXML::Document.new (se REXML) — bare uten all seremonien.

Slik bruker du det

Tre steg. Samme flyt om du limer inn én Struct eller en hel lib-mappe.

1

Lim inn Ruby-en din (eller prøv eksempelet)

Slipp Ruby-en din rett inn i editoren til venstre. En attr_accessor-klasse, en Struct.new-snarvei, flere klasser, eller en utfylt instans — alt går. Klikk Last inn eksempel for å først se et realistisk Order-eksempel.

Du trenger ikke fjerne require-linjer, skrelle av moduler eller forenkle syntaksen. La koden være som den ser ut i editoren din. Bare lim inn.

2

Trykk Konverter

Klikk den grønne Konverter-knappen. Verktøyet leser Ruby-koden, beholder hver klasse og hvert attributt, og bygger XML-en i én omgang. Et kort skimmer vises mens det jobber.

3

Kopier XML-en

Høyre panel fylles med innrykket, velformet XML som enhver standard-kompatibel parser godtar. Slipp det inn i en SOAP-forespørsel, en fixture-fil for RSpec, en Rails-integrasjonstest eller API-dokumentasjonen din.

Når det faktisk redder dagen

Bygge Nokogiri- eller Builder-fixtures

Du har en Ruby-klasse og trenger en XML-mal for Nokogiri::XML::Builder eller en ERB-mal. Lim inn klassen, ta XML-en, slipp den inn i Builder-blokken din — ferdig.

Rails to_xml-seed-data

En ActiveRecord-modell eller PORO med 20 attributter blir en redigeringsklar XML-seed-fil for integrasjonstestene dine eller for et eksternt system som fremdeles vil ha XML.

Legacy SOAP-integrasjoner

En Ruby-klient som prater med en gammel SOAP/XML-RPC-tjeneste trenger en request body som matcher en Ruby-klasse. Lim inn modellen, få formen på XML-enveloppen, og slutt å sloss med <a href="https://www.ruby-doc.org/" target="_blank" rel="noopener">Savon</a>-maler.

Holde dokumentasjon og kode i sync

Generer XML-respons-eksempler for en README, en API-referanse eller XSD-basert dokumentasjon rett fra de ekte Ruby-modellene, så dokumentasjonen aldri driver unna koden.

Vanlige spørsmål

Kan jeg lime inn flere klasser samtidig?

Ja — lim gjerne inn en hel lib-fil. Hver toppnivåklasse kommer ut med nøstede klasser brettet ut og superklasse-attributter inkludert. Mixins blir behandlet som om de bidrar med sine attr_accessor. Ingenting slippes i stillhet.

Virker Struct.new-snarveien?

Ja. Order = Struct.new(:order_id, :customer_name, :total_amount) behandles som en klasse med tilsvarende attr_accessor. Keyword-style structs (Struct.new(:a, keyword_init: true)) virker også — resulterende XML er identisk i begge tilfeller.

Hvordan håndteres BigDecimal, Time, Symbol og nil?

BigDecimal("49.99") blir den vanlige strengen 49.99 (ingen vitenskapelig notasjon, ingen bd-markør til slutt). Time, DateTime og Date rendres som ISO-8601-strenger. Symbol-verdier mister kolonet og blir til vanlig tekst. nil blir et tomt element (<field/>) i stedet for å forsvinne, slik at XML-formen holder seg konsistent.

Hva med arrays, hashes og nøstede objekter?

Arrays blir container-elementer — items = [OrderItem.new, OrderItem.new] blir <items><order_item/><order_item/></items>, ett barn per post, oppkalt etter element-klassen. Hashes blir <entry><key/><value/></entry>-par. Nøstede objekter brettes ut inline som barne-elementer, akkurat slik Rails to_xml gjør det.

Blir koden min lagret?

Koden din sendes til backend for konvertering og lagres ikke — vi logger ikke payloaden. Som alltid med nettverktøy: om Ruby-koden inneholder virkelig sensitive literaler (API-nøkler, kunde-PII), fjern dem før du limer inn.

Hva om koden bruker metaprogrammering eller define_method?

Alt som bare eksisterer ved kjøring (metoder lagt til via define_method, attributter satt via method_missing, innmiksede moduler med beregnede attr) kan ikke utledes fra statisk kode alene. Verktøyet leser deklarerte attr_accessor, attr_reader, Struct-felter og eksplisitte tildelinger. Hvis et felt bare dukker opp via metaprogrammering, list det som en attr_accessor så konverteren får sett det.

Andre verktøy du kanskje trenger

Ruby til XML er én bit av puslespillet. Disse passer godt sammen med det: