Move caching of reverse geocodes to describe_location
authorTom Hughes <tom@compton.nu>
Wed, 28 Nov 2012 22:44:03 +0000 (22:44 +0000)
committerTom Hughes <tom@compton.nu>
Sat, 1 Dec 2012 18:18:10 +0000 (18:18 +0000)
app/helpers/geocoder_helper.rb
app/models/notifier.rb
app/views/diary_entry/_location.html.erb
app/views/notes/_note.rss.builder
app/views/notes/feed.rss.builder
lib/nominatim.rb [new file with mode: 0644]

index f5519ddc3fcd5cc0eca4d9d8ebc3638141d7eea3..8f662bde73d304e7944b3c1195dca1b2cf407db1 100644 (file)
@@ -22,22 +22,6 @@ module GeocoderHelper
   end
 
   def describe_location(lat, lon, zoom = nil, language = nil)
-    zoom = zoom || 14
-    language = language || request.user_preferred_languages.join(',')
-    url = "http://nominatim.openstreetmap.org/reverse?lat=#{lat}&lon=#{lon}&zoom=#{zoom}&accept-language=#{language}"
-
-    begin
-      response = OSM::Timer.timeout(4) do
-        REXML::Document.new(Net::HTTP.get(URI.parse(url)))
-      end
-    rescue Exception
-      response = nil
-    end
-
-    if response and result = response.get_text("reversegeocode/result")
-      result.to_s
-    else
-      "#{number_with_precision(lat, :precision => 3)}, #{number_with_precision(lon, :precision => 3)}"
-    end
+    Nominatim.describe_location(lat, lon, zoom, language)
   end
 end
index a4eb0d4c3cae5ece94061197d5abe8f3ab87f7c2..ae50fa9b16e1fc339e1721939a6279d22d8aa415 100644 (file)
@@ -126,8 +126,8 @@ class Notifier < ActionMailer::Base
   def note_comment_notification(comment, recipient)
     @locale = recipient.preferred_language_from(I18n.available_locales)
     @noteurl = browse_note_url(comment.note, :host => SERVER_URL)
-    @place = comment.note.nearby_place
-    @comment =comment.body
+    @place = Nominatim.describe_location(comment.note.lat, comment.note.lon, 14, @locale)
+    @comment = comment.body
     @owner = recipient == comment.note.author
     @commenter = comment.author_name
 
index 4779471de2184b8b0c0d879abad9353b79433a76..a3ba473a8a67e54f11e08cfc79f314e9b3a4201a 100644 (file)
@@ -2,8 +2,6 @@
 
 <a href="<%= url_for :controller => 'site', :action => 'index', :lat => location.latitude, :lon => location.longitude, :zoom => 14 %>">
 <abbr class="geo" title="<%= number_with_precision(location.latitude, :precision => 4) %>; <%= number_with_precision(location.longitude, :precision => 4) %>">
-<% cache(:controller => 'diary_entry', :action => 'view', :display_name => location.user.display_name, :id => location.id, :part => "location") do %>
 <%= describe_location location.latitude, location.longitude, 14, location.language_code %>
-<% end %>
 </abbr>
 </a>
index efdae52bb5365e79e31d41c406cb6cbc7947d18f..cffc3f271c2d75ddde6adaf070aebdffae15825c 100644 (file)
@@ -1,13 +1,12 @@
 xml.item do
-  location_string = Rails.cache.fetch("location_description_#{note.lat}_#{note.lon}_#{locale}") do
-    describe_location note.lat, note.lon, 14, locale
-  end 
+  location = describe_location(note.lat, note.lon, 14, locale)
+
   if note.status == "closed"
-    xml.title t('note.rss.closed', :place => location_string)  
+    xml.title t('note.rss.closed', :place => location)
   elsif note.comments.length > 1
-    xml.title t('note.rss.comment', :place => location_string)
+    xml.title t('note.rss.comment', :place => location)
   else
-    xml.title t('note.rss.new', :place => location_string)
+    xml.title t('note.rss.new', :place => location)
   end
 
   xml.link browse_note_url(note)
index ba0e3fbfecdfa5ca6149358e3f4dbe8f961124f6..7113364f01fb2dffa59885529afdde8982267cc7 100644 (file)
@@ -9,16 +9,15 @@ xml.rss("version" => "2.0",
     xml.link url_for(:controller => "site", :action => "index", :only_path => false)
 
     @comments.each do |comment|
-      location_string = Rails.cache.fetch("location_description_#{comment.note.lat}_#{comment.note.lon}_#{locale}") do
-        describe_location comment.note.lat, comment.note.lon, 14, locale
-      end
+      location = describe_location(comment.note.lat, comment.note.lon, 14, locale)
+
       xml.item do
         if comment.event == "closed"
-          xml.title t('note.rss.closed', :place => location_string)    
+          xml.title t('note.rss.closed', :place => location)
         elsif comment.event == "commented"
-          xml.title t('note.rss.comment', :place => location_string)
+          xml.title t('note.rss.comment', :place => location)
         elsif comment.event == "opened"
-          xml.title t('note.rss.new', :place => location_string)
+          xml.title t('note.rss.new', :place => location)
         else
           xml.title "unknown event"
         end
diff --git a/lib/nominatim.rb b/lib/nominatim.rb
new file mode 100644 (file)
index 0000000..5b1c7ac
--- /dev/null
@@ -0,0 +1,24 @@
+module Nominatim
+  def self.describe_location(lat, lon, zoom = nil, language = nil)
+    zoom = zoom || 14
+    language = language || request.user_preferred_languages.join(',')
+
+    Rails.cache.fetch "/nominatim/location/#{lat}/#{lon}/#{zoom}/#{language}" do
+      url = "http://nominatim.openstreetmap.org/reverse?lat=#{lat}&lon=#{lon}&zoom=#{zoom}&accept-language=#{language}"
+
+      begin
+        response = OSM::Timer.timeout(4) do
+          REXML::Document.new(Net::HTTP.get(URI.parse(url)))
+        end
+      rescue Exception
+        response = nil
+      end
+
+      if response and result = response.get_text("reversegeocode/result")
+        result.to_s
+      else
+        "#{number_with_precision(lat, :precision => 3)}, #{number_with_precision(lon, :precision => 3)}"
+      end
+    end
+  end
+end