Incolla Ruby a sinistra e clicca "Converti" — lo trasformiamo in XMLIncolla codice Ruby

Cosa fa questo strumento

Se ti è mai toccato montare a mano un payload XML per farlo combaciare con una classe Ruby — magari per una fixture to_xml di Rails, una vecchia chiamata SOAP, o un template Nokogiri Builder — sai quanto in fretta si accumula il boilerplate. Incolla qui il Ruby e lo strumento ti restituisce XML ben formato in un colpo solo. Una classe con attr_accessor, uno Struct.new, un intero file di modelli, o oggetti profondamente annidati — il risultato è lo stesso: un documento XML completo con ogni campo preservato.

Non è solo sostituzione di stringhe. Il convertitore capisce come i valori Ruby si serializzano per davvero: BigDecimal("49.99") esce come semplice stringa numerica (niente notazione scientifica), Time e DateTime vengono resi come stringhe ISO-8601, i Symbol perdono i due punti iniziali, nil diventa un elemento vuoto invece di essere rimosso, e gli array diventano elementi contenitore con un figlio per voce — esattamente quello che Nokogiri::XML::Builder e il to_xml di Rails di solito producono.

Anche la struttura delle classi viene rispettata. Ogni classe di primo livello diventa un elemento radice chiamato come la classe (in snake_case), i simboli di attr_accessor diventano elementi figli, gli oggetti annidati vengono espansi inline, e gli array di OrderItem si trasformano in un wrapper <items> con un figlio <order_item> per voce. Gli hash producono elementi figli chiave/valore. Gli attributi ereditati passano anche loro. Se incolli un modello Rails o un semplice PORO, il risultato somiglia a quello che ti darebbero render xml: o REXML::Document.new (vedi REXML), senza tutta la cerimonia.

Come usarlo

Tre passi. Stesso flusso sia che incolli un singolo Struct sia un'intera cartella lib.

1

Incolla il tuo Ruby (o prova l'esempio)

Butta il tuo Ruby così com'è nell'editor di sinistra. Una classe attr_accessor, una scorciatoia Struct.new, più classi, o un'istanza già popolata — va bene tutto. Clicca Carica esempio per vedere prima un caso realistico di Order.

Non serve togliere le righe require, rimuovere moduli o semplificare la sintassi. Lascia il codice com'è nel tuo editor. Incolla e basta.

2

Premi Converti

Clicca il bottone verde Converti. Lo strumento legge il Ruby, tiene ogni classe e attributo, e costruisce l'XML in un colpo solo. Durante l'elaborazione compare un breve luccichio.

3

Copia l'XML

Il pannello di destra si riempie di XML indentato e ben formato che qualsiasi parser conforme agli standard accetta. Piazzalo in una richiesta SOAP, in un file fixture per RSpec, in un test di integrazione Rails o nella doc della tua API.

Quando serve davvero

Costruire fixture Nokogiri o Builder

Hai una classe Ruby e ti serve un template XML per Nokogiri::XML::Builder o un template ERB. Incolla la classe, prendi l'XML, mettilo nel tuo blocco Builder — fatto.

Dati seed Rails to_xml

Un modello ActiveRecord o PORO con 20 attributi diventa un file XML seed pronto da modificare per i tuoi test di integrazione o per un sistema esterno che ancora vuole XML.

Integrazioni SOAP legacy

Un client Ruby che parla con un vecchio servizio SOAP/XML-RPC ha bisogno di un body di richiesta che combaci con una classe Ruby. Incolla il modello, prendi la forma dell'envelope XML e smetti di litigare con i template <a href="https://www.ruby-doc.org/" target="_blank" rel="noopener">Savon</a>.

Tenere doc e codice allineati

Genera esempi di risposta XML per un README, un riferimento API, o documentazione basata su XSD direttamente dai veri modelli Ruby, così la doc non si disallinea mai dal codice.

Domande frequenti

Posso incollare più classi in una volta?

Sì — incolla pure un file lib intero. Ogni classe di primo livello esce con le classi annidate espanse e gli attributi della superclasse inclusi. I mixin sono trattati come contributori dei loro attr_accessor. Nulla viene scartato in silenzio.

La scorciatoia Struct.new funziona?

Sì. Order = Struct.new(:order_id, :customer_name, :total_amount) viene trattato come una classe con i corrispondenti attr_accessor. Gli struct keyword-style (Struct.new(:a, keyword_init: true)) funzionano anche loro — l'XML risultante è identico in entrambi i casi.

Come vengono gestiti BigDecimal, Time, Symbol e nil?

BigDecimal("49.99") diventa la semplice stringa 49.99 (niente notazione scientifica, niente marcatore bd finale). Time, DateTime e Date vengono resi come stringhe ISO-8601. I Symbol perdono i due punti e diventano testo puro. nil diventa un elemento vuoto (<field/>) invece di sparire, così la forma dell'XML rimane coerente.

E array, hash e oggetti annidati?

Gli array diventano elementi contenitore — items = [OrderItem.new, OrderItem.new] diventa <items><order_item/><order_item/></items>, un figlio per voce, chiamato come la classe dell'elemento. Gli hash diventano coppie <entry><key/><value/></entry>. Gli oggetti annidati vengono espansi inline come elementi figli, allo stesso modo in cui il to_xml di Rails li gestisce.

Il mio codice viene salvato?

Il tuo codice viene mandato al backend per la conversione e non viene persistito — non logghiamo il payload. Come sempre con gli strumenti online, se il Ruby contiene letterali davvero sensibili (chiavi API, PII di clienti), puliscili prima di incollare.

E se il codice usa metaprogrammazione o define_method?

Tutto ciò che esiste solo a runtime (metodi aggiunti via define_method, attributi settati tramite method_missing, moduli mixati con attr calcolati) non può essere dedotto dal solo codice statico. Lo strumento legge attr_accessor, attr_reader, campi Struct e assegnazioni esplicite dichiarati. Se un campo appare solo tramite metaprogrammazione, dichiaralo come attr_accessor così il convertitore riesce a vederlo.

Altri strumenti che ti potrebbero servire

Ruby to XML è un pezzo del puzzle. Questi ci stanno bene insieme: