From 63dd486aafbaaa44e9fdcb02c0d06dc9c1d66f27 Mon Sep 17 00:00:00 2001 From: Alex Reisner <alex@alexreisner.com> Date: Fri, 18 Mar 2011 19:26:30 -0400 Subject: [PATCH] Detect when search string is actually coordinates. --- lib/geocoder/lookups/base.rb | 10 +++++++++- test/geocoder_test.rb | 7 +++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/geocoder/lookups/base.rb b/lib/geocoder/lookups/base.rb index 74281f1c..3b449c45 100644 --- a/lib/geocoder/lookups/base.rb +++ b/lib/geocoder/lookups/base.rb @@ -20,7 +20,8 @@ module Geocoder # for reverse geocoding. # def search(*args) - if res = result(args.join(","), args.size == 2) + reverse = (args.size == 2) || coordinates?(args.first) + if res = result(args.join(","), reverse) result_class.new(res) end end @@ -116,6 +117,13 @@ module Geocoder !!(ip == "0.0.0.0" or ip.match(/^127/)) end + ## + # Does the given string look like latitude/longitude coordinates? + # + def coordinates?(value) + !!value.to_s.match(/^[0-9\.\-]+, ?[0-9\.\-]+$/) + end + ## # Simulate ActiveSupport's Object#to_query. # Removes any keys with nil value. diff --git a/test/geocoder_test.rb b/test/geocoder_test.rb index 782806ef..925efb90 100644 --- a/test/geocoder_test.rb +++ b/test/geocoder_test.rb @@ -256,6 +256,13 @@ class GeocoderTest < Test::Unit::TestCase assert_match "appid=MY_KEY", g.send(:query_url, "Madison Square Garden, New York, NY 10001, United States") end + def test_detection_of_coordinates_in_search_string + Geocoder::Configuration.lookup = :geocoder_ca + result = Geocoder.search("51.178844, -1.826189") + assert_not_nil result.city + # city only present if reverse geocoding search performed + end + private # ------------------------------------------------------------------ -- GitLab