From c4256232dcf6af9429191c250a09195dc8d3753a Mon Sep 17 00:00:00 2001
From: Alex Reisner <alex@alexreisner.com>
Date: Fri, 4 Feb 2011 12:21:54 -0500
Subject: [PATCH] Add ability to configure timeout duration.

---
 README.rdoc                   | 5 ++++-
 lib/geocoder.rb               | 1 +
 lib/geocoder/configuration.rb | 8 ++++++++
 lib/geocoder/lookup.rb        | 2 +-
 4 files changed, 14 insertions(+), 2 deletions(-)
 create mode 100644 lib/geocoder/configuration.rb

diff --git a/README.rdoc b/README.rdoc
index 9e6e0d69..00e41e27 100644
--- a/README.rdoc
+++ b/README.rdoc
@@ -97,8 +97,11 @@ If your model has +address+, +city+, +state+, and +country+ attributes you might
     [address, city, state, country].compact.join(', ')
   end
 
+Please see the code (<tt>lib/geocoder/active_record.rb</tt>) for more methods and detailed information about arguments (eg, working with kilometers).
 
-Please see the code for more methods and detailed information about arguments (eg, working with kilometers).
+You can also set the timeout used for connections to Google's geocoding service. The default is 3 seconds, but if you want to set it to 5 you could put the following in an initializer:
+
+  Geocoder::Configuration.timeout = 5
 
 
 == Reverse Geocoding
diff --git a/lib/geocoder.rb b/lib/geocoder.rb
index 0f1d77af..2cd221ff 100644
--- a/lib/geocoder.rb
+++ b/lib/geocoder.rb
@@ -1,3 +1,4 @@
+require "geocoder/configuration"
 require "geocoder/calculations"
 require "geocoder/lookup"
 require "geocoder/result"
diff --git a/lib/geocoder/configuration.rb b/lib/geocoder/configuration.rb
new file mode 100644
index 00000000..d10e1be8
--- /dev/null
+++ b/lib/geocoder/configuration.rb
@@ -0,0 +1,8 @@
+module Geocoder
+  class Configuration
+    cattr_accessor :timeout
+  end
+end
+
+Geocoder::Configuration.timeout = 3
+
diff --git a/lib/geocoder/lookup.rb b/lib/geocoder/lookup.rb
index 40e0654a..443c5cc0 100644
--- a/lib/geocoder/lookup.rb
+++ b/lib/geocoder/lookup.rb
@@ -61,7 +61,7 @@ module Geocoder
       url = query_url(query, reverse)
       begin
         resp = nil
-        timeout(3) do
+        timeout(Geocoder::Configuration.timeout) do
           Net::HTTP.get_response(URI.parse(url)).body
         end
       rescue SocketError, TimeoutError
-- 
GitLab