Module: Geokit::Cached::Model

Defined in:
lib/geokit/cached/model.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



5
6
7
8
9
10
11
12
13
# File 'lib/geokit/cached/model.rb', line 5

def self.included(base)
  base.class_eval do
    validates_presence_of :address
    validates_presence_of :lat
    validates_presence_of :lng
    validates_numericality_of :lat
    validates_numericality_of :lng
  end
end

Instance Method Details

#by_google?Boolean

Returns:

  • (Boolean)


51
52
53
# File 'lib/geokit/cached/model.rb', line 51

def by_google?
  provider == 'google'
end

#cache!(attributes) ⇒ Object



15
16
17
18
19
# File 'lib/geokit/cached/model.rb', line 15

def cache!(attributes)
  self.attributes = attributes
  self.city = convert_to_utf8(self.city)
  save if new_record? || changed?
end

#changed?Boolean

Returns:

  • (Boolean)


59
60
61
# File 'lib/geokit/cached/model.rb', line 59

def changed?
  lat_changed? || lng_changed? || changed_to_google? || city_changed?
end

#changed_to_google?Boolean

Returns:

  • (Boolean)


55
56
57
# File 'lib/geokit/cached/model.rb', line 55

def changed_to_google?
  by_google? && provider_changed?
end

#convert_to_utf8(str) ⇒ Object



71
72
73
74
75
76
77
78
# File 'lib/geokit/cached/model.rb', line 71

def convert_to_utf8(str)
  begin
    Iconv.new('UTF-8', 'UTF-8').iconv(str)
  rescue Iconv::Failure => iconv_exception
    Iconv.new('UTF-8', 'ISO-8859-1').iconv(str)
    iconv_exception.success
  end
end

#fake_geolocObject



37
38
39
40
41
# File 'lib/geokit/cached/model.rb', line 37

def fake_geoloc
  geoloc = Geokit::GeoLoc.new
  geoloc.lat, geoloc.lng, geoloc.provider, geoloc.city, geoloc.success = lat, lng, provider, city, success?
  geoloc
end

#geoObject



33
34
35
# File 'lib/geokit/cached/model.rb', line 33

def geo
  @geo ||= Geokit::Geocoders::MultiGeocoder.geocode(address)
end

#geocoding_occured?Boolean

Returns:

  • (Boolean)


63
64
65
# File 'lib/geokit/cached/model.rb', line 63

def geocoding_occured?
  !@geo.nil?
end

#geolocObject



47
48
49
# File 'lib/geokit/cached/model.rb', line 47

def geoloc
  successful_geoloc || fake_geoloc
end

#success?Boolean

Returns:

  • (Boolean)


67
68
69
# File 'lib/geokit/cached/model.rb', line 67

def success?
  !!(lat and lng)
end

#successful_geolocObject



43
44
45
# File 'lib/geokit/cached/model.rb', line 43

def successful_geoloc
  geo if geocoding_occured? && geo.success
end

#update!Object



21
22
23
24
25
26
# File 'lib/geokit/cached/model.rb', line 21

def update!
  if !by_google? && geo.success
    self.lat, self.lng, self.provider, self.city = geo.lat, geo.lng, geo.provider, convert_to_utf8(geo.city)
    save if changed?
  end
end

#update_and_return!Object



28
29
30
31
# File 'lib/geokit/cached/model.rb', line 28

def update_and_return!
  update!
  geoloc
end