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 |
