diff options
| -rw-r--r-- | app/controllers/clean_ups_controller.rb | 1 | ||||
| -rw-r--r-- | app/models/clean_up.rb | 101 |
2 files changed, 64 insertions, 38 deletions
diff --git a/app/controllers/clean_ups_controller.rb b/app/controllers/clean_ups_controller.rb index 6c0df0830..8718fc0dc 100644 --- a/app/controllers/clean_ups_controller.rb +++ b/app/controllers/clean_ups_controller.rb @@ -13,6 +13,7 @@ class CleanUpsController < ChouetteController result = clean_up.clean flash[:notice] = result.notice.join("<br/>") rescue => e + Rails.logger.error "CleanUp failed : #{e} #{e.backtrace}" flash[:alert] = t('clean_ups.failure', error_message: e.to_s) end end diff --git a/app/models/clean_up.rb b/app/models/clean_up.rb index 70c763146..1a03b0fb1 100644 --- a/app/models/clean_up.rb +++ b/app/models/clean_up.rb @@ -1,90 +1,115 @@ class CleanUp - include ActiveModel::Validations - include ActiveModel::Conversion + include ActiveModel::Validations + include ActiveModel::Conversion extend ActiveModel::Naming - - + attr_accessor :expected_date, :keep_lines, :keep_stops , :keep_companies attr_accessor :keep_networks, :keep_group_of_lines - + validates_presence_of :expected_date def initialize(attributes = {}) - attributes.each do |name, value| - send("#{name}=", value) - end - end - - def persisted? - false - end + attributes.each do |name, value| + send("#{name}=", value) + end + end + + def persisted? + 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)" + end + + def physical_stop_areas + Chouette::StopArea.physical + end + + def commercial_stop_areas + Chouette::StopArea.commercial + end + + def stop_place_stop_areas + Chouette::StopArea.stop_place + end + + def itl_stop_areas + Chouette::StopArea.itl + end def clean # as foreign keys are presents , delete method can be used for faster performance result = CleanUpResult.new - # find and remove time_tables + # find and remove time_tables tms = Chouette::TimeTable.validity_out_from_on?(Date.parse(expected_date)) result.time_table_count = tms.size tms.each do |tm| tm.delete end # remove vehiclejourneys without timetables - Chouette::VehicleJourney.find_each(:conditions => "id not in (select distinct vehicle_journey_id from time_tables_vehicle_journeys)") do |vj| + 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 - Chouette::JourneyPattern.find_each(:conditions => "id not in (select distinct journey_pattern_id from vehicle_journeys)") do |jp| + 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 - Chouette::Route.find_each(:conditions => "id not in (select distinct route_id from journey_patterns)") do |r| + # 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" - Chouette::Line.find_each(:conditions => "id not in (select distinct line_id from routes)") do |l| + 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) - if keep_stops == "0" - Chouette::StopArea.find_each(:conditions => { :area_type => "BoardingPosition" }) do |bp| + # if asked remove stops without children (recurse) + 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 - Chouette::StopArea.find_each(:conditions => { :area_type => "Quay" }) do |q| - if q.stop_points.size == 0 - result.stop_count += 1 - q.delete - end - end - Chouette::StopArea.find_each(:conditions => { :area_type => "CommercialStopPoint" }) do |csp| + commercial_stop_areas.find_each do |csp| if csp.children.size == 0 result.stop_count += 1 csp.delete end end - Chouette::StopArea.find_each(:conditions => { :area_type => "StopPlace" }) do |sp| + stop_place_stop_areas.find_each do |sp| if sp.children.size == 0 result.stop_count += 1 sp.delete end end - Chouette::StopArea.find_each(:conditions => { :area_type => "ITL" }) do |itl| + itl_stop_areas.find_each do |itl| if itl.routing_stops.size == 0 result.stop_count += 1 itl.delete @@ -92,7 +117,7 @@ class CleanUp end end # if asked remove companies without lines or vehicle journeys - if keep_companies == "0" + if keep_companies == "0" Chouette::Company.find_each do |c| if c.lines.size == 0 result.company_count += 1 @@ -100,9 +125,9 @@ class CleanUp end end end - + # if asked remove networks without lines - if keep_networks == "0" + if keep_networks == "0" Chouette::Network.find_each do |n| if n.lines.size == 0 result.network_count += 1 @@ -110,9 +135,9 @@ class CleanUp end end end - + # if asked remove group_of_lines without lines - if keep_group_of_lines == "0" + if keep_group_of_lines == "0" Chouette::GroupOfLine.find_each do |n| if n.lines.size == 0 result.group_of_line_count += 1 @@ -122,5 +147,5 @@ class CleanUp end result end - + end |
