Conversor de Ruby a XML
Pega clases u objetos de Ruby. Obtén XML limpio.
Qué hace esta herramienta
Si alguna vez has tenido que montar a mano un payload XML que encajara con una clase de Ruby — quizá para un fixture de to_xml en Rails, una llamada SOAP antigua o una plantilla de Nokogiri Builder — sabes lo rápido que se acumula el texto repetido. Pega el Ruby aquí y la herramienta te devuelve XML bien formado de una sola pasada. Una clase con attr_accessor, un Struct.new, un archivo de modelos entero u objetos anidados profundamente — mismo resultado: un documento XML completo con cada campo preservado.
No es solo reemplazo de cadenas. El conversor entiende cómo se serializan de verdad los valores Ruby: BigDecimal("49.99") sale como un número normal en texto (sin notación científica), Time y DateTime se renderizan como cadenas ISO-8601, los Symbol pierden los dos puntos iniciales, nil se vuelve un elemento vacío en lugar de desaparecer, y los arrays se convierten en elementos contenedores con un hijo por entrada — igual que lo que suelen producir Nokogiri::XML::Builder y el to_xml de Rails.
La estructura de clases también se respeta. Cada clase de nivel superior se vuelve un elemento raíz con el nombre de la clase (en snake_case), los símbolos de attr_accessor pasan a ser elementos hijos, los objetos anidados se expanden en línea y los arrays de OrderItem se transforman en un envoltorio <items> con un hijo <order_item> por entrada. Los hashes generan elementos hijos de clave/valor. Los atributos heredados también vienen. Si pegas un modelo de Rails o un PORO normal, el resultado se parece a lo que te daría render xml: o REXML::Document.new (ver REXML), pero sin el rollo.
Cómo usarla
Tres pasos. Mismo flujo tanto si pegas un único Struct como una carpeta lib entera.
Pega tu Ruby (o prueba el ejemplo)
Suelta tu Ruby tal cual en el editor de la izquierda. Una clase con attr_accessor, un atajo Struct.new, varias clases o una instancia ya creada — todo vale. Pulsa Cargar ejemplo para ver antes un caso realista de Order.
No hace falta que quites líneas require, elimines módulos ni simplifiques la sintaxis. Deja el código como lo tienes en tu editor. Solo pega.
Pulsa Convertir
Haz clic en el botón verde Convertir. La herramienta lee el Ruby, conserva cada clase y atributo, y construye el XML de una sola pasada. Verás un pequeño brillo mientras trabaja.
Copia el XML
El panel derecho se rellena con XML indentado y bien formado que aceptará cualquier parser estándar. Pégalo en una petición SOAP, un fixture para RSpec, un test de integración de Rails o la documentación de tu API.
Cuándo viene bien de verdad
Montar fixtures de Nokogiri o Builder
Tienes una clase Ruby y necesitas una plantilla XML para Nokogiri::XML::Builder o una plantilla ERB. Pega la clase, coge el XML, pégalo en tu bloque Builder — listo.
Datos seed con to_xml de Rails
Un modelo ActiveRecord o un PORO con 20 atributos se vuelve un archivo XML seed listo para editar, tanto para tus tests de integración como para un sistema externo que todavía consume XML.
Integraciones SOAP heredadas
Un cliente Ruby que habla con un viejo servicio SOAP/XML-RPC necesita un cuerpo de petición que case con una clase Ruby. Pega el modelo, obtén la forma del sobre XML y deja de pelearte con plantillas de <a href="https://www.ruby-doc.org/" target="_blank" rel="noopener">Savon</a>.
Mantener docs y código alineados
Genera ejemplos de respuesta XML para un README, una referencia de API o documentación respaldada por XSD directamente desde los modelos Ruby reales, para que los docs no se desvíen del código.
Preguntas frecuentes
¿Puedo pegar varias clases a la vez?
Sí — pega un archivo lib entero. Cada clase de nivel superior sale con las clases anidadas expandidas y los atributos de la superclase incluidos. Los mixins se tratan como si aportaran sus attr_accessor. Nada se descarta en silencio.
¿Funciona el atajo Struct.new?
Sí. Order = Struct.new(:order_id, :customer_name, :total_amount) se trata igual que una clase con los attr_accessor correspondientes. Los structs con keywords (Struct.new(:a, keyword_init: true)) también funcionan — el XML resultante es idéntico en ambos casos.
¿Cómo se tratan BigDecimal, Time, Symbol y nil?
BigDecimal("49.99") pasa a ser la cadena plana 49.99 (sin notación científica, sin el marcador bd al final). Time, DateTime y Date se renderizan como cadenas ISO-8601. Los Symbol pierden los dos puntos y se vuelven texto plano. nil se convierte en un elemento vacío (<field/>) en vez de desaparecer, así que la forma del XML se mantiene consistente.
¿Y los arrays, hashes y objetos anidados?
Los arrays se convierten en elementos contenedores — items = [OrderItem.new, OrderItem.new] pasa a <items><order_item/><order_item/></items>, un hijo por entrada, con el nombre de la clase del elemento. Los hashes se vuelven pares <entry><key/><value/></entry>. Los objetos anidados se expanden en línea como elementos hijos, igual que hace el to_xml de Rails.
¿Se guarda mi código?
Tu código se envía al backend para la conversión y no se almacena — no registramos el contenido. Como siempre con herramientas online, si el Ruby contiene literales realmente sensibles (claves de API, datos de cliente), límpialos antes de pegarlos.
¿Y si el código usa metaprogramación o define_method?
Cualquier cosa que solo exista en tiempo de ejecución (métodos añadidos con define_method, atributos creados vía method_missing, módulos mezclados con atributos calculados) no puede inferirse solo desde el código estático. La herramienta lee los attr_accessor, attr_reader, campos de Struct y asignaciones explícitas declarados. Si un campo solo aparece por metaprogramación, decláralo como attr_accessor para que el conversor lo vea.
Otras herramientas que te pueden servir
Ruby a XML es una pieza del puzzle. Estas combinan bien con ella: