Skip to content
Snippets Groups Projects
geocoder.rb 1.16 KiB
Newer Older
require "geocoder/calculations"
require "geocoder/lookup"
require "geocoder/active_record"

##
# Add geocoded_by method to ActiveRecord::Base so Geocoder is accessible.
#
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(
      :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(
      :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