diff options
| author | Zog | 2018-03-05 12:00:29 +0100 |
|---|---|---|
| committer | Zog | 2018-03-05 12:00:29 +0100 |
| commit | a412f915c885f3bf2962d0b786ff864f1b0e120e (patch) | |
| tree | 3352d379f3d5c963f4382c374c6e78eea33cb2e1 | |
| parent | ea3de6035cdf9fbbcd92f51c90e5a2c5c3400cb3 (diff) | |
| download | chouette-core-a412f915c885f3bf2962d0b786ff864f1b0e120e.tar.bz2 | |
Refs #6068; Add some helpers in the models
| -rw-r--r-- | app/models/chouette/journey_pattern.rb | 13 | ||||
| -rw-r--r-- | app/models/chouette/route.rb | 5 | ||||
| -rw-r--r-- | app/models/chouette/stop_area.rb | 5 | ||||
| -rw-r--r-- | app/models/simple_exporter.rb | 2 | ||||
| -rw-r--r-- | lib/tasks/exports.rake | 38 | ||||
| -rw-r--r-- | spec/models/chouette/journey_pattern_spec.rb | 17 |
6 files changed, 76 insertions, 4 deletions
diff --git a/app/models/chouette/journey_pattern.rb b/app/models/chouette/journey_pattern.rb index 830e985d9..10c8b5439 100644 --- a/app/models/chouette/journey_pattern.rb +++ b/app/models/chouette/journey_pattern.rb @@ -171,6 +171,19 @@ module Chouette full end + def distance_to stop + val = 0 + i = 0 + _end = stop_points.first + while _end != stop + i += 1 + _start = _end + _end = stop_points[i] + val += costs_between(_start, _end)[:distance] + end + val + end + def set_distances distances raise "inconsistent data: #{distances.count} values for #{stop_points.count} stops" unless distances.count == stop_points.count prev = distances[0].to_i diff --git a/app/models/chouette/route.rb b/app/models/chouette/route.rb index 3729deb7d..445346745 100644 --- a/app/models/chouette/route.rb +++ b/app/models/chouette/route.rb @@ -191,6 +191,11 @@ module Chouette journey_pattern end + def generated_name + return "" unless stop_points.size > 1 + [stop_points.first, stop_points.last].map(&:name).join ' > ' + end + protected def self.vehicle_journeys_timeless(stop_point_id) diff --git a/app/models/chouette/stop_area.rb b/app/models/chouette/stop_area.rb index 7170dd217..f58f97eee 100644 --- a/app/models/chouette/stop_area.rb +++ b/app/models/chouette/stop_area.rb @@ -390,9 +390,12 @@ module Chouette ActiveSupport::TimeZone[time_zone]&.utc_offset end - def country_name + def country return unless country_code country = ISO3166::Country[country_code] + end + + def country_name return unless country country.translations[I18n.locale.to_s] || country.name end diff --git a/app/models/simple_exporter.rb b/app/models/simple_exporter.rb index 9c12a4e02..fe0aa05b5 100644 --- a/app/models/simple_exporter.rb +++ b/app/models/simple_exporter.rb @@ -72,7 +72,7 @@ class SimpleExporter < SimpleInterface def map_item_to_rows item return [item] unless configuration.item_to_rows_mapping - configuration.item_to_rows_mapping.call(item).map {|row| CustomRow.new row } + configuration.item_to_rows_mapping.call(item).map {|row| row.is_a?(ActiveRecord::Base) ? row : CustomRow.new(row) } end def handle_item item diff --git a/lib/tasks/exports.rake b/lib/tasks/exports.rake index 6ff73dac0..8688611e8 100644 --- a/lib/tasks/exports.rake +++ b/lib/tasks/exports.rake @@ -43,7 +43,7 @@ namespace :export do desc "export a complete offer from the given referential in the given X next days" task :full_offer, [:referential_id, :configuration_name, :timelapse, :output_dir, :logs_output_dir] => :environment do |t, args| referential = Referential.find args[:referential_id] - args.with_defaults(output_dir: referential.name, logs_output_dir: "./log/exporters/", timelapse: 90) + args.with_defaults(output_dir: "#{referential.name.parameterize}_#{Time.now.strftime "%y%m%d%H%M"}", logs_output_dir: "./log/exporters/", timelapse: 90) referential.switch @@ -51,13 +51,47 @@ namespace :export do if journeys.count == 0 puts "No maching journeys were found".red else - exporter = SimpleExporter.create configuration_name: "#{args[:configuration_name]}_journeys", filepath: "#{args[:output_dir]}/#{args[:configuration_name]}_journeys.csv" exporter.configure do |config| config.collection = journeys end SimpleInterfacesHelper.run_interface_controlling_interruption exporter, :export, args + return unless exporter.status == :success + + exporter = SimpleExporter.create configuration_name: "#{args[:configuration_name]}_schedules", filepath: "#{args[:output_dir]}/#{args[:configuration_name]}_schedules.csv" + exporter.configure do |config| + config.collection = journeys + end + + SimpleInterfacesHelper.run_interface_controlling_interruption exporter, :export, args + return unless exporter.status == :success + + exporter = SimpleExporter.create configuration_name: "#{args[:configuration_name]}_routes", filepath: "#{args[:output_dir]}/#{args[:configuration_name]}_routes.csv" + exporter.configure do |config| + config.collection = Chouette::JourneyPattern.where(id: journeys.pluck(:journey_pattern_id).uniq) + end + + SimpleInterfacesHelper.run_interface_controlling_interruption exporter, :export, args + return unless exporter.status == :success + + exporter = SimpleExporter.create configuration_name: "#{args[:configuration_name]}_stops", filepath: "#{args[:output_dir]}/#{args[:configuration_name]}_stops.csv" + exporter.configure do |config| + config.collection = Chouette::StopArea.where(id: journeys.joins(:stop_points).pluck(:"stop_points.stop_area_id").uniq).order('parent_id ASC NULLS FIRST') + end + + SimpleInterfacesHelper.run_interface_controlling_interruption exporter, :export, args + return unless exporter.status == :success + + exporter = SimpleExporter.create configuration_name: "#{args[:configuration_name]}_companies", filepath: "#{args[:output_dir]}/#{args[:configuration_name]}_companies.csv" + ids = journeys.pluck :company_id + ids += journeys.joins(route: :line).pluck :"lines.company_id" + + exporter.configure do |config| + config.collection = Chouette::Company.where(id: ids.uniq).order('name') + end + + SimpleInterfacesHelper.run_interface_controlling_interruption exporter, :export, args end end end diff --git a/spec/models/chouette/journey_pattern_spec.rb b/spec/models/chouette/journey_pattern_spec.rb index 7c767e4d1..dac45d6b5 100644 --- a/spec/models/chouette/journey_pattern_spec.rb +++ b/spec/models/chouette/journey_pattern_spec.rb @@ -71,6 +71,23 @@ describe Chouette::JourneyPattern, :type => :model do end end + describe "distance_to" do + let(:journey_pattern) { create :journey_pattern } + before do + journey_pattern.costs = generate_journey_pattern_costs(10, 10) + end + subject{ journey_pattern.distance_to stop} + context "for the first stop" do + let(:stop){ journey_pattern.stop_points.first } + it { should eq 0 } + end + + context "for the last stop" do + let(:stop){ journey_pattern.stop_points.last } + it { should eq 40 } + end + end + describe "set_distances" do let(:journey_pattern) { create :journey_pattern } let(:distances){ [] } |
