module Geocoder::Lookup

def all_services


Array of valid Lookup service names.
#
def all_services
  street_services + ip_services
end

def all_services_except_test


Array of valid Lookup service names, excluding :test.
#
def all_services_except_test
  all_services - [:test]
end

def classify_name(filename)


Convert an "underscore" version of a name into a "class" version.
#
def classify_name(filename)
  filename.to_s.split("_").map{ |i| i[0...1].upcase + i[1..-1] }.join
end

def get(name)


already-configured Lookup object.
Use this instead of Geocoder::Lookup::X.new to get an
Retrieve a Lookup object from the store.
#
def get(name)
  @services = {} unless defined?(@services)
  @services[name] = spawn(name) unless @services.include?(name)
  @services[name]
end

def ip_services


All IP address lookup services, default first.
#
def ip_services
  [
    :baidu_ip,
    :freegeoip,
    :maxmind,
    :maxmind_local,
    :telize,
    :pointpin
  ]
end

def spawn(name)


Spawn a Lookup of the given name.
#
def spawn(name)
  if all_services.include?(name)
    Geocoder::Lookup.const_get(classify_name(name)).new
  else
    valids = all_services.map(&:inspect).join(", ")
    raise ConfigurationError, "Please specify a valid lookup for Geocoder " +
      "(#{name.inspect} is not one of: #{valids})."
  end
end

def street_services


All street address lookup services, default first.
#
def street_services
  [
    :dstk,
    :esri,
    :google,
    :google_premier,
    :yahoo,
    :bing,
    :geocoder_ca,
    :geocoder_us,
    :yandex,
    :nominatim,
    :mapquest,
    :opencagedata,
    :ovi,
    :here,
    :baidu,
    :geocodio,
    :smarty_streets,
    :test
  ]
end