Marcos,
Aunque esto se le preguntó hace un tiempo, me encontré con una solución y pensó que podría ayudar a la gente en el futuro.
Mi necesidad era similar. Tengo un .xsd de un colega y me gustaría generar un archivo de clase a partir de él. Mi esperanza es que pueda ordenar fácilmente el objeto y pasarlo a su punto final RESTful, donde su servidor Java destrabará la carga y construirá dinámicamente el objeto de su lado sin ningún esfuerzo adicional.
La solución que encontré fue obtener el soap4r
de https://github.com/rubyjedi/soap4r. Hice los dos archivos * .RB en el ejecutable bin y luego corrió:
bin/xsd2ruby.rb --xsd <source>.xsd --classdef <filename_prefix>
Esto genera un nuevo archivo con cada uno de los xsd:complexType
implementado como una clase. Todos los demás tipos complejos también se generaron con las relaciones de herencia correctas y todos xsd:element
se definieron como una variable de instancia y también se definió un inicializador de clase.
Correr xsd2ruby.rb
por sí solo produjo las opciones:
~/src/test/soap4r:bin/xsd2ruby.rb
Usage: bin/xsd2ruby.rb --xsd xsd_location [options]
xsd_location: filename or URL
Example:
bin/xsd2ruby.rb --xsd myapp.xsd --classdef foo
Options:
--xsd xsd_location
--classdef [filenameprefix]
--mapping_registry
--mapper
--module_path [Module::Path::Name]
--force
--quiet
En aras de la exhaustividad, extendí mi clase con la siguiente (esto es una clase de "Prospecto"):
class Prospect
include Enumerable
def each(&block)
self.instance_variables.collect{|v| (v.gsub /@/, '').to_sym }.each(&block)
end
end
Este permítanme usarlo como el cuerpo de una solicitud Net::HTTP::Post
.
A la pregunta de un to_xml
gratis: No lo he encontrado. El objeto Ruby viene con un to_yaml
y to_json
de fábrica, pero no he encontrado ninguna conversión simple a XML. Así que se redujo a un rollo mi propio "to_xml".
Espero que esto ayude.
Hay una manera en que puede serializar objetos-clase activerecord a xml. Pero no creo que estés buscando algo de ese tipo. – Chirantan