Skip to content
Snippets Groups Projects
geocoder.rb 1.46 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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)
    
    
      # exception classes
      class Error < StandardError; end
      class ConfigurationError < Error; end
    
    Alex Reisner's avatar
    Alex Reisner committed
    # Add methods to ActiveRecord::Base so Geocoder is accessible by models.
    
    #
    ActiveRecord::Base.class_eval do
    
      ##
      # Set attribute names and include the Geocoder module.
      #
    
    Alex Reisner's avatar
    Alex Reisner committed
      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