# 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]
# 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
##
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
##
# 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
##
# 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
##
changeset.subscribers << current_user
# Return a copy of the updated changeset
- render :xml => changeset.to_xml.to_s
+ @changeset = changeset
+ render "changeset"
end
##
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
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
##