require 'to_xml/version' class Object def self.xml_type name.gsub(/([a-z])([A-Z])/,'\1-\2').downcase end def xml_type self.class.xml_type end def to_xml( name = nil ) name ? %{<#{name} type="#{xml_type}">#{self.to_s}} : self.to_s end def to_xml!( *args ) %{\n} + to_xml( *args ) end end class Integer def self.xml_type "integer" end end class Array def to_xml( array_name = :array, item_name = :item ) %|<#{array_name} size="#{self.size}">|+map{|n|n.to_xml( :item )}.join+"" end end class Hash def to_xml( name = nil ) data = to_a.map{|k,v|v.to_xml(k)}.join name ? "<#{name}>#{data}" : data end end