class RubyPager::XML
Public Class Methods
exists?(file_name)
click to toggle source
# File lib/ruby_pager/xml.rb, line 8 def self.exists?(file_name) if file_name.end_with?(".xml") return File.file?(file_name) end return false end
generate_xml(data, parent = false, opt = {})
click to toggle source
# File lib/ruby_pager/xml.rb, line 28 def self.generate_xml(data, parent = false, opt = {}) return if data.to_s.empty? return unless data.is_a?(Hash) unless parent # assume that if the hash has a single key that it should be the root root, data = (data.length == 1) ? data.shift : ["root", data] attr = Hash.new data.each{|label,value| if(label.start_with?("@")) then new_label = label.dup new_label[0]= '' attr[new_label]=value end } builder = Nokogiri::XML::Builder.new(opt) do |xml| xml.send(root,attr) { data.each{|label,value| if(label.start_with?("@")) then data.delete(label) end } generate_xml(data, xml) } end return builder.to_xml end data.each { |label, value| if value.is_a?(Hash) attr = Hash.new value.each{|vlabel,vvalue| if(vlabel.start_with?("@")) then new_label = vlabel.dup new_label[0]= '' attr[new_label]=vvalue end } parent.send(label,attr) { value.each{|vlabel,vvalue| if(vlabel.start_with?("@")) then value.delete(vlabel) end } generate_xml(value, parent) } elsif value.is_a?(Array) value.each { |el| # lets trick the above into firing so we do not need to rewrite the checks el = {label => el} generate_xml(el, parent) } else parent.send(label, value) end } end
load(file_name)
click to toggle source
# File lib/ruby_pager/xml.rb, line 15 def self.load(file_name) if self.exists?(file_name) xml = Nokogiri::XML(File.open(file_name)) { |config| config.strict.noblanks } hash = Nori.new(:parser => :nokogiri, :advanced_typecasting => false).parse(xml.to_s) return hash end return nil end
save(file_name,hash)
click to toggle source
# File lib/ruby_pager/xml.rb, line 24 def self.save(file_name,hash) File.open(file_name, 'w') { |file| file.write(self.generate_xml(hash)) } ; end