aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlban Peignier2016-11-20 21:55:05 +0100
committerAlban Peignier2016-11-20 22:10:33 +0100
commit411bdcb6e0137bd022e2126911db0b17051f8be9 (patch)
tree73525be605954f1d4bbb938345332cf32c045609
parent1c819dcd22d39dde6a47c1b6222a89025a58d408 (diff)
downloadchouette-core-411bdcb6e0137bd022e2126911db0b17051f8be9.tar.bz2
Validate Route#opposite_route. Refs #1999
-rw-r--r--app/models/chouette/route.rb24
1 files changed, 19 insertions, 5 deletions
diff --git a/app/models/chouette/route.rb b/app/models/chouette/route.rb
index d1e72de20..020220a19 100644
--- a/app/models/chouette/route.rb
+++ b/app/models/chouette/route.rb
@@ -69,17 +69,31 @@ class Chouette::Route < Chouette::TridentActiveRecord
validates :wayback, inclusion: { in: self.wayback.values }
- before_destroy :dereference_opposite_route
-
after_commit :journey_patterns_control_route_sections
def geometry_presenter
Chouette::Geometry::RoutePresenter.new self
end
- def dereference_opposite_route
- self.line.routes.each do |r|
- r.update_attributes( :opposite_route => nil) if r.opposite_route == self
+ @@opposite_waybacks = { straight_forward: :backward, backward: :straight_forward}
+ def opposite_wayback
+ @@opposite_waybacks[wayback.to_sym]
+ end
+
+ def opposite_route_candidates
+ if opposite_wayback
+ line.routes.where(opposite_route: [nil, self], wayback: opposite_wayback)
+ else
+ self.class.none
+ end
+ end
+
+ validate :check_opposite_route
+ def check_opposite_route
+ return unless opposite_route && opposite_wayback
+
+ unless opposite_route_candidates.include?(opposite_route)
+ errors.add(:opposite_route_id, :invalid)
end
end