From: Shaun McDonald Date: Tue, 25 Nov 2008 17:23:47 +0000 (+0000) Subject: More model validations. Fixing one test. X-Git-Tag: live~7557^2~129 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/137509534304be853ab01ca554111c524a9a1bca?ds=sidebyside More model validations. Fixing one test. --- diff --git a/app/models/changeset.rb b/app/models/changeset.rb index 38cd8014f..5baee2d59 100644 --- a/app/models/changeset.rb +++ b/app/models/changeset.rb @@ -12,8 +12,15 @@ class Changeset < ActiveRecord::Base has_many :old_ways has_many :old_relations - validates_presence_of :user_id, :created_at, :closed_at - + validates_presence_of :id, :on => :update + validates_presence_of :user_id, :created_at, :closed_at, :num_changes + validates_uniqueness_of :id + validates_numericality_of :id, :on => :update, :integer_only => true + validates_numericality_of :min_lat, :max_lat, :min_lon, :max_lat, :allow_nil => true, :integer_only => true + validates_numericality_of :user_id, :integer_only => true, :greater_than_or_equal_to => 1 + validates_numericality_of :num_changes, :integer_only => true, :greater_than_or_equal_to => 0 + validates_associated :user + # over-expansion factor to use when updating the bounding box EXPAND = 0.1 diff --git a/app/models/node.rb b/app/models/node.rb index e926e06a2..f2fe341ae 100644 --- a/app/models/node.rb +++ b/app/models/node.rb @@ -6,11 +6,6 @@ class Node < ActiveRecord::Base set_table_name 'current_nodes' - validates_presence_of :changeset_id, :timestamp - validates_inclusion_of :visible, :in => [ true, false ] - validates_numericality_of :latitude, :longitude - validate :validate_position - belongs_to :changeset has_many :old_nodes, :foreign_key => :id @@ -26,6 +21,15 @@ 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, :extend => ObjectFinder + 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 + validate :validate_position + validates_associated :changeset + # Sanity check the latitude and longitude and add an error if it's broken def validate_position errors.add_to_base("Node is not in the world") unless in_world? diff --git a/app/models/old_node.rb b/app/models/old_node.rb index badcd74a2..be115c53e 100644 --- a/app/models/old_node.rb +++ b/app/models/old_node.rb @@ -8,6 +8,7 @@ class OldNode < ActiveRecord::Base validates_inclusion_of :visible, :in => [ true, false ] validates_numericality_of :latitude, :longitude validate :validate_position + validates_associated :changeset belongs_to :changeset diff --git a/app/models/old_relation.rb b/app/models/old_relation.rb index ffddc7945..e2a650511 100644 --- a/app/models/old_relation.rb +++ b/app/models/old_relation.rb @@ -4,6 +4,8 @@ class OldRelation < ActiveRecord::Base set_table_name 'relations' belongs_to :changeset + + validates_associated :changeset def self.from_relation(relation) old_relation = OldRelation.new diff --git a/app/models/old_way.rb b/app/models/old_way.rb index ce856e208..da9cf0697 100644 --- a/app/models/old_way.rb +++ b/app/models/old_way.rb @@ -5,6 +5,8 @@ class OldWay < ActiveRecord::Base belongs_to :changeset + validates_associated :changeset + def self.from_way(way) old_way = OldWay.new old_way.visible = way.visible diff --git a/app/models/relation.rb b/app/models/relation.rb index 2a2ec3dca..19548f20c 100644 --- a/app/models/relation.rb +++ b/app/models/relation.rb @@ -15,6 +15,14 @@ class Relation < 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, :extend => ObjectFinder + 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 :id, :on => :update, :integer_only => true + validates_numericality_of :changeset_id, :version, :integer_only => true + validates_associated :changeset + TYPES = ["node", "way", "relation"] def self.from_xml(xml, create=false) diff --git a/app/models/way.rb b/app/models/way.rb index 3b3f92432..e2e1ae302 100644 --- a/app/models/way.rb +++ b/app/models/way.rb @@ -4,9 +4,6 @@ class Way < ActiveRecord::Base include ConsistencyValidations set_table_name 'current_ways' - - validates_presence_of :changeset_id, :timestamp - validates_inclusion_of :visible, :in => [ true, false ] belongs_to :changeset @@ -20,6 +17,14 @@ class Way < 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, :extend => ObjectFinder + validates_presence_of :id, :on => :update + validates_presence_of :changeset_id,:version, :timestamp + validates_uniqueness_of :id + validates_inclusion_of :visible, :in => [ true, false ] + validates_numericality_of :changeset_id, :version, :integer_only => true + validates_numericality_of :id, :on => :update, :integer_only => true + validates_associated :changeset + def self.from_xml(xml, create=false) begin p = XML::Parser.new diff --git a/test/unit/node_test.rb b/test/unit/node_test.rb index 2c6515cb7..a2c8d7fb6 100644 --- a/test/unit/node_test.rb +++ b/test/unit/node_test.rb @@ -79,7 +79,7 @@ class NodeTest < Test::Unit::TestCase def test_create node_template = Node.new(:latitude => 12.3456, :longitude => 65.4321, - :changeset_id => changesets(:normal_user_first_change), + :changeset_id => changesets(:normal_user_first_change).id, :visible => 1, :version => 1) assert node_template.save_with_history!