aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/models/clean_up.rb93
-rw-r--r--spec/models/clean_up_spec.rb41
2 files changed, 81 insertions, 53 deletions
diff --git a/app/models/clean_up.rb b/app/models/clean_up.rb
index 1a03b0fb1..cc8a6e537 100644
--- a/app/models/clean_up.rb
+++ b/app/models/clean_up.rb
@@ -18,24 +18,12 @@ class CleanUp
false
end
- def vehicle_journeys
- Chouette::VehicleJourney.where "id not in (select distinct vehicle_journey_id from time_tables_vehicle_journeys)"
- end
-
- def journey_patterns
- Chouette::JourneyPattern.where "id not in (select distinct journey_pattern_id from vehicle_journeys)"
- end
-
- def routes
- Chouette::Route.where "id not in (select distinct route_id from journey_patterns)"
- end
-
- def lines
- Chouette::Line.where "id not in (select distinct line_id from routes)"
+ def physical_stop_areas
+ Chouette::StopArea.physical.includes(:stop_points).where(:stop_points => {id: nil})
end
- def physical_stop_areas
- Chouette::StopArea.physical
+ def clean_physical_stop_areas
+ Chouette::StopArea.where(id: self.physical_stop_areas.pluck(:id)).delete_all
end
def commercial_stop_areas
@@ -50,6 +38,34 @@ class CleanUp
Chouette::StopArea.itl
end
+ def vehicle_journeys
+ Chouette::VehicleJourney.includes(:time_tables).where(:time_tables => {id: nil})
+ end
+ def clean_vehicle_journeys
+ Chouette::VehicleJourney.where(id: self.vehicle_journeys.pluck(:id)).delete_all
+ end
+
+ def lines
+ Chouette::Line.includes(:routes).where(:routes => {id: nil})
+ end
+ def clean_lines
+ Chouette::Line.where(id: self.lines.pluck(:id)).delete_all
+ end
+
+ def routes
+ Chouette::Route.includes(:journey_patterns).where(:journey_patterns => {id: nil})
+ end
+ def clean_routes
+ Chouette::Route.where(id: self.routes.pluck(:id)).delete_all
+ end
+
+ def journey_patterns
+ Chouette::JourneyPattern.includes(:vehicle_journeys).where(:vehicle_journeys => {id: nil})
+ end
+ def clean_journey_patterns
+ Chouette::JourneyPattern.where(id: self.journey_patterns.pluck(:id)).delete_all
+ end
+
def clean
# as foreign keys are presents , delete method can be used for faster performance
result = CleanUpResult.new
@@ -59,44 +75,15 @@ class CleanUp
tms.each do |tm|
tm.delete
end
- # remove vehiclejourneys without timetables
- vehicle_journeys.find_each do |vj|
- if vj.time_tables.size == 0
- result.vehicle_journey_count += 1
- vj.delete
- end
- end
- # remove journeypatterns without vehicle journeys
- journey_patterns.find_each do |jp|
- if jp.vehicle_journeys.size == 0
- result.journey_pattern_count += 1
- jp.delete
- end
- end
- # remove routes without journeypatterns
- routes.find_each do |r|
- if r.journey_patterns.size == 0
- result.route_count += 1
- r.delete
- end
- end
- # if asked remove lines without routes
- if keep_lines == "0"
- lines.find_each do |l|
- if l.routes.size == 0
- result.line_count += 1
- l.delete
- end
- end
- end
- # if asked remove stops without children (recurse)
+
+ result.vehicle_journey_count = self.clean_vehicle_journeys
+ result.journey_pattern_count = self.clean_journey_patterns
+ result.route_count = self.clean_routes
+
+ result.line_count = self.clean_lines if keep_lines == "0"
+ result.stop_count = self.clean_physical_stop_areas if keep_stops == "0"
+
if keep_stops == "0"
- physical_stop_areas.find_each do |bp|
- if bp.stop_points.size == 0
- result.stop_count += 1
- bp.delete
- end
- end
commercial_stop_areas.find_each do |csp|
if csp.children.size == 0
result.stop_count += 1
diff --git a/spec/models/clean_up_spec.rb b/spec/models/clean_up_spec.rb
new file mode 100644
index 000000000..d633443ba
--- /dev/null
+++ b/spec/models/clean_up_spec.rb
@@ -0,0 +1,41 @@
+require 'spec_helper'
+
+describe CleanUp, :type => :model do
+ let(:cleaner) { CleanUp.new }
+
+ it 'should delete physical stop_areas without stop_points' do
+ create_list(:stop_area, 2)
+ create_list(:stop_point, 2)
+ Chouette::StopArea.update_all(area_type: "Quay")
+ expect(cleaner.physical_stop_areas.count).to eq 2
+ expect(cleaner.clean_physical_stop_areas).to eq 2
+ end
+
+ it 'should delete vehiclejourneys without timetables' do
+ create_list(:vehicle_journey, 2)
+ create_list(:vehicle_journey, 2, time_tables:[create(:time_table)])
+ expect(cleaner.vehicle_journeys.count).to eq 2
+ expect(cleaner.clean_vehicle_journeys).to eq 2
+ end
+
+ it 'should delete lines without routes' do
+ create_list(:line, 2)
+ create_list(:route, 2, line: create(:line))
+ expect(cleaner.lines.count).to eq 2
+ expect(cleaner.clean_lines).to eq 2
+ end
+
+ it 'should delete routes without journeypatterns' do
+ create_list(:route, 2)
+ create_list(:journey_pattern, 2, route: create(:route))
+ expect(cleaner.routes.count).to eq 2
+ expect(cleaner.clean_routes).to eq 2
+ end
+
+ it 'should delete journeypatterns without vehicle journeys' do
+ create_list(:journey_pattern, 2)
+ create_list(:vehicle_journey, 2, journey_pattern: create(:journey_pattern))
+ expect(cleaner.journey_patterns.count).to eq 2
+ expect(cleaner.clean_journey_patterns).to eq 2
+ end
+end