require "geocoder/configuration" require "geocoder/calculations" require "geocoder/lookup" require "geocoder/result" require "geocoder/active_record" module Geocoder extend self ## # Alias for Geocoder::Lookup.search. # def search(*args) Lookup.search(*args) end # exception classes class Error < StandardError; end 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