X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/dc2a2c8ebd1a11e4a64555fda22c6859a51defff..c7061991e74a20cc0576a3afa269821a87178f77:/app/models/node.rb diff --git a/app/models/node.rb b/app/models/node.rb index 1b81cc823..20c874931 100644 --- a/app/models/node.rb +++ b/app/models/node.rb @@ -23,14 +23,21 @@ class Node < ActiveRecord::Base has_many :containing_relation_members, :class_name => "RelationMember", :as => :member has_many :containing_relations, :class_name => "Relation", :through => :containing_relation_members, :source => :relation - validates_presence_of :id, :on => :update - validates_presence_of :timestamp, :version, :changeset_id - validates_uniqueness_of :id - validates_inclusion_of :visible, :in => [true, false] - validates_numericality_of :latitude, :longitude, :changeset_id, :version, :integer_only => true - validates_numericality_of :id, :on => :update, :integer_only => true + validates :id, :uniqueness => true, :presence => { :on => :update }, + :numericality => { :on => :update, :integer_only => true } + validates :version, :presence => true, + :numericality => { :integer_only => true } + validates :changeset_id, :presence => true, + :numericality => { :integer_only => true } + validates :latitude, :presence => true, + :numericality => { :integer_only => true } + validates :longitude, :presence => true, + :numericality => { :integer_only => true } + validates :timestamp, :presence => true + validates :changeset, :associated => true + validates :visible, :inclusion => [true, false] + validate :validate_position - validates_associated :changeset scope :visible, -> { where(:visible => true) } scope :invisible, -> { where(:visible => false) } @@ -110,7 +117,7 @@ class Node < ActiveRecord::Base # provide repeatable reads for the used-by checks. this means it # shouldn't be possible to get race conditions. Node.transaction do - self.lock! + lock! check_consistency(self, new_node, user) ways = Way.joins(:way_nodes).where(:visible => true, :current_way_nodes => { :node_id => id }).order(:id) fail OSM::APIPreconditionFailedError.new("Node #{id} is still used by ways #{ways.collect(&:id).join(",")}.") unless ways.empty? @@ -131,7 +138,7 @@ class Node < ActiveRecord::Base def update_from(new_node, user) Node.transaction do - self.lock! + lock! check_consistency(self, new_node, user) # update changeset first @@ -141,7 +148,7 @@ class Node < ActiveRecord::Base # update changeset bbox with *old* position first changeset.update_bbox!(bbox) - # FIXME logic needs to be double checked + # FIXME: logic needs to be double checked self.latitude = new_node.latitude self.longitude = new_node.longitude self.tags = new_node.tags @@ -177,7 +184,7 @@ class Node < ActiveRecord::Base add_metadata_to_xml_node(el, self, changeset_cache, user_display_name_cache) - if self.visible? + if visible? el["lat"] = lat.to_s el["lon"] = lon.to_s end @@ -228,7 +235,7 @@ class Node < ActiveRecord::Base Node.transaction do self.version += 1 self.timestamp = t - self.save! + save! # Create a NodeTag tags = self.tags