From 21c03ae0308103bf5150625099de862721036ef7 Mon Sep 17 00:00:00 2001
From: Alex Reisner <alex@alexreisner.com>
Date: Fri, 21 Dec 2012 15:10:53 -0500
Subject: [PATCH] Refactoring of fake lookup/fixtures.

Now every fake query does not need to be listed in the code, a fixture
just needs to be added.
---
 ...garden.json => bing_madison_square_garden} |   0
 .../{bing_no_results.json => bing_no_results} |   0
 .../{bing_reverse.json => bing_reverse}       |   0
 ...00_247_59.json => freegeoip_74_200_247_59} |   0
 ...p_no_results.json => freegeoip_no_results} |   0
 ...json => geocoder_ca_madison_square_garden} |   0
 ...no_results.json => geocoder_ca_no_results} |   0
 ...er_ca_reverse.json => geocoder_ca_reverse} |   0
 .../{google_garbage.json => google_garbage}   |   0
 ...rden.json => google_madison_square_garden} |   0
 ..._no_city_data.json => google_no_city_data} |   0
 ...le_no_locality.json => google_no_locality} |   0
 ...ogle_no_results.json => google_no_results} |   0
 ...en.json => mapquest_madison_square_garden} |   0
 ...st_no_results.json => mapquest_no_results} |   0
 ...4_200_247_59.txt => maxmind_74_200_247_59} |   0
 ...nd_invalid_key.txt => maxmind_invalid_key} |   0
 ...mind_no_results.txt => maxmind_no_results} |   0
 ...n.json => nominatim_madison_square_garden} |   0
 ...m_no_results.json => nominatim_no_results} |   0
 .../{yahoo_error.json => yahoo_error}         |   0
 ...hoo_invalid_key.json => yahoo_invalid_key} |   0
 ...arden.json => yahoo_madison_square_garden} |   0
 ...yahoo_no_results.json => yahoo_no_results} |   0
 ...yahoo_over_limit.json => yahoo_over_limit} |   0
 ...ex_invalid_key.json => yandex_invalid_key} |   0
 .../{yandex_kremlin.json => yandex_kremlin}   |   0
 ...ndex_no_results.json => yandex_no_results} |   0
 test/test_helper.rb                           | 142 ++++--------------
 29 files changed, 31 insertions(+), 111 deletions(-)
 rename test/fixtures/{bing_madison_square_garden.json => bing_madison_square_garden} (100%)
 rename test/fixtures/{bing_no_results.json => bing_no_results} (100%)
 rename test/fixtures/{bing_reverse.json => bing_reverse} (100%)
 rename test/fixtures/{freegeoip_74_200_247_59.json => freegeoip_74_200_247_59} (100%)
 rename test/fixtures/{freegeoip_no_results.json => freegeoip_no_results} (100%)
 rename test/fixtures/{geocoder_ca_madison_square_garden.json => geocoder_ca_madison_square_garden} (100%)
 rename test/fixtures/{geocoder_ca_no_results.json => geocoder_ca_no_results} (100%)
 rename test/fixtures/{geocoder_ca_reverse.json => geocoder_ca_reverse} (100%)
 rename test/fixtures/{google_garbage.json => google_garbage} (100%)
 rename test/fixtures/{google_madison_square_garden.json => google_madison_square_garden} (100%)
 rename test/fixtures/{google_no_city_data.json => google_no_city_data} (100%)
 rename test/fixtures/{google_no_locality.json => google_no_locality} (100%)
 rename test/fixtures/{google_no_results.json => google_no_results} (100%)
 rename test/fixtures/{mapquest_madison_square_garden.json => mapquest_madison_square_garden} (100%)
 rename test/fixtures/{mapquest_no_results.json => mapquest_no_results} (100%)
 rename test/fixtures/{maxmind_74_200_247_59.txt => maxmind_74_200_247_59} (100%)
 rename test/fixtures/{maxmind_invalid_key.txt => maxmind_invalid_key} (100%)
 rename test/fixtures/{maxmind_no_results.txt => maxmind_no_results} (100%)
 rename test/fixtures/{nominatim_madison_square_garden.json => nominatim_madison_square_garden} (100%)
 rename test/fixtures/{nominatim_no_results.json => nominatim_no_results} (100%)
 rename test/fixtures/{yahoo_error.json => yahoo_error} (100%)
 rename test/fixtures/{yahoo_invalid_key.json => yahoo_invalid_key} (100%)
 rename test/fixtures/{yahoo_madison_square_garden.json => yahoo_madison_square_garden} (100%)
 rename test/fixtures/{yahoo_no_results.json => yahoo_no_results} (100%)
 rename test/fixtures/{yahoo_over_limit.json => yahoo_over_limit} (100%)
 rename test/fixtures/{yandex_invalid_key.json => yandex_invalid_key} (100%)
 rename test/fixtures/{yandex_kremlin.json => yandex_kremlin} (100%)
 rename test/fixtures/{yandex_no_results.json => yandex_no_results} (100%)

diff --git a/test/fixtures/bing_madison_square_garden.json b/test/fixtures/bing_madison_square_garden
similarity index 100%
rename from test/fixtures/bing_madison_square_garden.json
rename to test/fixtures/bing_madison_square_garden
diff --git a/test/fixtures/bing_no_results.json b/test/fixtures/bing_no_results
similarity index 100%
rename from test/fixtures/bing_no_results.json
rename to test/fixtures/bing_no_results
diff --git a/test/fixtures/bing_reverse.json b/test/fixtures/bing_reverse
similarity index 100%
rename from test/fixtures/bing_reverse.json
rename to test/fixtures/bing_reverse
diff --git a/test/fixtures/freegeoip_74_200_247_59.json b/test/fixtures/freegeoip_74_200_247_59
similarity index 100%
rename from test/fixtures/freegeoip_74_200_247_59.json
rename to test/fixtures/freegeoip_74_200_247_59
diff --git a/test/fixtures/freegeoip_no_results.json b/test/fixtures/freegeoip_no_results
similarity index 100%
rename from test/fixtures/freegeoip_no_results.json
rename to test/fixtures/freegeoip_no_results
diff --git a/test/fixtures/geocoder_ca_madison_square_garden.json b/test/fixtures/geocoder_ca_madison_square_garden
similarity index 100%
rename from test/fixtures/geocoder_ca_madison_square_garden.json
rename to test/fixtures/geocoder_ca_madison_square_garden
diff --git a/test/fixtures/geocoder_ca_no_results.json b/test/fixtures/geocoder_ca_no_results
similarity index 100%
rename from test/fixtures/geocoder_ca_no_results.json
rename to test/fixtures/geocoder_ca_no_results
diff --git a/test/fixtures/geocoder_ca_reverse.json b/test/fixtures/geocoder_ca_reverse
similarity index 100%
rename from test/fixtures/geocoder_ca_reverse.json
rename to test/fixtures/geocoder_ca_reverse
diff --git a/test/fixtures/google_garbage.json b/test/fixtures/google_garbage
similarity index 100%
rename from test/fixtures/google_garbage.json
rename to test/fixtures/google_garbage
diff --git a/test/fixtures/google_madison_square_garden.json b/test/fixtures/google_madison_square_garden
similarity index 100%
rename from test/fixtures/google_madison_square_garden.json
rename to test/fixtures/google_madison_square_garden
diff --git a/test/fixtures/google_no_city_data.json b/test/fixtures/google_no_city_data
similarity index 100%
rename from test/fixtures/google_no_city_data.json
rename to test/fixtures/google_no_city_data
diff --git a/test/fixtures/google_no_locality.json b/test/fixtures/google_no_locality
similarity index 100%
rename from test/fixtures/google_no_locality.json
rename to test/fixtures/google_no_locality
diff --git a/test/fixtures/google_no_results.json b/test/fixtures/google_no_results
similarity index 100%
rename from test/fixtures/google_no_results.json
rename to test/fixtures/google_no_results
diff --git a/test/fixtures/mapquest_madison_square_garden.json b/test/fixtures/mapquest_madison_square_garden
similarity index 100%
rename from test/fixtures/mapquest_madison_square_garden.json
rename to test/fixtures/mapquest_madison_square_garden
diff --git a/test/fixtures/mapquest_no_results.json b/test/fixtures/mapquest_no_results
similarity index 100%
rename from test/fixtures/mapquest_no_results.json
rename to test/fixtures/mapquest_no_results
diff --git a/test/fixtures/maxmind_74_200_247_59.txt b/test/fixtures/maxmind_74_200_247_59
similarity index 100%
rename from test/fixtures/maxmind_74_200_247_59.txt
rename to test/fixtures/maxmind_74_200_247_59
diff --git a/test/fixtures/maxmind_invalid_key.txt b/test/fixtures/maxmind_invalid_key
similarity index 100%
rename from test/fixtures/maxmind_invalid_key.txt
rename to test/fixtures/maxmind_invalid_key
diff --git a/test/fixtures/maxmind_no_results.txt b/test/fixtures/maxmind_no_results
similarity index 100%
rename from test/fixtures/maxmind_no_results.txt
rename to test/fixtures/maxmind_no_results
diff --git a/test/fixtures/nominatim_madison_square_garden.json b/test/fixtures/nominatim_madison_square_garden
similarity index 100%
rename from test/fixtures/nominatim_madison_square_garden.json
rename to test/fixtures/nominatim_madison_square_garden
diff --git a/test/fixtures/nominatim_no_results.json b/test/fixtures/nominatim_no_results
similarity index 100%
rename from test/fixtures/nominatim_no_results.json
rename to test/fixtures/nominatim_no_results
diff --git a/test/fixtures/yahoo_error.json b/test/fixtures/yahoo_error
similarity index 100%
rename from test/fixtures/yahoo_error.json
rename to test/fixtures/yahoo_error
diff --git a/test/fixtures/yahoo_invalid_key.json b/test/fixtures/yahoo_invalid_key
similarity index 100%
rename from test/fixtures/yahoo_invalid_key.json
rename to test/fixtures/yahoo_invalid_key
diff --git a/test/fixtures/yahoo_madison_square_garden.json b/test/fixtures/yahoo_madison_square_garden
similarity index 100%
rename from test/fixtures/yahoo_madison_square_garden.json
rename to test/fixtures/yahoo_madison_square_garden
diff --git a/test/fixtures/yahoo_no_results.json b/test/fixtures/yahoo_no_results
similarity index 100%
rename from test/fixtures/yahoo_no_results.json
rename to test/fixtures/yahoo_no_results
diff --git a/test/fixtures/yahoo_over_limit.json b/test/fixtures/yahoo_over_limit
similarity index 100%
rename from test/fixtures/yahoo_over_limit.json
rename to test/fixtures/yahoo_over_limit
diff --git a/test/fixtures/yandex_invalid_key.json b/test/fixtures/yandex_invalid_key
similarity index 100%
rename from test/fixtures/yandex_invalid_key.json
rename to test/fixtures/yandex_invalid_key
diff --git a/test/fixtures/yandex_kremlin.json b/test/fixtures/yandex_kremlin
similarity index 100%
rename from test/fixtures/yandex_kremlin.json
rename to test/fixtures/yandex_kremlin
diff --git a/test/fixtures/yandex_no_results.json b/test/fixtures/yandex_no_results
similarity index 100%
rename from test/fixtures/yandex_no_results.json
rename to test/fixtures/yandex_no_results
diff --git a/test/test_helper.rb b/test/test_helper.rb
index f1b526c1..6fca5010 100644
--- a/test/test_helper.rb
+++ b/test/test_helper.rb
@@ -73,7 +73,11 @@ require "geocoder/lookups/base"
 module Geocoder
   module Lookup
     class Base
-      private #-----------------------------------------------------------------
+      private
+      def fixture_exists?(filename)
+        File.exist?(File.join("test", "fixtures", filename))
+      end
+
       def read_fixture(file)
         filepath = File.join("test", "fixtures", file)
         s = File.read(filepath).strip.gsub(/\n\s*/, "")
@@ -83,140 +87,56 @@ module Geocoder
         end
         s
       end
-    end
-
-    class Google < Base
-      private #-----------------------------------------------------------------
-      def make_api_request(query)
-        raise TimeoutError if query.text == "timeout"
-        raise SocketError if query.text == "socket_error"
-        file = case query.text
-          when "no results";   :no_results
-          when "no locality";  :no_locality
-          when "no city data"; :no_city_data
-          else                 :madison_square_garden
-        end
-        read_fixture "google_#{file}.json"
-      end
-    end
-
-    class GooglePremier < Google
-    end
 
-    class Yahoo < Base
-      private #-----------------------------------------------------------------
-      def make_api_request(query)
-        raise TimeoutError if query.text == "timeout"
-        raise SocketError if query.text == "socket_error"
-        file = case query.text
-          when "no results"; :no_results
-          when "over limit"; :over_limit
-          when "invalid key"; :invalid_key
-          when "error";      :error
-          else               :madison_square_garden
-        end
-        read_fixture "yahoo_#{file}.json"
+      def default_fixture_filename
+        "#{fixture_prefix}_madison_square_garden"
       end
-    end
 
-    class Yandex < Base
-      private #-----------------------------------------------------------------
-      def make_api_request(query)
-        raise TimeoutError if query.text == "timeout"
-        raise SocketError if query.text == "socket_error"
-        file = case query.text
-          when "no results";  :no_results
-          when "invalid key"; :invalid_key
-          else                :kremlin
-        end
-        read_fixture "yandex_#{file}.json"
+      def fixture_prefix
+        handle
       end
-    end
 
-    class GeocoderCa < Base
-      private #-----------------------------------------------------------------
       def make_api_request(query)
         raise TimeoutError if query.text == "timeout"
         raise SocketError if query.text == "socket_error"
         if query.reverse_geocode?
-          read_fixture "geocoder_ca_reverse.json"
+          filename = "#{fixture_prefix}_reverse"
         else
-          file = case query.text
-            when "no results";  :no_results
-            else                :madison_square_garden
-          end
-          read_fixture "geocoder_ca_#{file}.json"
+          filename = "#{fixture_prefix}_#{query.text.gsub(" ", "_")}"
         end
-      end
-    end
-
-    class Freegeoip < Base
-      private #-----------------------------------------------------------------
-      def make_api_request(query)
-        raise TimeoutError if query.text == "timeout"
-        raise SocketError if query.text == "socket_error"
-        file = case query.text
-          when "no results";  :no_results
-          else                "74_200_247_59"
+        if fixture_exists?(filename)
+          read_fixture "#{filename}"
+        else
+          read_fixture default_fixture_filename
         end
-        read_fixture "freegeoip_#{file}.json"
       end
     end
 
-    class Maxmind < Base
-      private #-----------------------------------------------------------------
-      def make_api_request(query)
-        raise TimeoutError if query.text == "timeout"
-        raise SocketError if query.text == "socket_error"
-        file = case query.text
-          when "no results";  :no_results
-          when "invalid key"; :invalid_key
-          else                "74_200_247_59"
-        end
-        read_fixture "maxmind_#{file}.txt"
+    class GooglePremier
+      private
+      def fixture_prefix
+        "google"
       end
     end
 
-    class Bing < Base
-      private #-----------------------------------------------------------------
-      def make_api_request(query)
-        raise TimeoutError if query.text == "timeout"
-        raise SocketError if query.text == "socket_error"
-        if query.reverse_geocode?
-          read_fixture "bing_reverse.json"
-        else
-          file = case query.text
-            when "no results";  :no_results
-            else                :madison_square_garden
-          end
-          read_fixture "bing_#{file}.json"
-        end
+    class Yandex
+      private
+      def default_fixture_filename
+        "yandex_kremlin"
       end
     end
 
-    class Nominatim < Base
-      private #-----------------------------------------------------------------
-      def make_api_request(query)
-        raise TimeoutError if query.text == "timeout"
-        raise SocketError if query.text == "socket_error"
-        file = case query.text
-          when "no results";  :no_results
-          else                :madison_square_garden
-        end
-        read_fixture "nominatim_#{file}.json"
+    class Freegeoip
+      private
+      def default_fixture_filename
+        "freegeoip_74_200_247_59"
       end
     end
 
-    class Mapquest < Base
-      private #-----------------------------------------------------------------
-      def make_api_request(query)
-        raise TimeoutError if query.text == "timeout"
-        raise SocketError if query.text == "socket_error"
-        file = case query.text
-          when "no results";  :no_results
-          else                :madison_square_garden
-        end
-        read_fixture "mapquest_#{file}.json"
+    class Maxmind
+      private
+      def default_fixture_filename
+        "maxmind_74_200_247_59"
       end
     end
 
-- 
GitLab