From 641b5ffe6d062e88570afc275d6c6f2d9844a489 Mon Sep 17 00:00:00 2001
From: Alex Reisner <alex@alexreisner.com>
Date: Fri, 7 Dec 2012 16:58:25 -0500
Subject: [PATCH] Add Geocoder.config for direct access to hash.

---
 lib/geocoder/configuration.rb | 17 ++++++++++++++++-
 lib/geocoder/lookups/base.rb  |  2 +-
 test/configuration_test.rb    |  3 +++
 3 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/lib/geocoder/configuration.rb b/lib/geocoder/configuration.rb
index e40e2521..30d5f82b 100644
--- a/lib/geocoder/configuration.rb
+++ b/lib/geocoder/configuration.rb
@@ -13,6 +13,20 @@ module Geocoder
     end
   end
 
+  ##
+  # Direct read access to the singleton's config data.
+  #
+  def self.config
+    Configuration.instance.data
+  end
+
+  ##
+  # Direct write access to the singleton's config data.
+  #
+  def self.config=(value)
+    Configuration.instance.data = value
+  end
+
   ##
   # This class handles geocoder Geocoder configuration
   # (geocoding service provider, caching, units of measurement, etc).
@@ -54,7 +68,7 @@ module Geocoder
       :distances
     ]
 
-    attr_reader :data
+    attr_accessor :data
 
     OPTIONS.each do |o|
       define_method o do
@@ -72,6 +86,7 @@ module Geocoder
 
     def set_defaults
       @data = {
+        # geocoding options
         :timeout      => 3,           # geocoding service timeout (secs)
         :lookup       => :google,     # name of street address geocoding service (symbol)
         :ip_lookup    => :freegeoip,  # name of IP address geocoding service (symbol)
diff --git a/lib/geocoder/lookups/base.rb b/lib/geocoder/lookups/base.rb
index db42313b..087bac46 100644
--- a/lib/geocoder/lookups/base.rb
+++ b/lib/geocoder/lookups/base.rb
@@ -151,7 +151,7 @@ module Geocoder
         raise_error(err) or warn "Geocoding API connection cannot be established."
       rescue TimeoutError => err
         raise_error(err) or warn "Geocoding API not responding fast enough " +
-          "(see Geocoder::Configuration.timeout to set limit)."
+          "(use Geocoder.config[:timeout] to set limit)."
       end
 
       ##
diff --git a/test/configuration_test.rb b/test/configuration_test.rb
index 14859bf7..6b85d39a 100644
--- a/test/configuration_test.rb
+++ b/test/configuration_test.rb
@@ -16,11 +16,13 @@ class ConfigurationTest < Test::Unit::TestCase
   def test_setting_with_class_method
     Geocoder::Configuration.units = :test
     assert_equal :test, Geocoder.configure.units
+    assert_equal :test, Geocoder.config[:units]
   end
 
   def test_setting_with_configure_method
     Geocoder.configure.units = :test
     assert_equal :test, Geocoder::Configuration.units
+    assert_equal :test, Geocoder.config[:units]
   end
 
   def test_setting_with_block_syntax
@@ -29,6 +31,7 @@ class ConfigurationTest < Test::Unit::TestCase
     end
     assert_equal :test, Geocoder::Configuration.units
     assert_equal :test, Geocoder.configure.units
+    assert_equal :test, Geocoder.config[:units]
   end
 
   def test_model_configuration
-- 
GitLab