diff options
| author | Alban Peignier | 2016-11-20 21:55:05 +0100 |
|---|---|---|
| committer | Alban Peignier | 2016-11-20 22:10:33 +0100 |
| commit | 411bdcb6e0137bd022e2126911db0b17051f8be9 (patch) | |
| tree | 73525be605954f1d4bbb938345332cf32c045609 | |
| parent | 1c819dcd22d39dde6a47c1b6222a89025a58d408 (diff) | |
| download | chouette-core-411bdcb6e0137bd022e2126911db0b17051f8be9.tar.bz2 | |
Validate Route#opposite_route. Refs #1999
| -rw-r--r-- | app/models/chouette/route.rb | 24 |
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 |
