require 'builder'
def dynarex_schema(s)
ptrn = %r((\w+)\[?([^\]]+)?\]?\/(\w+)\(([^\)]+)\))
root_name, raw_summary, record_name, raw_fields = s.match(ptrn).captures
summary, fields = [raw_summary || '',raw_fields].map {|x| x.split(/,/).map &:strip}
xml = Builder::XmlMarkup.new( :target => buffer='', :indent => 2 )
xml.instruct! :xml, :version => "1.0", :encoding => "UTF-8"
xml.send root_name do
xml.summary do
summary.each do |item|
xml.send item
end
end
xml.records do
xml.send record_name do
fields.each do |field|
xml.send field
end
end
end
end
buffer
end
s = "contacts[title,description]/contact(name,age,dob)"
dynarex = dynarex_schema(s)
puts dynarex
require 'builder'
def dynarex(s)
ptrn = %r((\w+)\[?([^\]]+)?\]?\/(\w+)\(([^\)]+)\))
root_name, raw_summary, record_name, raw_fields = s.match(ptrn).captures
summary, fields = [raw_summary || '',raw_fields].map {|x| x.split(/,/).map &:strip}
xml = Builder::XmlMarkup.new( target: buffer='', indent: 2 )
xml.instruct! :xml, version: "1.0", encoding: "UTF-8"
xml.send root_name do
xml.summary do
summary.each do |item|
xml.send item
end
xml.recordx_type 'dynarex'
xml.format_mask fields.map {|x| "[!%s]" % x}.join(' ')
xml.schema s
end
xml.records
end
buffer
end
s = "contacts[title,description]/contact(name,age,dob)"
dynarex = dynarex(s)
puts dynarex
dynarex
[!name] [!age] [!dob]
contacts[title,description]/contact(name,age,dob)
Read more: http://feeds.dzone.com/~r/dzone/snippets/~3/ys_emAYIy8k/11299