aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlban Peignier2017-12-26 22:05:49 +0100
committerAlban Peignier2018-01-05 10:23:29 +0100
commit97a9a7d921d412fd8300c9d84e719ee494079c3b (patch)
tree6ea695518e72de526bf9955966a0136ac3670cea
parentcc624a4db9cb69ed78725f24eec74ece96eea1a2 (diff)
downloadchouette-core-97a9a7d921d412fd8300c9d84e719ee494079c3b.tar.bz2
Merge VehicleJourneys and VehicleJourneyAtStops. Refs #5299
-rw-r--r--app/models/merge.rb50
-rw-r--r--spec/models/merge_spec.rb7
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])