precondition stuff
authorSteve Coast <steve@asklater.com>
Wed, 13 Dec 2006 16:05:37 +0000 (16:05 +0000)
committerSteve Coast <steve@asklater.com>
Wed, 13 Dec 2006 16:05:37 +0000 (16:05 +0000)
app/controllers/segment_controller.rb
app/controllers/way_controller.rb
app/models/segment.rb
app/models/way.rb

index 7e77609f303a2908a14c14cebcac73cf6661ab60..5f2603f0b37343810ee2f28a9b78e2dab8155037 100644 (file)
@@ -13,11 +13,11 @@ class SegmentController < ApplicationController
         
         segment.user_id = @user.id
 
-        a = Node.find(segment.node_a.to_i)
-        b = Node.find(segment.node_b.to_i)
+        segment.from_node = Node.find(segment.node_a.to_i)
+        segment.to_node = Node.find(segment.node_b.to_i)
         
-        unless a and a.visible and b and b.visible  
-          render :nothing => true, :status => 400
+        unless segment.precondtions_ok? # are the nodes visible?
+          render :nothing => true, :status => 412
         end
 
         if segment.save_with_history
index a2d2157607da655ffd2af1346871cfa06b529288..ec8f310030a37c165f3de736f84a92a938e21aa2 100644 (file)
@@ -10,10 +10,17 @@ class WayController < ApplicationController
 
       if way
         way.user_id = @user.id
+        unless way.precondtions_ok? # are the segments (and their nodes) visible?
+          render :nothing => true, :status => 412
+          return
+        end
+
         if way.save_with_history
           render :text => way.id
+          return
         else
           render :nothing => true, :status => 500
+          return
         end
         return
       else
@@ -33,7 +40,7 @@ class WayController < ApplicationController
 
     way = Way.find(params[:id])
     case request.method
-   
+
     when :get
       unless way.visible
         render :nothing => true, :status => 410
index ddfc3db03ca918952f6f76341d5e8f44f2ec4d25..774517e2cbc650b4157df2cc6b13f653bd601a48 100644 (file)
@@ -4,11 +4,12 @@ class Segment < ActiveRecord::Base
 
   validates_numericality_of :node_a
   validates_numericality_of :node_b
-  # FIXME validate a nd b exist and are visible
 
   has_many :old_segments, :foreign_key => :id
   belongs_to :user
 
+  has_one :from_node, :class => 'Node', :foreign_key => 'node_a'
+  has_one :to_node, :class => 'Node', :foreign_key => 'node_b'
 
   def self.from_xml(xml, create=false)
     p = XML::Parser.new
@@ -102,5 +103,8 @@ class Segment < ActiveRecord::Base
     end
   end
 
+  def precondtions_ok?
+    return from_node and from_node.visible and to_node and to_node.visible
+  end
 
 end
index 43bd4d8c394dae334a1016a9dbb1cc5a9bca4e0b..55a578acdbbd5d42a32476618b76bbd453039b33 100644 (file)
@@ -139,4 +139,14 @@ class Way < ActiveRecord::Base
     old_way.save_with_dependencies
   end
 
+  def preconditions_ok?
+    self.segs.each do |n|
+      segment = Segment.find(n)
+      unless segment and segment.visible and segment.preconditions_ok?
+        return false
+      end
+    end
+    return true
+  end
+
 end