From adb31f09315e76965ea5925ff72b5e4b32aa94c0 Mon Sep 17 00:00:00 2001 From: Alex Reisner <alex@alexreisner.com> Date: Thu, 17 Mar 2011 10:19:18 -0400 Subject: [PATCH] Move Geocoder::Model to separate file. --- lib/geocoder.rb | 1 + lib/geocoder/model.rb | 75 +++++++++++++++++++++++++++++++++++++++++ lib/geocoder/railtie.rb | 60 ++------------------------------- 3 files changed, 79 insertions(+), 57 deletions(-) create mode 100644 lib/geocoder/model.rb diff --git a/lib/geocoder.rb b/lib/geocoder.rb index 4eee5874..d03de3e5 100644 --- a/lib/geocoder.rb +++ b/lib/geocoder.rb @@ -1,6 +1,7 @@ require "geocoder/configuration" require "geocoder/calculations" require "geocoder/cache" +require "geocoder/model" require "geocoder/request" module Geocoder diff --git a/lib/geocoder/model.rb b/lib/geocoder/model.rb new file mode 100644 index 00000000..d8dcbfee --- /dev/null +++ b/lib/geocoder/model.rb @@ -0,0 +1,75 @@ +require 'geocoder' + +module Geocoder + + ## + # Methods for invoking Geocoder in a model. + # + module Model + module 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 + + 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 + private + def geocoder_file_name; "active_record"; end + def geocoder_module_name; "ActiveRecord"; end + end + + module Mongoid + include Base + private + def geocoder_file_name; "mongoid"; end + def geocoder_module_name; "Mongoid"; end + end + end +end diff --git a/lib/geocoder/railtie.rb b/lib/geocoder/railtie.rb index 4745c245..62cc2516 100644 --- a/lib/geocoder/railtie.rb +++ b/lib/geocoder/railtie.rb @@ -1,4 +1,5 @@ require 'geocoder' +require 'geocoder/model' module Geocoder if defined? Rails::Railtie @@ -17,63 +18,8 @@ module Geocoder class Railtie def self.insert - return unless defined?(::ActiveRecord) - ::ActiveRecord::Base.extend(ModelMethods) - end - end - - ## - # Methods available in the model class before Geocoder is invoked. - # - module ModelMethods - - ## - # 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 - - def geocoder_options - @geocoder_options - end - - - private # ---------------------------------------------------------------- - - def geocoder_init(options) - unless geocoder_initialized? - @geocoder_options = {} - require 'geocoder/orms/active_record' - include Geocoder::Orm::ActiveRecord - end - @geocoder_options.merge! options - end - - def geocoder_initialized? - begin - included_modules.include? Geocoder::Orm::ActiveRecord - rescue NameError - false + if defined?(::ActiveRecord) + ::ActiveRecord::Base.extend(Model::ActiveRecord) end end end -- GitLab