+ class InvalidHostError < RuntimeError; end
+
+ GEO_IP_PRIMARY = "http://lakka.kapsi.fi:40086/lookup.yaml?host="
+ GEO_IP_SECONDARY = "http://www.geoiptool.com/en/?IP="
+ HOST_NAME_REGEX = /^[a-z0-9\-]+(?:\.[a-z0-9\-]+)*\.[a-z]{2,4}/i
+
+ REGEX = {
+ :country => %r{Country:.*?<a href=".*?" target="_blank"> (.*?)</a>}m,
+ :region => %r{Region:.*?<a href=".*?" target="_blank">(.*?)</a>}m,
+ :city => %r{City:.*?<td align="left" class="arial_bold">(.*?)</td>}m
+ }
+
+ def self.valid_host?(hostname)
+ hostname =~ HOST_NAME_REGEX ||
+ hostname =~ Resolv::IPv4::Regex && (hostname.split(".").map { |e| e.to_i }.max <= 255)
+ end