Conversor Ruby para XML
Cola classes ou objetos Ruby. Recebe XML limpo.
O que essa ferramenta faz
Se você já precisou montar no braço um payload XML para bater com uma classe Ruby — talvez para uma fixture to_xml no Rails, uma chamada SOAP antiga ou um template do Nokogiri Builder — sabe como o boilerplate se acumula rápido. Cola o Ruby aqui que a ferramenta te devolve XML bem-formado numa passada só. Uma classe com attr_accessor, um Struct.new, um arquivo inteiro de modelos ou objetos profundamente aninhados — o resultado é o mesmo: um documento XML completo com cada campo preservado.
Não é só substituição de string. O conversor entende como os valores Ruby realmente serializam: BigDecimal("49.99") sai como uma string numérica simples (sem notação científica), Time e DateTime renderizam como strings ISO-8601, valores Symbol perdem os dois pontos iniciais, nil vira um elemento vazio em vez de sumir, e arrays viram elementos contêineres com um filho por item — igual ao que Nokogiri::XML::Builder e o to_xml do Rails costumam produzir.
A estrutura das classes também é respeitada. Cada classe de nível superior vira um elemento raiz com o nome da classe (em snake_case), os símbolos do attr_accessor viram elementos filhos, objetos aninhados são expandidos inline, e arrays de OrderItem viram um wrapper <items> com um filho <order_item> por entrada. Hashes viram elementos filhos de chave/valor. Atributos herdados também aparecem. Se você colar um modelo do Rails ou um PORO simples, o resultado parece com o que render xml: ou REXML::Document.new (veja REXML) entregariam, só que sem a cerimônia toda.
Como usar
Três passos. O fluxo é o mesmo quer você cole um único Struct ou uma pasta lib inteira.
Cola seu Ruby (ou testa o exemplo)
Joga o Ruby como está no editor da esquerda. Uma classe attr_accessor, um atalho Struct.new, várias classes, ou uma instância já preenchida — tudo serve. Clica em Carregar exemplo para ver antes um caso realista de Order.
Não precisa tirar linhas require, remover módulos, nem simplificar a sintaxe. Deixa o código como está no seu editor. Só cola.
Aperta Converter
Clica no botão verde Converter. A ferramenta lê o Ruby, mantém cada classe e atributo, e monta o XML numa passada. Um brilhozinho rápido aparece enquanto processa.
Copia o XML
O painel da direita preenche com um XML indentado e bem-formado que qualquer parser em conformidade com o padrão aceita. Joga numa requisição SOAP, num arquivo de fixture do RSpec, num teste de integração do Rails, ou na doc da sua API.
Quando isso realmente salva
Montar fixtures do Nokogiri ou Builder
Você tem uma classe Ruby e precisa de um template XML para o Nokogiri::XML::Builder ou um template ERB. Cola a classe, pega o XML, cola no seu bloco Builder — pronto.
Seeds com Rails to_xml
Um modelo ActiveRecord ou PORO com 20 atributos vira um arquivo XML seed pronto pra editar, seja pros seus testes de integração ou pra um sistema externo que ainda consome XML.
Integrações SOAP antigas
Um cliente Ruby conversando com um serviço SOAP/XML-RPC antigo precisa de um corpo de requisição que bata com uma classe Ruby. Cola o modelo, pega o formato do envelope XML, e para de brigar com templates do <a href="https://www.ruby-doc.org/" target="_blank" rel="noopener">Savon</a>.
Manter doc e código em sincronia
Gera exemplos de resposta XML pra README, referência de API ou documentação baseada em XSD direto dos modelos Ruby de verdade, pra que a doc nunca fique desalinhada com o código.
Perguntas frequentes
Posso colar várias classes de uma vez?
Pode — cola um arquivo lib inteiro. Cada classe de nível superior sai com classes aninhadas expandidas e atributos da superclasse incluídos. Mixins são tratados como se contribuíssem com os seus attr_accessor. Nada é descartado silenciosamente.
O atalho Struct.new funciona?
Funciona. Order = Struct.new(:order_id, :customer_name, :total_amount) é tratado igual a uma classe com os attr_accessor equivalentes. Structs no estilo keyword (Struct.new(:a, keyword_init: true)) também funcionam — o XML resultante é idêntico nos dois casos.
Como BigDecimal, Time, Symbol e nil são tratados?
BigDecimal("49.99") vira a string simples 49.99 (sem notação científica, sem o marcador bd no final). Time, DateTime e Date renderizam como strings ISO-8601. Symbol perde os dois pontos e vira texto puro. nil vira um elemento vazio (<field/>) em vez de ser descartado, então o formato do XML fica consistente.
E arrays, hashes e objetos aninhados?
Arrays viram elementos contêineres — items = [OrderItem.new, OrderItem.new] vira <items><order_item/><order_item/></items>, um filho por item, com nome tirado da classe do elemento. Hashes viram pares <entry><key/><value/></entry>. Objetos aninhados são expandidos inline como elementos filhos, do mesmo jeito que o to_xml do Rails trata.
Meu código é guardado?
Seu código é enviado pro backend pra fazer a conversão e não é persistido — a gente não loga o payload. Como sempre com ferramentas online, se o Ruby tiver literais realmente sensíveis (chaves de API, PII de cliente), limpa antes de colar.
E se o código usa metaprogramação ou define_method?
Qualquer coisa que só existe em runtime (métodos adicionados via define_method, atributos setados por method_missing, módulos mixados com attrs computados) não dá pra inferir só a partir do código estático. A ferramenta lê attr_accessor, attr_reader, campos de Struct e atribuições explícitas declarados. Se um campo só aparece via metaprogramação, lista ele como attr_accessor pra o conversor conseguir ver.
Outras ferramentas que podem servir
Ruby para XML é uma peça do quebra-cabeça. Essas combinam bem com ela: