diff --git a/lib/geocoder.rb b/lib/geocoder.rb index 583924b906e788157364b7506946552ede471731..3b28027fb8e1ea7924f0f9e2c265e5a31b4e9a28 100644 --- a/lib/geocoder.rb +++ b/lib/geocoder.rb @@ -3,6 +3,7 @@ require "geocoder/calculations" require "geocoder/lookup" require "geocoder/result" require "geocoder/active_record" +require "geocoder/railtie" module Geocoder extend self @@ -19,46 +20,4 @@ module Geocoder class ConfigurationError < Error; end end - -## -# Add methods to ActiveRecord::Base so Geocoder is accessible by models. -# -ActiveRecord::Base.class_eval do - - ## - # Set attribute names and include the Geocoder module. - # - def self.geocoded_by(address_attr, options = {}) - _geocoder_init( - :user_address => address_attr, - :latitude => options[:latitude] || :latitude, - :longitude => options[:longitude] || :longitude - ) - end - - ## - # Set attribute names and include the Geocoder module. - # - def self.reverse_geocoded_by(latitude_attr, longitude_attr, options = {}) - _geocoder_init( - :fetched_address => options[:address] || :address, - :latitude => latitude_attr, - :longitude => longitude_attr - ) - end - - def self._geocoder_init(options) - unless _geocoder_initialized? - class_inheritable_reader :geocoder_options - class_inheritable_hash_writer :geocoder_options - end - self.geocoder_options = options - unless _geocoder_initialized? - include Geocoder::ActiveRecord - end - end - - def self._geocoder_initialized? - included_modules.include? Geocoder::ActiveRecord - end -end +Geocoder::Railtie.insert diff --git a/lib/geocoder/railtie.rb b/lib/geocoder/railtie.rb new file mode 100644 index 0000000000000000000000000000000000000000..20bad2412df726763add39ad3cda228867700ca6 --- /dev/null +++ b/lib/geocoder/railtie.rb @@ -0,0 +1,68 @@ +require 'geocoder' + +module Geocoder + if defined? Rails::Railtie + require 'rails' + class Railtie < Rails::Railtie + initializer 'geocoder.insert_into_active_record' do + ActiveSupport.on_load :active_record do + Geocoder::Railtie.insert + end + end + rake_tasks do + load "tasks/geocoder.rake" + end + end + end + + class Railtie + def self.insert + + return unless defined?(::ActiveRecord) + + ## + # Add methods to ActiveRecord::Base so Geocoder is accessible by models. + # + ::ActiveRecord::Base.class_eval do + + ## + # Set attribute names and include the Geocoder module. + # + def self.geocoded_by(address_attr, options = {}) + _geocoder_init( + :user_address => address_attr, + :latitude => options[:latitude] || :latitude, + :longitude => options[:longitude] || :longitude + ) + end + + ## + # Set attribute names and include the Geocoder module. + # + def self.reverse_geocoded_by(latitude_attr, longitude_attr, options = {}) + _geocoder_init( + :fetched_address => options[:address] || :address, + :latitude => latitude_attr, + :longitude => longitude_attr + ) + end + + def self._geocoder_init(options) + unless _geocoder_initialized? + class_inheritable_reader :geocoder_options + class_inheritable_hash_writer :geocoder_options + end + self.geocoder_options = options + unless _geocoder_initialized? + include Geocoder::ActiveRecord + end + end + + def self._geocoder_initialized? + included_modules.include? Geocoder::ActiveRecord + end + end + + end + end +end