]> git.openstreetmap.org Git - rails.git/blobdiff - app/controllers/changeset_controller.rb
api06: simplify exception handling and add exception handling to the diff
[rails.git] / app / controllers / changeset_controller.rb
index f91ae09bfe7bdd1ef1dddcd357c37e564c4a8f8e..322ce79f7552f024a382061df1e22554650911e0 100644 (file)
@@ -45,6 +45,30 @@ class ChangesetController < ApplicationController
       map { |memb| [memb[0], ids[memb[0]][memb[1].to_i] || memb[1], memb[2]] }
     return r
   end
+  
+  def read
+    begin
+      changeset = Changeset.find(params[:id])
+      render :text => changeset.to_xml.to_s, :content_type => "text/xml"
+    rescue ActiveRecord::RecordNotFound
+      render :nothing => true, :status => :not_found
+    end
+  end
+  
+  def close 
+    begin
+      if not request.put?
+        render :nothing => true, :status => :method_not_allowed
+        return
+      end
+      changeset = Changeset.find(params[:id])
+      changeset.open = false
+      changeset.save
+      render :nothing => true
+    rescue ActiveRecord::RecordNotFound
+      render :nothing => true, :status => :not_found
+    end
+  end
 
   def upload
     if not request.put?
@@ -143,7 +167,7 @@ class ChangesetController < ApplicationController
       doc.find('//osm/delete/way').each do |nd|
        elem = XML::Node.new 'way'
        way = Way.find(nd['id'])
-       way.delete_with_relations_and_history(@user)
+       way.delete_with_history(@user)
        elem['old_id'] = elem['new_id'] = way.id.to_s
        elem['new_version'] = way.version.to_s
        root << elem
@@ -160,5 +184,8 @@ class ChangesetController < ApplicationController
     end
 
     render :text => res.to_s, :content_type => "text/xml"
+
+  rescue OSM::APIError => ex
+    render ex.render_opts
   end
 end