diff options
| -rw-r--r-- | app/models/merge.rb | 50 | ||||
| -rw-r--r-- | spec/models/merge_spec.rb | 7 |
2 files changed, 56 insertions, 1 deletions
diff --git a/app/models/merge.rb b/app/models/merge.rb index 9a8862fb2..562e19343 100644 --- a/app/models/merge.rb +++ b/app/models/merge.rb @@ -33,8 +33,9 @@ class Merge < ActiveRecord::Base save_current rescue => e - Rails.logger.error "Merge failed: #{e}" + Rails.logger.error "Merge failed: #{e} #{e.backtrace.join("\n")}" update status: :failed + raise e if Rails.env.test? ensure attributes = { ended_at: Time.now } attributes[:status] = :successful if status == :running @@ -158,6 +159,8 @@ class Merge < ActiveRecord::Base [journey_patterns, journey_patterns_stop_areas_objectids] end + referential_journey_patterns_checksums = Hash[referential_journey_patterns.map { |j| [ j.id, j.checksum ] }] + new.switch do referential_journey_patterns.each do |journey_pattern| # find parent route by checksum @@ -191,6 +194,51 @@ class Merge < ActiveRecord::Base end end end + + referential_vehicle_journeys = referential.switch do + referential.vehicle_journeys.includes(:vehicle_journey_at_stops).all.to_a + end + + new.switch do + referential_vehicle_journeys.each do |vehicle_journey| + # find parent journey pattern by checksum + associated_journey_pattern_checksum = referential_journey_patterns_checksums[vehicle_journey.journey_pattern_id] + existing_associated_journey_pattern = new.journey_patterns.find_by checksum: associated_journey_pattern_checksum + + existing_vehicle_journey = new.vehicle_journeys.find_by journey_pattern_id: existing_associated_journey_pattern.id, checksum: vehicle_journey.checksum + + unless existing_vehicle_journey + attributes = vehicle_journey.attributes.merge( + id: nil, + + objectid: "merge:vehicle_journey:#{existing_associated_journey_pattern.checksum}-#{vehicle_journey.checksum}", #FIXME + + # all other primary must be changed + route_id: existing_associated_journey_pattern.route_id, + journey_pattern_id: existing_associated_journey_pattern.id, + ) + new_vehicle_journey = new.vehicle_journeys.build attributes + + # Create VehicleJourneyAtStops + + vehicle_journey.vehicle_journey_at_stops.each_with_index do |vehicle_journey_at_stop, index| + at_stop_attributes = vehicle_journey_at_stop.attributes.merge( + id: nil, + stop_point_id: existing_associated_journey_pattern.stop_points[index].id + ) + new_vehicle_journey.vehicle_journey_at_stops.build at_stop_attributes + end + + new_vehicle_journey.save! + + if new_vehicle_journey.checksum != vehicle_journey.checksum + raise "Checksum has changed: #{vehicle_journey.checksum_source} #{new_vehicle_journey.checksum_source}" + end + end + + end + end + end def save_current diff --git a/spec/models/merge_spec.rb b/spec/models/merge_spec.rb index c36a0aa4a..e9ae3762b 100644 --- a/spec/models/merge_spec.rb +++ b/spec/models/merge_spec.rb @@ -32,6 +32,13 @@ RSpec.describe Merge do FactoryGirl.create :journey_pattern, route: route, stop_points: route.stop_points.sample(3) end end + + referential.journey_patterns.each do |journey_pattern| + 3.times do + v = FactoryGirl.create :vehicle_journey, journey_pattern: journey_pattern, company: company + puts v.checksum_source + end + end end merge = Merge.create!(workbench: referential.workbench, referentials: [referential, referential]) |
