Module: Geocoder::Store::ActiveRecord

Includes:
Base
Defined in:
lib/geocoder/stores/active_record.rb

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Base

#bearing_from, #bearing_to, #distance_to, #geocoded?, #nearbys, #to_coordinates

Class Method Details

.included(base) ⇒ Object

Implementation of ‘included’ hook method.



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/geocoder/stores/active_record.rb', line 13

def self.included(base)
  base.extend ClassMethods
  base.class_eval do

    # scope: geocoded objects
    scope :geocoded, lambda {
      {:conditions => "#{geocoder_options[:latitude]} IS NOT NULL " +
        "AND #{geocoder_options[:longitude]} IS NOT NULL"}}

    # scope: not-geocoded objects
    scope :not_geocoded, lambda {
      {:conditions => "#{geocoder_options[:latitude]} IS NULL " +
        "OR #{geocoder_options[:longitude]} IS NULL"}}

    ##
    # Find all objects within a radius of the given location.
    # Location may be either a string to geocode or an array of
    # coordinates (<tt>[lat,lon]</tt>). Also takes an options hash
    # (see Geocoder::Orm::ActiveRecord::ClassMethods.near_scope_options
    # for details).
    #
    scope :near, lambda{ |location, *args|
      latitude, longitude = Geocoder::Calculations.extract_coordinates(location)
      if latitude and longitude
        near_scope_options(latitude, longitude, *args)
      else
        where(:id => false) # no results if no lat/lon given
      end
    }
  end
end

Instance Method Details

#geocodeObject Also known as: fetch_coordinates

Look up coordinates and assign to latitude and longitude attributes (or other as specified in geocoded_by). Returns coordinates (array).



194
195
196
197
198
199
200
201
202
203
# File 'lib/geocoder/stores/active_record.rb', line 194

def geocode
  do_lookup(false) do |o,rs|
    r = rs.first
    unless r.latitude.nil? or r.longitude.nil?
      o.send :write_attribute, self.class.geocoder_options[:latitude],  r.latitude
      o.send :write_attribute, self.class.geocoder_options[:longitude], r.longitude
    end
    r.coordinates
  end
end

#reverse_geocodeObject Also known as: fetch_address

Look up address and assign to address attribute (or other as specified in reverse_geocoded_by). Returns address (string).



211
212
213
214
215
216
217
218
219
# File 'lib/geocoder/stores/active_record.rb', line 211

def reverse_geocode
  do_lookup(true) do |o,rs|
    r = rs.first
    unless r.address.nil?
      o.send :write_attribute, self.class.geocoder_options[:fetched_address], r.address
    end
    r.address
  end
end