end
end
+ ##
+ # raised when an API call is made using a method not supported on that URI
+ class APIBadMethodError < APIError
+ def initialize(supported_method)
+ @supported_method = supported_method
+ end
+
+ def render_opts
+ { :text => "Only method #{@supported_method} is supported on this URI.", :status => :method_not_allowed }
+ end
+ end
+
+ ##
+ # raised when an API call takes too long
+ class APITimeoutError < APIError
+ def render_opts
+ { :text => "Request timed out", :status => :request_timeout }
+ end
+
+ def to_s
+ "Request timed out"
+ end
+ end
+
# Helper methods for going to/from mercator and lat/lng.
class Mercator
include Math
Net::HTTP.start('api.hostip.info') do |http|
country = http.get("/country.php?ip=#{ip_address}").body
country = "GB" if country == "UK"
- Net::HTTP.start('ws.geonames.org') do |http|
- xml = REXML::Document.new(http.get("/countryInfo?country=#{country}").body)
- xml.elements.each("geonames/country") do |ele|
- minlon = ele.get_text("bBoxWest").to_s
- minlat = ele.get_text("bBoxSouth").to_s
- maxlon = ele.get_text("bBoxEast").to_s
- maxlat = ele.get_text("bBoxNorth").to_s
- return { :minlon => minlon, :minlat => minlat, :maxlon => maxlon, :maxlat => maxlat }
- end
- end
+ country = Country.find_by_code(country)
+ return { :minlon => country.min_lon, :minlat => country.min_lat, :maxlon => country.max_lon, :maxlat => country.max_lat }
end
end