diff options
| author | Alban Peignier | 2018-05-17 12:23:51 +0200 | 
|---|---|---|
| committer | Johan Van Ryseghem | 2018-05-17 16:27:32 +0200 | 
| commit | e0864d754a0467addb39ce860b659818877bb9ec (patch) | |
| tree | 89cfc91fb0bf34630cd88f7aee28263cbe41885c | |
| parent | 488237c48b6174873470d7b6ce3d1465df46ba20 (diff) | |
| download | chouette-core-e0864d754a0467addb39ce860b659818877bb9ec.tar.bz2 | |
Associate opposite_routes during merge (when available). Refs #6842
| -rw-r--r-- | app/models/merge.rb | 23 | ||||
| -rw-r--r-- | spec/models/merge_spec.rb | 17 | 
2 files changed, 36 insertions, 4 deletions
| diff --git a/app/models/merge.rb b/app/models/merge.rb index 2824e1f83..c8018e140 100644 --- a/app/models/merge.rb +++ b/app/models/merge.rb @@ -145,12 +145,19 @@ class Merge < ApplicationModel        end      end +    referential_route_opposite_route_ids = referential.switch do +      Hash[referential.routes.where('opposite_route_id is not null').pluck(:id, :opposite_route_id)] +    end +      referential_routing_constraint_zones_new_ids = {}      new.switch do +      route_ids_mapping = {} +        referential_routes.each do |route|          existing_route = new.routes.find_by line_id: route.line_id, checksum: route.checksum          if existing_route +          route_ids_mapping[route.id] = existing_route.id            existing_route.merge_metadata_from route          else            objectid = Chouette::Route.where(objectid: route.objectid).exists? ? nil : route.objectid @@ -179,6 +186,8 @@ class Merge < ApplicationModel            # We need to create StopPoints to known new primary keys            new_route.save! +          route_ids_mapping[route.id] = new_route.id +            old_stop_point_ids = route_stop_points.sort_by(&:position).map(&:id)            new_stop_point_ids = new_route.stop_points.sort_by(&:position).map(&:id) @@ -225,6 +234,20 @@ class Merge < ApplicationModel            end          end        end + +      referential_route_opposite_route_ids.each do |route_id, opposite_route_id| +        new_route_id = route_ids_mapping[route_id] +        new_opposite_route_id = route_ids_mapping[opposite_route_id] + +        new_route = nil +        if new_route_id && new_opposite_route_id +          if new_route = new.routes.find_by(id: new_route_id) +            new_route.update_column :opposite_route_id, new_opposite_route_id +          end +        end + +        Rails.logger.warn "Can't merge opposite route for Route #{route_id}" unless new_route +      end      end      # JourneyPatterns diff --git a/spec/models/merge_spec.rb b/spec/models/merge_spec.rb index 59e2cc500..34df0fb4e 100644 --- a/spec/models/merge_spec.rb +++ b/spec/models/merge_spec.rb @@ -8,7 +8,7 @@ RSpec.describe Merge do      line_referential = FactoryGirl.create :line_referential      company = FactoryGirl.create :company, line_referential: line_referential -    10.times { FactoryGirl.create :line, line_referential: line_referential, company: company, network: nil } +    4.times { FactoryGirl.create :line, line_referential: line_referential, company: company, network: nil }      workbench = FactoryGirl.create :workbench, line_referential: line_referential, stop_area_referential: stop_area_referential @@ -19,7 +19,7 @@ RSpec.describe Merge do                                        organisation: workbench.organisation,                                        metadatas: [referential_metadata] -    factor = 1 +    factor = 2      stop_points_positions = {}      routing_constraint_zones = {} @@ -32,7 +32,7 @@ RSpec.describe Merge do          end        end -      referential.routes.each do |route| +      referential.routes.each_with_index do |route, index|          route.stop_points.each do |sp|            sp.set_list_position 0          end @@ -47,9 +47,18 @@ RSpec.describe Merge do            routing_constraint_zones[route.id][constraint_zone.checksum] = constraint_zone          end -        route.reload.update_checksum! +        if index.even? +          route.wayback = :outbound +        else +          route.update_column :wayback, :inbound +          route.opposite_route = route.opposite_route_candidates.sample +        end + +        route.save! +        route.reload.update_checksum!          expect(route.reload.checksum).to_not eq checksum +          factor.times do            FactoryGirl.create :journey_pattern, route: route, stop_points: route.stop_points.sample(3)          end | 
