def supernets(list,options=nil)
known_args = [:Objectify, :Short]
short = false
objectify = false
verbose = false
raise ArgumentError, "Array expected for argument 'list' but #{list.class} provided." if (!list.kind_of?(Array) )
if (options)
raise ArgumentError, "Hash expected for argument 'options' but #{options.class} provided." if (!options.kind_of?(Hash) )
NetAddr.validate_args(options.keys,known_args)
if (options.has_key?(:Objectify) && options[:Objectify] == true)
objectify = true
end
if (options.has_key?(:Short) && options[:Short] == true)
short = true
end
end
v4_list = []
v6_list = []
list.each do |obj|
if (!obj.kind_of?(NetAddr::CIDR))
begin
obj = NetAddr::CIDR.create(obj)
rescue Exception => error
raise ArgumentError, "One of the provided CIDR addresses raised the following " +
"errors: #{error}"
end
end
if (obj.version == 4)
v4_list.push(obj)
else
v6_list.push(obj)
end
end
v4_summary = []
v6_summary = []
if (v4_list.length != 0)
v4_summary = NetAddr.cidr_supernets(v4_list)
end
if (v6_list.length != 0)
v6_summary = NetAddr.cidr_supernets(v6_list)
end
summarized_list = []
if (!objectify)
summarized_list = []
if (v4_summary.length != 0)
v4_summary.each {|x| summarized_list.push(x.desc())}
end
if (v6_summary.length != 0)
v6_summary.each {|x| summarized_list.push(x.desc(:Short => short))}
end
else
summarized_list.concat(v4_summary) if (v4_summary.length != 0)
summarized_list.concat(v6_summary) if (v6_summary.length != 0)
end
return(summarized_list)
end