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