class Aio::Module::SpecialStyle::CompareOld
Attributes
device_manager[RW]
用于传递已经分析好的现有的device
input_benchmark[RW]
用于传递由XML,Json生成并已经解析的Hash值
Public Class Methods
new()
click to toggle source
Calls superclass method
Aio::Module::SpecialStyle::new
# File lib/modules/special/style/compare_old.rb, line 16 def initialize super({ :author => "Elin", :description => "此模块用于解析两个Hash值的不同点,并发出警告,此模块废弃", }) end
Public Instance Methods
clear_other_info(device_warning, input_benchmark)
click to toggle source
只留下要比较的两个数据有共同命令的交集,其他的命令就丢弃 因为即使是保留了,产生的也是大量的垃圾信息
# File lib/modules/special/style/compare_old.rb, line 45 def clear_other_info(device_warning, input_benchmark) device_arr = {} input_arr = {} # 获得命令信息 device_warning.each_pair { |k, v| device_arr[k] = v.keys } input_benchmark.each_pair { |k, v| input_arr[k] = v.keys } # 删除 device_warning 中多余的命令信息 device_warning.each_pair do |name, hash| hash.delete_if do |k, v| next true unless input_arr.has_key?(name) input_arr[name].include?(k) ? false : true end end # 删除 input_benchmark 中多余的命令信息 input_benchmark.each_pair do |name, hash| hash.delete_if do |k, v| next true unless device_arr.has_key?(name) device_arr[name].include?(k) ? false : true end end end
delete(cm1, cm2)
click to toggle source
# File lib/modules/special/style/compare_old.rb, line 70 def delete(cm1, cm2) compare = Aio::Config::Warning::Compare cm1.delete_if do |key, val| # 当末端是Hash时,迭代循环 if val.class == Hash # 保证无论是Symbol 还是 String 都能互换 # 有可能整个val都不一样 unless cm2.has_key?(key) cm2_val = cm2[key.to_sym] if key.kind_of? String cm2_val = cm2[key.to_s] if key.kind_of? Symbol next if cm2_val.nil? else cm2_val = cm2[key] end res = delete(cm1[key], cm2_val) # 当有内容时,说明存在差异,则保留 res.empty? ? true : false else # 当末端不是Hash时,判断是否相等 unless cm2.has_key?(key) cm2_val = cm2[key.to_sym] if key.kind_of? String cm2_val = cm2[key.to_s] if key.kind_of? Symbol next if cm2_val.nil? else cm2_val = cm2[key] end #cm1[key].eql?(cm2_val) # 当配置中有信息时,那么只有当大于配置中的区间波动才会被记录 # 当有Pass值的时候,直接Pass # 只有是数值才可以 if compare.has_key?(key) compare[key] == "pass" ? true : (cm1[key].to_i < cm2_val.to_i + compare[key]) else if cm1[key].eql?(cm2_val) true else cm1[key].compare_val = cm2_val false end end end end end
parse()
click to toggle source
# File lib/modules/special/style/compare_old.rb, line 23 def parse # 将device_manager 中的按照{device_name => useful} 形式重新编排 # cmds_useful为深度克隆信息,对本体无影响 device_warning = {} total = device_manager.devices_number print_good "总共 #{total} 台设备进行比较" device_manager.each_devices_with_index do |device_name, device_klass, i| device_warning[device_name] = Aio::Base::Toolkit::DeepClone.clone(device_klass.cmds_useful) # 进度条 progress_bar(total, i+1, device_name) end clear_line clear_other_info(device_warning, input_benchmark) delete(device_warning, input_benchmark) end