module XML
Public Class Methods
analyze_elem(elem)
click to toggle source
# File lib/xml-dsl/compile.rb, line 37 def self.analyze_elem elem [elem[0], get_elem_part(elem, Hash), get_elem_part(elem, [Array, String])] end
brackets(tag)
click to toggle source
# File lib/xml-dsl/compile.rb, line 33 def self.brackets tag '<' + tag + '>' end
compile_attrs(attrs)
click to toggle source
# File lib/xml-dsl/compile.rb, line 27 def self.compile_attrs attrs attrs.map do |name, value| "#{name}=#{value.to_s.encode(xml: :attr)}" end.join ' ' end
compile_elems(elems)
click to toggle source
# File lib/xml-dsl/compile.rb, line 14 def self.compile_elems elems elems.map do |elem| tagged(*analyze_elem(elem)) end.join end
from_array(array, format: true)
click to toggle source
# File lib/xml-dsl/compile.rb, line 6 def self.from_array array, format: true xml = compile_elems(array) return xml if not format Nokogiri::XML(xml, &:noblanks).to_xml(indent: 4, &:no_declaration) end
get_elem_part(elem, classes)
click to toggle source
# File lib/xml-dsl/compile.rb, line 41 def self.get_elem_part elem, classes raise "Error: An array longer than 3 representing an element is detected.: \ #{elem}" if elem.length > 3 classes = [classes] if classes.is_a? Class in_classes = lambda { |x| classes.map{ |klass| x.is_a? klass }.any? } if in_classes.call elem[1] elem[1] elsif in_classes.call elem[2] elem[2] else classes[0].new end end
tagged(tag, attrs, body)
click to toggle source
# File lib/xml-dsl/compile.rb, line 20 def self.tagged tag, attrs, body tag = tag.to_s brackets(tag + (attrs.length > 0 ? ' ' + compile_attrs(attrs) : '')) \ + (body.is_a?(String) ? body : compile_elems(body)) \ + brackets('/' + tag) end