Sha256: 6dca3071caa099281b7bae1afdfff71adcff2c1764d3f98284ef015ab4cd9a53

Contents?: true

Size: 1.63 KB

Versions: 29

Compression:

Stored size: 1.63 KB

Contents

require 'geocoder/lookups/base'
require 'geocoder/results/postcode_anywhere_uk'

module Geocoder::Lookup
  class PostcodeAnywhereUk < Base
    # API documentation: http://www.postcodeanywhere.co.uk/Support/WebService/Geocoding/UK/Geocode/2/
    BASE_URL_GEOCODE_V2_00 = 'services.postcodeanywhere.co.uk/Geocoding/UK/Geocode/v2.00/json.ws'
    DAILY_LIMIT_EXEEDED_ERROR_CODES = ['8', '17'] # api docs say these two codes are the same error
    INVALID_API_KEY_ERROR_CODE = '2'

    def name
      'PostcodeAnywhereUk'
    end

    def required_api_key_parts
      %w(key)
    end

    def query_url(query)
      format('%s://%s?%s', protocol, BASE_URL_GEOCODE_V2_00, url_query_string(query))
    end

    private

    def results(query)
      response = fetch_data(query)
      return [] if response.nil? || !response.is_a?(Array) || response.empty?

      raise_exception_for_response(response[0]) if response[0]['Error']
      response
    end

    def raise_exception_for_response(response)
      case response['Error']
      when *DAILY_LIMIT_EXEEDED_ERROR_CODES
        raise_error(Geocoder::OverQueryLimitError, response['Cause']) || Geocoder.log(:warn, response['Cause'])
      when INVALID_API_KEY_ERROR_CODE
        raise_error(Geocoder::InvalidApiKey, response['Cause']) || Geocoder.log(:warn, response['Cause'])
      else # anything else just raise general error with the api cause
        raise_error(Geocoder::Error, response['Cause']) || Geocoder.log(:warn, response['Cause'])
      end
    end

    def query_url_params(query)
      {
        :location => query.sanitized_text,
        :key => configuration.api_key
      }.merge(super)
    end
  end
end

Version data entries

29 entries across 29 versions & 3 rubygems

Version Path
geocoder-1.4.9 lib/geocoder/lookups/postcode_anywhere_uk.rb
geocoder-1.4.8 lib/geocoder/lookups/postcode_anywhere_uk.rb
geocoder-1.4.7 lib/geocoder/lookups/postcode_anywhere_uk.rb
geocoder-1.4.6 lib/geocoder/lookups/postcode_anywhere_uk.rb
geocoder-1.4.5 lib/geocoder/lookups/postcode_anywhere_uk.rb
geocoder-1.4.4 lib/geocoder/lookups/postcode_anywhere_uk.rb
enju_leaf-1.2.1 vendor/bundle/ruby/2.3/gems/geocoder-1.4.3/lib/geocoder/lookups/postcode_anywhere_uk.rb
geocoder-1.4.3 lib/geocoder/lookups/postcode_anywhere_uk.rb
geocoder-1.4.2 lib/geocoder/lookups/postcode_anywhere_uk.rb
geocoder-1.4.1 lib/geocoder/lookups/postcode_anywhere_uk.rb
geocoder-1.4.0 lib/geocoder/lookups/postcode_anywhere_uk.rb
geocoder-1.3.7 lib/geocoder/lookups/postcode_anywhere_uk.rb
geocoder-1.3.6 lib/geocoder/lookups/postcode_anywhere_uk.rb
geocoder-1.3.5 lib/geocoder/lookups/postcode_anywhere_uk.rb
broken-geocoder-1.3.6 lib/geocoder/lookups/postcode_anywhere_uk.rb
broken-geocoder-1.3.5 lib/geocoder/lookups/postcode_anywhere_uk.rb
broken-geocoder-1.3.4 lib/geocoder/lookups/postcode_anywhere_uk.rb
geocoder-1.3.4 lib/geocoder/lookups/postcode_anywhere_uk.rb
geocoder-1.3.3 lib/geocoder/lookups/postcode_anywhere_uk.rb
geocoder-1.3.2 lib/geocoder/lookups/postcode_anywhere_uk.rb