From 3846b15f44193c96074bd75a4f737e3414c96f0e Mon Sep 17 00:00:00 2001
From: Alex Reisner <alex@alexreisner.com>
Date: Thu, 31 Mar 2011 17:57:43 -0400
Subject: [PATCH] Split modules into separate files.

---
 lib/geocoder.rb                      |   3 +-
 lib/geocoder/model.rb                | 110 ---------------------------
 lib/geocoder/models/active_record.rb |  41 ++++++++++
 lib/geocoder/models/base.rb          |  44 +++++++++++
 lib/geocoder/models/mongoid.rb       |  47 ++++++++++++
 lib/geocoder/railtie.rb              |   2 +-
 6 files changed, 135 insertions(+), 112 deletions(-)
 delete mode 100644 lib/geocoder/model.rb
 create mode 100644 lib/geocoder/models/active_record.rb
 create mode 100644 lib/geocoder/models/base.rb
 create mode 100644 lib/geocoder/models/mongoid.rb

diff --git a/lib/geocoder.rb b/lib/geocoder.rb
index d03de3e5..9e1f1575 100644
--- a/lib/geocoder.rb
+++ b/lib/geocoder.rb
@@ -1,8 +1,9 @@
 require "geocoder/configuration"
 require "geocoder/calculations"
 require "geocoder/cache"
-require "geocoder/model"
 require "geocoder/request"
+require "geocoder/models/active_record"
+require "geocoder/models/mongoid"
 
 module Geocoder
   extend self
diff --git a/lib/geocoder/model.rb b/lib/geocoder/model.rb
deleted file mode 100644
index 752ee821..00000000
--- a/lib/geocoder/model.rb
+++ /dev/null
@@ -1,110 +0,0 @@
-require 'geocoder'
-
-module Geocoder
-
-  ##
-  # Methods for invoking Geocoder in a model.
-  #
-  module Model
-    module Base
-
-      def geocoder_options
-        @geocoder_options
-      end
-
-      private # ----------------------------------------------------------------
-
-      def geocoder_init(options)
-        unless geocoder_initialized?
-          @geocoder_options = {}
-          require "geocoder/orms/#{geocoder_file_name}"
-          include eval("Geocoder::Orm::" + geocoder_module_name)
-        end
-        @geocoder_options.merge! options
-      end
-
-      def geocoder_initialized?
-        begin
-          included_modules.include? eval("Geocoder::Orm::" + geocoder_module_name)
-        rescue NameError
-          false
-        end
-      end
-    end
-
-    module ActiveRecord
-      include Base
-
-      ##
-      # Set attribute names and include the Geocoder module.
-      #
-      def geocoded_by(address_attr, options = {}, &block)
-        geocoder_init(
-          :geocode       => true,
-          :user_address  => address_attr,
-          :latitude      => options[:latitude]  || :latitude,
-          :longitude     => options[:longitude] || :longitude,
-          :geocode_block => block
-        )
-      end
-
-      ##
-      # Set attribute names and include the Geocoder module.
-      #
-      def reverse_geocoded_by(latitude_attr, longitude_attr, options = {}, &block)
-        geocoder_init(
-          :reverse_geocode => true,
-          :fetched_address => options[:address] || :address,
-          :latitude        => latitude_attr,
-          :longitude       => longitude_attr,
-          :reverse_block   => block
-        )
-      end
-
-      private
-      def geocoder_file_name;   "active_record"; end
-      def geocoder_module_name; "ActiveRecord"; end
-    end
-
-    module Mongoid
-      include Base
-
-      ##
-      # Set attribute names and include the Geocoder module.
-      #
-      def geocoded_by(address_attr, options = {}, &block)
-        geocoder_init(
-          :geocode       => true,
-          :user_address  => address_attr,
-          :coordinates   => options[:coordinates] || :coordinates,
-          :geocode_block => block
-        )
-      end
-
-      ##
-      # Set attribute names and include the Geocoder module.
-      #
-      def reverse_geocoded_by(coordinates_attr, options = {}, &block)
-        geocoder_init(
-          :reverse_geocode => true,
-          :fetched_address => options[:address] || :address,
-          :coordinates     => coordinates_attr,
-          :reverse_block   => block
-        )
-      end
-
-      def self.included(base); base.extend(self); end
-      private
-      def geocoder_file_name;   "mongoid"; end
-      def geocoder_module_name; "Mongoid"; end
-
-      def geocoder_init(options)
-        super(options)
-
-        # create 2d index
-        index [[ geocoder_options[:coordinates], Mongo::GEO2D ]],
-          :min => -180, :max => 180
-      end
-    end
-  end
-end
diff --git a/lib/geocoder/models/active_record.rb b/lib/geocoder/models/active_record.rb
new file mode 100644
index 00000000..67a17106
--- /dev/null
+++ b/lib/geocoder/models/active_record.rb
@@ -0,0 +1,41 @@
+require 'geocoder/models/base'
+
+module Geocoder
+  module Model
+    module ActiveRecord
+      include Base
+
+      ##
+      # Set attribute names and include the Geocoder module.
+      #
+      def geocoded_by(address_attr, options = {}, &block)
+        geocoder_init(
+          :geocode       => true,
+          :user_address  => address_attr,
+          :latitude      => options[:latitude]  || :latitude,
+          :longitude     => options[:longitude] || :longitude,
+          :geocode_block => block
+        )
+      end
+
+      ##
+      # Set attribute names and include the Geocoder module.
+      #
+      def reverse_geocoded_by(latitude_attr, longitude_attr, options = {}, &block)
+        geocoder_init(
+          :reverse_geocode => true,
+          :fetched_address => options[:address] || :address,
+          :latitude        => latitude_attr,
+          :longitude       => longitude_attr,
+          :reverse_block   => block
+        )
+      end
+
+
+      private # --------------------------------------------------------------
+
+      def geocoder_file_name;   "active_record"; end
+      def geocoder_module_name; "ActiveRecord"; end
+    end
+  end
+end
diff --git a/lib/geocoder/models/base.rb b/lib/geocoder/models/base.rb
new file mode 100644
index 00000000..aeaf4d9d
--- /dev/null
+++ b/lib/geocoder/models/base.rb
@@ -0,0 +1,44 @@
+require 'geocoder'
+
+module Geocoder
+
+  ##
+  # Methods for invoking Geocoder in a model.
+  #
+  module Model
+    module Base
+
+      def geocoder_options
+        @geocoder_options
+      end
+
+      def geocoded_by
+        fail
+      end
+
+      def reverse_geocoded_by
+        fail
+      end
+
+
+      private # ----------------------------------------------------------------
+
+      def geocoder_init(options)
+        unless geocoder_initialized?
+          @geocoder_options = {}
+          require "geocoder/orms/#{geocoder_file_name}"
+          include eval("Geocoder::Orm::" + geocoder_module_name)
+        end
+        @geocoder_options.merge! options
+      end
+
+      def geocoder_initialized?
+        begin
+          included_modules.include? eval("Geocoder::Orm::" + geocoder_module_name)
+        rescue NameError
+          false
+        end
+      end
+    end
+  end
+end
diff --git a/lib/geocoder/models/mongoid.rb b/lib/geocoder/models/mongoid.rb
new file mode 100644
index 00000000..a3d2b1ff
--- /dev/null
+++ b/lib/geocoder/models/mongoid.rb
@@ -0,0 +1,47 @@
+require 'geocoder/models/base'
+
+module Geocoder
+  module Model
+    module Mongoid
+      include Base
+
+      def self.included(base); base.extend(self); end
+
+      ##
+      # Set attribute names and include the Geocoder module.
+      #
+      def geocoded_by(address_attr, options = {}, &block)
+        geocoder_init(
+          :geocode       => true,
+          :user_address  => address_attr,
+          :coordinates   => options[:coordinates] || :coordinates,
+          :geocode_block => block
+        )
+      end
+
+      ##
+      # Set attribute names and include the Geocoder module.
+      #
+      def reverse_geocoded_by(coordinates_attr, options = {}, &block)
+        geocoder_init(
+          :reverse_geocode => true,
+          :fetched_address => options[:address] || :address,
+          :coordinates     => coordinates_attr,
+          :reverse_block   => block
+        )
+      end
+
+
+      private # --------------------------------------------------------------
+
+      def geocoder_file_name;   "mongoid"; end
+      def geocoder_module_name; "Mongoid"; end
+
+      def geocoder_init(options)
+        super(options)
+        index [[ geocoder_options[:coordinates], Mongo::GEO2D ]],
+          :min => -180, :max => 180 # create 2d index
+      end
+    end
+  end
+end
diff --git a/lib/geocoder/railtie.rb b/lib/geocoder/railtie.rb
index 62cc2516..e39eb9d9 100644
--- a/lib/geocoder/railtie.rb
+++ b/lib/geocoder/railtie.rb
@@ -1,5 +1,5 @@
 require 'geocoder'
-require 'geocoder/model'
+require 'geocoder/models/active_record'
 
 module Geocoder
   if defined? Rails::Railtie
-- 
GitLab