Ruby til XML-konverter
Lim inn Ruby-klasser eller objekter. Få ren XML tilbake.
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.
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.
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.
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: