Не входя в синтаксический анализ xml, но при условии, что вы дошли до извлечения следующего массива:
name = 'Man'
props = [["name", "string"],
["height", "int"],
["age", "int"],
["profession", "string", "unemployed"]]
вот код для создания класса:
def new_class(class_name, attrs)
klass = Class.new do
attrs.each do |attr, type, val|
if val
attr_reader attr
else
attr_accessor attr
end
end
end
init = ""
attrs.each do |attr, type, val|
if val
if type == "string"
init << "@#{attr} = '#{val}'\n"
else # assuming all other types are numeric
init << "@#{attr} = #{val}\n"
end
else
init << "@#{attr} = #{attr}\n"
end
end
args = attrs.select {|attr, type, val| val.nil?}.map {|attr, type, val| attr}.join(",")
klass.class_eval %{
def initialize(#{args})
#{init}
end
}
Object.const_set class_name, klass
end
name = 'Man'
props = [["name", "string"], ["height", "int"], ["age", "int"], ["profession", "string", "unemployed"]]
new_class(name, props)
man = Man.new('John', 188, 30)
p man