Fixup some error handling in map bugs
authorKai Krueger <kakrueger@gmail.com>
Wed, 17 Mar 2010 23:39:59 +0000 (23:39 +0000)
committerKai Krueger <kakrueger@gmail.com>
Wed, 17 Mar 2010 23:39:59 +0000 (23:39 +0000)
app/controllers/map_bugs_controller.rb
app/views/map_bugs/read.rss.builder [new file with mode: 0644]

index 596ec4d5c58cafec2f4c019304196884de5bc352..16d127641493236b78dd8dc7e183f38f29cbd1f8 100644 (file)
@@ -100,6 +100,8 @@ class MapBugsController < ApplicationController
        id = params['id'].to_i
 
        bug = MapBug.find_by_id(id);
+       raise OSM::APINotFoundError unless bug
+       raise OSM::APIAlreadyDeletedError unless bug.visible
 
        bug_comment = add_comment(bug, params['text'], name);
 
@@ -112,6 +114,9 @@ class MapBugsController < ApplicationController
        id = params['id'].to_i
 
        bug = MapBug.find_by_id(id);
+       raise OSM::APINotFoundError unless bug
+       raise OSM::APIAlreadyDeletedError unless bug.visible
+
        bug.close_bug;
 
        render_ok
@@ -130,9 +135,11 @@ class MapBugsController < ApplicationController
 
   def read
        @bug = MapBug.find(params['id'])
-    render :text => "", :status => :gone unless @bug.visible
+       raise OSM::APINotFoundError unless @bug
+       raise OSM::APIAlreadyDeletedError unless @bug.visible
+
        respond_to do |format|
-         format.rss
+         format.rss
          format.xml
          format.json { render :json => @bug.to_json(:methods => [:lat, :lon], :only => [:id, :status, :date_created], :include => { :map_bug_comment => { :only => [:commenter_name, :date_created, :comment]}}) }       
        end
@@ -140,6 +147,8 @@ class MapBugsController < ApplicationController
 
   def delete
        bug = MapBug.find(params['id'])
+       raise OSM::APINotFoundError unless @bug
+       raise OSM::APIAlreadyDeletedError unless @bug.visible
        bug.status = "hidden"
        bug.save
        render :text => "ok\n", :content_type => "text/html" 
diff --git a/app/views/map_bugs/read.rss.builder b/app/views/map_bugs/read.rss.builder
new file mode 100644 (file)
index 0000000..f8503b1
--- /dev/null
@@ -0,0 +1,32 @@
+xml.instruct!
+
+xml.rss("version" => "2.0", 
+        "xmlns:geo" => "http://www.w3.org/2003/01/geo/wgs84_pos#",
+        "xmlns:georss" => "http://www.georss.org/georss") do
+  xml.channel do
+    xml.title "OpenStreetBugs"
+    xml.description t('bugs.rss.description')
+    xml.link url_for(:controller => "site", :action => "index", :only_path => false)
+
+    xml.item do
+               if @bug.status == "closed"
+                       xml.title t('bugs.rss.closed', :place => @bug.nearby_place)     
+               else if @bug.map_bug_comment.length > 1
+                       xml.title t('bugs.rss.comment', :place => @bug.nearby_place)
+               else
+                       xml.title t('bugs.rss.new', :place => @bug.nearby_place)
+               end     end
+        
+        xml.link url_for(:controller => "browse", :action => "bug", :id => @bug.id, :only_path => false)
+               xml.guid url_for(:controller => "map_bugs", :action => "read", :id => @bug.id, :only_path => false)
+        xml.description  htmlize(@bug.flatten_comment("<br><br>"))
+               if (!@bug.map_bug_comment.empty?)
+               xml.author @bug.map_bug_comment[-1].commenter_name
+               end
+        xml.pubDate @bug.last_changed.to_s(:rfc822)
+          xml.geo :lat, @bug.lat
+          xml.geo :long, @bug.lon
+          xml.georss :point, "#{@bug.lat} #{@bug.lon}"
+       end
+  end
+end