def elements(name, options = {}, &block)
real_name = (options[:as] ||= name).to_s
if options[:class]
sax_config.add_collection_element(name, options)
else
if block_given?
define_method("add_#{real_name}") do |value|
send(real_name).send(:<<, instance_exec(value, &block))
end
else
define_method("add_#{real_name}") do |value|
send(real_name).send(:<<, value)
end
end
sax_config.add_top_level_element(name, options.merge(collection: true))
end
if !method_defined?(real_name)
class_eval "def \#{real_name}\n@\#{real_name} ||= []\nend\n"
end
attr_writer(options[:as]) unless method_defined?("#{options[:as]}=")
end