module Geocoder
def address(latitude, longitude)
Look up the address of the given coordinates.
#
def address(latitude, longitude) if result = search(latitude, longitude) result.address end end
def blank_query?(value)
Is the given search query blank? (ie, should we not bother searching?)
#
def blank_query?(value) !value.to_s.match(/[A-z0-9]/) end
def coordinates(address)
Look up the coordinates of the given street or IP address.
#
def coordinates(address) if result = search(address) result.coordinates end end
def get_lookup(name)
def get_lookup(name) unless defined?(@lookups) @lookups = {} end unless @lookups.include?(name) @lookups[name] = spawn_lookup(name) end @lookups[name] end
def ip_address?(value)
dot-delimited 8-bit numbers.
Does not check for actual validity, just the appearance of four
Does the given value look like an IP address?
#
def ip_address?(value) !!value.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/) end
def lookup(ip = false)
Returns an IP address lookup if +ip+ parameter true.
Get the lookup object (which communicates with the remote geocoding API).
#
def lookup(ip = false) if ip get_lookup :freegeoip else get_lookup Geocoder::Configuration.lookup || :google end end
def search(*args)
Search for information about an address or a set of coordinates.
#
def search(*args) return nil if blank_query?(args[0]) ip = (args.size == 1 and ip_address?(args.first)) lookup(ip).search(*args) end
def spawn_lookup(name)
def spawn_lookup(name) if valid_lookups.include?(name) name = name.to_s require "geocoder/lookups/#{name}" eval("Geocoder::Lookup::#{name[0...1].upcase + name[1..-1]}.new") else valids = valid_lookups.map{ |l| ":#{l}" }.join(", ") raise ConfigurationError, "Please specify a valid lookup for Geocoder " + "(#{name.inspect} is not one of: #{valids})." end end
def valid_lookups
def valid_lookups [:google, :yahoo, :freegeoip] end