]> git.openstreetmap.org Git - rails.git/blobdiff - app/controllers/api/changesets_controller.rb
Switch to using jbuilder for JSON templates
[rails.git] / app / controllers / api / changesets_controller.rb
index 853ee389f087a24a2ef8fdde3ddd1c38662344c9..5f87324e0a63ddaa112e323005b94e49b306aca5 100644 (file)
@@ -1,20 +1,17 @@
 # The ChangesetController is the RESTful interface to Changeset objects
 
 module Api
-  class ChangesetsController < ApplicationController
+  class ChangesetsController < ApiController
     layout "site"
     require "xml/libxml"
 
-    skip_before_action :verify_authenticity_token
     before_action :authorize, :only => [:create, :update, :upload, :close, :subscribe, :unsubscribe]
-    before_action :api_deny_access_handler, :only => [:create, :update, :upload, :close, :subscribe, :unsubscribe, :expand_bbox]
 
     authorize_resource
 
     before_action :require_public_data, :only => [:create, :update, :upload, :close, :subscribe, :unsubscribe]
     before_action :check_api_writable, :only => [:create, :update, :upload, :subscribe, :unsubscribe]
     before_action :check_api_readable, :except => [:create, :update, :upload, :download, :query, :subscribe, :unsubscribe]
-    before_action(:only => [:index, :feed]) { |c| c.check_database_readable(true) }
     around_action :api_call_handle_error
     around_action :api_call_timeout, :except => [:upload]
 
@@ -41,9 +38,9 @@ module Api
     # Return XML giving the basic info about the changeset. Does not
     # return anything about the nodes, ways and relations in the changeset.
     def show
-      changeset = Changeset.find(params[:id])
-
-      render :xml => changeset.to_xml(params[:include_discussion].presence).to_s
+      @changeset = Changeset.find(params[:id])
+      @include_discussion = params[:include_discussion].presence
+      render "changeset"
     end
 
     ##
@@ -96,15 +93,16 @@ module Api
       lat << cs.max_lat unless cs.max_lat.nil?
 
       # collapse the arrays to minimum and maximum
-      cs.min_lon = lon.min
-      cs.min_lat = lat.min
-      cs.max_lon = lon.max
-      cs.max_lat = lat.max
+      cs.min_lon = lon.min.round
+      cs.min_lat = lat.min.round
+      cs.max_lon = lon.max.round
+      cs.max_lat = lat.max.round
 
       # save the larger bounding box and return the changeset, which
       # will include the bigger bounding box.
       cs.save!
-      render :xml => cs.to_xml.to_s
+      @changeset = cs
+      render "changeset"
     end
 
     ##
@@ -219,18 +217,9 @@ module Api
       # sort and limit the changesets
       changesets = changesets.order("created_at DESC").limit(100)
 
-      # preload users, tags and comments
-      changesets = changesets.preload(:user, :changeset_tags, :comments)
-
-      # create the results document
-      results = OSM::API.new.get_xml_doc
-
-      # add all matching changesets to the XML results document
-      changesets.order("created_at DESC").limit(100).each do |cs|
-        results.root << cs.to_xml_node
-      end
-
-      render :xml => results.to_s
+      # preload users, tags and comments, and render result
+      @changesets = changesets.preload(:user, :changeset_tags, :comments)
+      render "changesets"
     end
 
     ##
@@ -245,12 +234,12 @@ module Api
       # request *must* be a PUT.
       assert_method :put
 
-      changeset = Changeset.find(params[:id])
+      @changeset = Changeset.find(params[:id])
       new_changeset = Changeset.from_xml(request.raw_post)
 
-      check_changeset_consistency(changeset, current_user)
-      changeset.update_from(new_changeset, current_user)
-      render :xml => changeset.to_xml.to_s
+      check_changeset_consistency(@changeset, current_user)
+      @changeset.update_from(new_changeset, current_user)
+      render "changeset"
     end
 
     ##
@@ -270,7 +259,8 @@ module Api
       changeset.subscribers << current_user
 
       # Return a copy of the updated changeset
-      render :xml => changeset.to_xml.to_s
+      @changeset = changeset
+      render "changeset"
     end
 
     ##
@@ -290,7 +280,8 @@ module Api
       changeset.subscribers.delete(current_user)
 
       # Return a copy of the updated changeset
-      render :xml => changeset.to_xml.to_s
+      @changeset = changeset
+      render "changeset"
     end
 
     private
@@ -373,10 +364,10 @@ module Api
       end
       # stupid Time seems to throw both of these for bad parsing, so
       # we have to catch both and ensure the correct code path is taken.
-    rescue ArgumentError => ex
-      raise OSM::APIBadUserInput, ex.message.to_s
-    rescue RuntimeError => ex
-      raise OSM::APIBadUserInput, ex.message.to_s
+    rescue ArgumentError => e
+      raise OSM::APIBadUserInput, e.message.to_s
+    rescue RuntimeError => e
+      raise OSM::APIBadUserInput, e.message.to_s
     end
 
     ##