lib/modules/input/style/compare_xml.rb in aio_elin-0.0.1 vs lib/modules/input/style/compare_xml.rb in aio_elin-1.0.0

- old
+ new

@@ -2,88 +2,88 @@ require "aio/core" require "rexml/document" class Aio::Module::InputStyle::CompareXML < Aio::Module::InputStyle - include Aio::Module - include REXML - include Aio::Ui::Verbose + include Aio::Module + include REXML + include Aio::Ui::Verbose - def initialize - super({ - :author => "Elin", - :description => "这个模块用于分析由output/out_compare_xml模块生成的xml文件", - :platform => "all", - :file_suffix => Regexp.new('\.xml$'), - :pass_file => [], - }) - end + def initialize + super({ + :author => "Elin", + :description => "这个模块用于分析由output/out_compare_xml模块生成的xml文件", + :platform => "all", + :file_suffix => Regexp.new('\.xml$'), + :pass_file => [], + }) + end - def parse - # dir 为 Pathname 类 - print_good "正在打开文件 #{self.input_file}" - file = File.open(self.input_file) - print_good "打开文件完成" - print_good "正在载入到XML模块..." - atime = Time.now - doc = Document.new(file) - root = doc.root - print_good "载入完成。载入用时 #{format("%.2fs", Time.now.to_f - atime.to_f)}" - device_hash = {} + def parse + # dir 为 Pathname 类 + print_good "正在打开文件 #{self.input_file}" + file = File.open(self.input_file) + print_good "打开文件完成" + print_good "正在载入到XML模块..." + atime = Time.now + doc = Document.new(file) + root = doc.root + print_good "载入完成。载入用时 #{format("%.2fs", Time.now.to_f - atime.to_f)}" + device_hash = {} - index = 0 - total = root.elements.size + index = 0 + total = root.elements.size - print_good "开始比对分析..." - # 按每台设备解析XML - root.elements.each do |device| - index += 1 - info = {} - device_name = device.attributes['device_name'] - device_hash[device_name] = info - - # 按照每个cmd解析XML - device.elements.each do |cmd| - i = {} - ch = cmd.name - cmd_name = cmd.attributes['cmd'] - # 当同一个cmd有两个symbol时 - if info[cmd_name].nil? - info[cmd_name] = {ch.to_sym => i} - else - info[cmd_name][ch.to_sym] = i - end + print_good "开始比对分析..." + # 按每台设备解析XML + root.elements.each do |device| + index += 1 + info = {} + device_name = device.attributes['device_name'] + device_hash[device_name] = info - # 进度条 - progress_bar(total, index, device_name) + # 按照每个cmd解析XML + device.elements.each do |cmd| + i = {} + ch = cmd.name + cmd_name = cmd.attributes['cmd'] + # 当同一个cmd有两个symbol时 + if info[cmd_name].nil? + info[cmd_name] = {ch.to_sym => i} + else + info[cmd_name][ch.to_sym] = i + end - # 还有一种情况是当<attr cmd='show' val='var'/> - # 此时就可以直接将val填入 - attr_val = cmd.attributes['val'] - attr_val ? info[cmd_name][ch.to_sym] = attr_val : to_h(cmd, i) - end - end + # 进度条 + progress_bar(total, index, device_name) - clear_line - return device_hash - end + # 还有一种情况是当<attr cmd='show' val='var'/> + # 此时就可以直接将val填入 + attr_val = cmd.attributes['val'] + attr_val ? info[cmd_name][ch.to_sym] = attr_val : to_h(cmd, i) + end + end - def to_h(xml, hash) - xml.elements.each do |e| - if e.has_elements? - son = {} - hash[convert(e.name)] = son - to_h(e, son) - else - hash[convert(e.name)] = e.attributes['val'] - end - end - end + clear_line + return device_hash + end - # 转换恢复会出错字符串 - def convert(e) - #/__/.match(e) ? e.gsub!('__', '/').to_sym : e.to_sym - e.gsub!('__', '/') if /__/.match(e) - e.gsub!(/^_i/, '') if /^_i/.match(e) - e.to_sym - end + def to_h(xml, hash) + xml.elements.each do |e| + if e.has_elements? + son = {} + hash[convert(e.name)] = son + to_h(e, son) + else + hash[convert(e.name)] = e.attributes['val'] + end + end + end + + # 转换恢复会出错字符串 + def convert(e) + #/__/.match(e) ? e.gsub!('__', '/').to_sym : e.to_sym + e.gsub!('__', '/') if /__/.match(e) + e.gsub!(/^_i/, '') if /^_i/.match(e) + e.to_sym + end end