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) }
# 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?
def update_from(new_node, user)
Node.transaction do
- self.lock!
+ lock!
check_consistency(self, new_node, user)
# update changeset first
# 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
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
Node.transaction do
self.version += 1
self.timestamp = t
- self.save!
+ save!
# Create a NodeTag
tags = self.tags