diff options
Diffstat (limited to 'app/models/clean_up.rb')
| -rw-r--r-- | app/models/clean_up.rb | 101 | 
1 files changed, 63 insertions, 38 deletions
| 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 | 
