Sha256: df6073117e7a7e756fb6f8bb419a7ad069b3a80ee055715ebb424480e0bd6862
Contents?: true
Size: 1.67 KB
Versions: 3
Compression:
Stored size: 1.67 KB
Contents
# George Moschovitis <gm@navel.gr> # (c) 2005 Navel, all rights reserved. # $Id$ module N # = XmlBuilderMixin # # A helper mixin for programmatically building XML # blocks. module XmlBuilderMixin def method_missing(tag, *args, &block) self.class.module_eval <<-"end_eval", __FILE__, __LINE__ def #{tag}(*args) attrs = args.last.is_a?(Hash) ? args.pop : nil if block_given? start_tag('#{tag}', attrs) yield end_tag('#{tag}') elsif (!args.empty?) start_tag('#{tag}', attrs) self << args.first end_tag('#{tag}') else start_tag('#{tag}', attrs) self << ' />' end end end_eval self.send(tag, *args, &block) end def start_tag(tag, attributes = nil) unless attributes self << "<#{tag}>" else self << "<#{tag}" for name, value in attributes if value self << %| #{name}="#{value}"| else self << %| #{name}="1"| end end self << ">" end return self end def end_tag(tag) self << "</#{tag}>" return self end def text(str) self << str return self end def comment(str) self << "<!-- #{str} -->" return self end end # = XmlString # # A String extension with XML generation # functionality. class XmlString < String include N::XmlBuilderMixin end # = XmlBuilder # # A class that encapsulats the XML generation # functionality. Utilizes duck typing to redirect # output to a target buffer. class XmlBuilder include N::XmlBuilderMixin # The target receives the generated xml, # should respond_to :<< attr_accessor :target def initialize(target = '') @target = target end def << (str) @target << str end def to_s @target.to_s end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
nitro-0.8.0 | lib/nitro/builders/xml.rb |
nitro-0.9.3 | lib/nitro/builders/xml.rb |
nitro-0.9.5 | lib/nitro/builders/xml.rb |