]> git.openstreetmap.org Git - rails.git/blobdiff - app/models/relation.rb
api06: Move version-checking into the models, raising an exception on mismatch
[rails.git] / app / models / relation.rb
index 559b78440e61b10d7b908d8b50aeaf899138ba73..984732c71c98f6b0bc9c1463029135fb2345f64a 100644 (file)
@@ -17,13 +17,11 @@ class Relation < ActiveRecord::Base
       doc = p.parse
 
       doc.find('//osm/relation').each do |pt|
-       relation = Relation.from_xml_node pt, create
+       return Relation.from_xml_node(pt, create)
       end
     rescue
-      relation = nil
+      return nil
     end
-
-    return relation
   end
 
   def self.from_xml_node(pt, create=false)
@@ -33,6 +31,8 @@ class Relation < ActiveRecord::Base
       relation.id = pt['id'].to_i
     end
 
+    relation.version = pt['version']
+
     if create
       relation.timestamp = Time.now
       relation.visible = true
@@ -224,6 +224,8 @@ class Relation < ActiveRecord::Base
   def update_from(new_relation, user)
     if !new_relation.preconditions_ok?
       raise OSM::APIPreconditionFailedError.new
+    elsif new_relation.version != version
+      raise OSM::APIVersionMismatchError.new(new_relation.version, version)
     else
       self.user_id = user.id
       self.tags = new_relation.tags