render :nothing => true, :status => :internal_server_error
end
end
+
+ def version
+ begin
+ old_node = OldNode.find(:first, :conditions => {:id => params[:id], :version => params[:version]} )
+
+ doc = OSM::API.new.get_xml_doc
+ doc.root << old_node.to_xml_node
+
+ render :text => doc.to_s, :content_type => "text/xml"
+ rescue ActiveRecord::RecordNotFound
+ render :nothing => true, :status => :not_found
+ rescue
+ render :nothing => true, :status => :internal_server_error
+ end
+ end
end
require 'xml/libxml'
session :off
+ before_filter :check_read_availability
after_filter :compress_output
def history
render :nothing => true, :status => :internal_server_error
end
end
+
+ def version
+ begin
+ old_relation = OldRelation.find(:first, :conditions => {:id => params[:id], :version => params[:version]} )
+
+ doc = OSM::API.new.get_xml_doc
+ doc.root << old_relation.to_xml_node
+
+ render :text => doc.to_s, :content_type => "text/xml"
+ rescue ActiveRecord::RecordNotFound
+ render :nothing => true, :status => :not_found
+ rescue
+ render :nothing => true, :status => :internetal_service_error
+ end
+ end
end
render :nothing => true, :status => :internal_server_error
end
end
+
+ def version
+ begin
+ old_way = OldWay.find(:first, :conditions => {:id => params[:id], :version => params[:version]} )
+
+ doc = OSM::API.new.get_xml_doc
+ doc.root << old_way.to_xml_node
+
+ render :text => doc.to_s, :content_type => "text/xml"
+ rescue ActiveRecord::RecordNotFound
+ render :nothing => true, :status => :not_found
+ rescue
+ render :nothing => true, :status => :internal_server_error
+ end
+ end
end
end
def update
+ logger.debug request.raw_post
begin
relation = Relation.find(params[:id])
new_relation = Relation.from_xml(request.raw_post)
def delete_with_history(user)
if self.visible
if WayNode.find(:first, :joins => "INNER JOIN current_ways ON current_ways.id = current_way_nodes.id", :conditions => [ "current_ways.visible = 1 AND current_way_nodes.node_id = ?", self.id ])
- raise OSM::APIPreconditionFailedError.new
+ raise OSM::APIPreconditionFailedError.new
elsif RelationMember.find(:first, :joins => "INNER JOIN current_relations ON current_relations.id=current_relation_members.id", :conditions => [ "visible = 1 AND member_type='node' and member_id=?", self.id])
- raise OSM::APIPreconditionFailedError.new
+ raise OSM::APIPreconditionFailedError.new
else
- self.user_id = user.id
- self.visible = 0
- save_with_history!
+ self.user_id = user.id
+ self.visible = 0
+ save_with_history!
end
else
raise OSM::APIAlreadyDeletedError.new
def update_from(new_node, user)
if new_node.version != version
raise OSM::APIVersionMismatchError.new(new_node.version, version)
+ elsif new_node.changeset.user_id != user.id
+ raise OSM::APIUserChangesetMismatchError.new
+ elsif not new_node.changeset.open?
+ raise OSM::APIChangesetAlreadyClosedError.new
end
# FIXME logic need looked at
- self.changeset_id = user.id
+ self.changeset_id = new_node.changeset_id
self.latitude = new_node.latitude
self.longitude = new_node.longitude
self.tags = new_node.tags
el1['visible'] = self.visible.to_s
el1['timestamp'] = self.timestamp.xmlschema
- el1['version'] = self.version.to_s
return el1
end
else
# FIXME need to deal with changeset etc
#self.user_id = user.id
- self.changeset = new_relation.changeset
+ self.changeset_id = new_relation.changeset_id
self.tags = new_relation.tags
self.members = new_relation.members
self.visible = true
def render_opts
{ :text => "Version mismatch: Provided " + provided.to_s +
- ", server had: " + latest.to_s, :status => :bad_request }
+ ", server had: " + latest.to_s, :status => :conflict }
end
end