From 509ab4f3f84b7a1c75c9ac0cb5d38ce5c1dbbaad Mon Sep 17 00:00:00 2001
From: Rob Murray <robmurray17@gmail.com>
Date: Wed, 21 May 2014 17:13:47 +0100
Subject: [PATCH] Add minimal PostcodeAnywhere UK geocoding provider

---
 lib/geocoder/lookups/postcode_anywhere_uk.rb | 37 ++++++++++++++++++++
 lib/geocoder/results/postcode_anywhere_uk.rb | 29 +++++++++++++++
 2 files changed, 66 insertions(+)
 create mode 100644 lib/geocoder/lookups/postcode_anywhere_uk.rb
 create mode 100644 lib/geocoder/results/postcode_anywhere_uk.rb

diff --git a/lib/geocoder/lookups/postcode_anywhere_uk.rb b/lib/geocoder/lookups/postcode_anywhere_uk.rb
new file mode 100644
index 00000000..2b4a835e
--- /dev/null
+++ b/lib/geocoder/lookups/postcode_anywhere_uk.rb
@@ -0,0 +1,37 @@
+require 'geocoder/lookups/base'
+require 'geocoder/results/postcode_anywhere_uk'
+
+module Geocoder::Lookup
+  class PostcodeAnywhereUk < Base
+
+    BASE_URL_GEOCODE_V200 = 'services.postcodeanywhere.co.uk/Geocoding/UK/Geocode/v2.00/json.ws'
+
+    def name
+      'PostcodeAnywhereUk'
+    end
+
+    def required_api_key_parts
+      %w(key)
+    end
+
+    def query_url(query)
+      format('%s://%s?%s', protocol, BASE_URL_GEOCODE_V200, url_query_string(query))
+    end
+
+    private
+
+    def results(query)
+      response = fetch_data(query)
+      return [] if response.nil? || !response.is_a?(Array) || response.empty?
+
+      return response
+    end
+
+    def query_url_params(query)
+      {
+        :location => query.sanitized_text,
+        :key => configuration.api_key
+      }.merge(super)
+    end
+  end
+end
diff --git a/lib/geocoder/results/postcode_anywhere_uk.rb b/lib/geocoder/results/postcode_anywhere_uk.rb
new file mode 100644
index 00000000..b3194959
--- /dev/null
+++ b/lib/geocoder/results/postcode_anywhere_uk.rb
@@ -0,0 +1,29 @@
+require 'geocoder/results/base'
+
+module Geocoder::Result
+  class PostcodeAnywhereUk < Base
+
+    def coordinates
+      [@data['Latitude'].to_f, @data['Longitude'].to_f]
+    end
+
+    def blank_result
+      ''
+    end
+    alias_method :state, :blank_result
+    alias_method :state_code, :blank_result
+    alias_method :postal_code, :blank_result
+
+    def country
+      'United Kingdom'
+    end
+
+    def country_code
+      'UK'
+    end
+
+    def address
+      [@data['Location'], @data['OsGrid']].join(', ')
+    end
+  end
+end
\ No newline at end of file
-- 
GitLab