require"geocoder/lookups/test"moduleGeocodermoduleLookupextendself### Array of valid Lookup service names.#defall_servicesstreet_services+ip_servicesend### Array of valid Lookup service names, excluding :test.#defall_services_except_testall_services-[:test]end### All street address lookup services, default first.#defstreet_services@street_services||=[:location_iq,:dstk,:esri,:google,:google_premier,:google_places_details,:google_places_search,:bing,:geocoder_ca,:geocoder_us,:yandex,:nominatim,:mapbox,:mapquest,:mapzen,:opencagedata,:ovi,:pelias,:pickpoint,:here,:baidu,:geocodio,:smarty_streets,:okf,:postcode_anywhere_uk,:geoportail_lu,:ban_data_gouv_fr,:test,:latlon,:amap]end### All IP address lookup services, default first.#defip_services@ip_services||=[:baidu_ip,:freegeoip,:geoip2,:maxmind,:maxmind_local,:telize,:pointpin,:maxmind_geoip2,:ipinfo_io,:ipapi_com,:ipdata_co,:db_ip_com]endattr_writer:street_services,:ip_services### Retrieve a Lookup object from the store.# Use this instead of Geocoder::Lookup::X.new to get an# already-configured Lookup object.#defget(name)@services={}unlessdefined?(@services)@services[name]=spawn(name)unless@services.include?(name)@services[name]endprivate# -----------------------------------------------------------------### Spawn a Lookup of the given name.#defspawn(name)ifall_services.include?(name)name=name.to_srequire"geocoder/lookups/#{name}"Geocoder::Lookup.const_get(classify_name(name)).newelsevalids=all_services.map(&:inspect).join(", ")raiseConfigurationError,"Please specify a valid lookup for Geocoder "+"(#{name.inspect} is not one of: #{valids})."endend### Convert an "underscore" version of a name into a "class" version.#defclassify_name(filename)filename.to_s.split("_").map{|i|i[0...1].upcase+i[1..-1]}.joinendendend