# Create a changeset from XML.
def create
- assert_method :put
-
cs = Changeset.from_xml(request.raw_post, :create => true)
# Assume that Changeset.from_xml has thrown an exception if there is an error parsing the xml
# marks a changeset as closed. this may be called multiple times
# on the same changeset, so is idempotent.
def close
- assert_method :put
-
changeset = Changeset.find(params[:id])
check_changeset_consistency(changeset, current_user)
# Returns: a diffResult document, as described in
# http://wiki.openstreetmap.org/wiki/OSM_Protocol_Version_0.6
def upload
- # only allow POST requests, as the upload method is most definitely
- # not idempotent, as several uploads with placeholder IDs will have
- # different side-effects.
- # see http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1.2
- assert_method :post
-
changeset = Changeset.find(params[:id])
check_changeset_consistency(changeset, current_user)
#
# after succesful update, returns the XML of the changeset.
def update
- # request *must* be a PUT.
- assert_method :put
-
@changeset = Changeset.find(params[:id])
new_changeset = Changeset.from_xml(request.raw_post)
report_error "#{e.class}: #{e.message}", :internal_server_error
end
- ##
- # asserts that the request method is the +method+ given as a parameter
- # or raises a suitable error. +method+ should be a symbol, e.g: :put or :get.
- def assert_method(method)
- ok = request.send(:"#{method.to_s.downcase}?")
- raise OSM::APIBadMethodError, method unless ok
- end
-
##
# wrap an api call in a timeout
def api_call_timeout(&block)