aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlban Peignier2018-03-31 21:54:55 +0200
committerAlban Peignier2018-03-31 21:54:55 +0200
commitf41a85fa419d3598c2edec2de1eef0f69c09e62c (patch)
tree03880ef1d6f4d8692d1a5bf7753afd066ee8c9ed
parentfc53a6c6c1fb95ce46e13f501344d71a6d1e6de9 (diff)
downloadchouette-core-f41a85fa419d3598c2edec2de1eef0f69c09e62c.tar.bz2
Add calendar imports to Import::Gtfs. Refs #6368
-rw-r--r--app/models/concerns/application_days_support.rb8
-rw-r--r--app/models/import/gtfs.rb20
-rw-r--r--db/schema.rb1
-rw-r--r--spec/models/import/gtfs_spec.rb44
4 files changed, 66 insertions, 7 deletions
diff --git a/app/models/concerns/application_days_support.rb b/app/models/concerns/application_days_support.rb
index 2d00b5847..6086d9580 100644
--- a/app/models/concerns/application_days_support.rb
+++ b/app/models/concerns/application_days_support.rb
@@ -10,8 +10,10 @@ module ApplicationDaysSupport
SUNDAY = 256
EVERYDAY = MONDAY | TUESDAY | WEDNESDAY | THURSDAY | FRIDAY | SATURDAY | SUNDAY
+ ALL_DAYS = %w(monday tuesday wednesday thursday friday saturday sunday).freeze
+
def display_day_types
- %w(monday tuesday wednesday thursday friday saturday sunday).select{ |d| self.send(d) }.map{ |d| self.human_attribute_name(d).first(2)}.join(', ')
+ ALL_DAYS.select{ |d| self.send(d) }.map{ |d| self.human_attribute_name(d).first(2)}.join(', ')
end
def day_by_mask(flag)
@@ -39,6 +41,10 @@ module ApplicationDaysSupport
def self.day_by_mask(int_day_types,flag)
int_day_types & flag == flag
end
+
+ def self.all_days
+ ALL_DAYS
+ end
end
def valid_days
diff --git a/app/models/import/gtfs.rb b/app/models/import/gtfs.rb
index 5b332315d..75ff45f8b 100644
--- a/app/models/import/gtfs.rb
+++ b/app/models/import/gtfs.rb
@@ -111,6 +111,8 @@ class Import::Gtfs < Import::Base
vehicle_journey.published_journey_name = trip.headsign.presence || trip.id
save vehicle_journey
+ vehicle_journey.time_tables << referential.time_tables.find(time_tables_by_service_id[trip.service_id])
+
vehicle_journey_by_trip_id[trip.id] = vehicle_journey.id
end
end
@@ -143,6 +145,24 @@ class Import::Gtfs < Import::Base
end
end
+ def time_tables_by_service_id
+ @time_tables_by_service_id ||= {}
+ end
+
+ def import_calendars
+ source.calendars.each do |calendar|
+ time_table = referential.time_tables.build comment: "Calendar #{calendar.service_id}"
+ Chouette::TimeTable.all_days.each do |day|
+ time_table.send("#{day}=", calendar.send(day))
+ end
+ time_table.periods.build period_start: calendar.start_date, period_end: calendar.end_date
+
+ save time_table
+
+ time_tables_by_service_id[calendar.service_id] = time_table.id
+ end
+ end
+
def save(model)
unless model.save
Rails.logger.info "Can't save #{model.class.name} : #{model.errors.inspect}"
diff --git a/db/schema.rb b/db/schema.rb
index d90bf7b6c..77e35f449 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -18,7 +18,6 @@ ActiveRecord::Schema.define(version: 20180319043333) do
enable_extension "hstore"
enable_extension "postgis"
enable_extension "unaccent"
- enable_extension "objectid"
create_table "access_links", id: :bigserial, force: :cascade do |t|
t.integer "access_point_id", limit: 8
diff --git a/spec/models/import/gtfs_spec.rb b/spec/models/import/gtfs_spec.rb
index bdfc565d3..dcdef45e2 100644
--- a/spec/models/import/gtfs_spec.rb
+++ b/spec/models/import/gtfs_spec.rb
@@ -116,17 +116,28 @@ RSpec.describe Import::Gtfs do
it "should create a VehicleJourney for each trip" do
referential.switch
+ import.import_calendars
import.import_routes
import.import_trips
- defined_attributes = [
- :published_journey_name
- ]
+ defined_attributes = ->(v) {
+ [v.published_journey_name, v.time_tables.first&.comment]
+ }
expected_attributes = [
- "to Bullfrog", "to Airport", "Shuttle", "CITY1", "CITY2", "to Furnace Creek Resort", "to Bullfrog", "to Amargosa Valley", "to Airport", "to Amargosa Valley", "to Airport"
+ ["to Bullfrog", "Calendar FULLW"],
+ ["to Airport", "Calendar FULLW"],
+ ["Shuttle", "Calendar FULLW"],
+ ["CITY1", "Calendar FULLW"],
+ ["CITY2", "Calendar FULLW"],
+ ["to Furnace Creek Resort", "Calendar FULLW"],
+ ["to Bullfrog", "Calendar FULLW"],
+ ["to Amargosa Valley", "Calendar WE"],
+ ["to Airport", "Calendar WE"],
+ ["to Amargosa Valley", "Calendar WE"],
+ ["to Airport", "Calendar WE"]
]
- expect(referential.vehicle_journeys.pluck(*defined_attributes)).to eq(expected_attributes)
+ expect(referential.vehicle_journeys.map(&defined_attributes)).to eq(expected_attributes)
end
end
@@ -182,4 +193,27 @@ RSpec.describe Import::Gtfs do
end
end
+ describe "#import_calendars" do
+ let(:import) { create_import "google-sample-feed.zip" }
+
+ it "should create a Timetable for each calendar" do
+ referential.switch
+
+ import.import_calendars
+
+ def d(value)
+ Date.parse(value)
+ end
+
+ defined_attributes = ->(t) {
+ [t.comment, t.valid_days, t.periods.first.period_start, t.periods.first.period_end]
+ }
+ expected_attributes = [
+ ["Calendar FULLW", [1, 2, 3, 4, 5, 6, 7], d("Mon, 01 Jan 2007"), d("Fri, 31 Dec 2010")],
+ ["Calendar WE", [6, 7], d("Mon, 01 Jan 2007"), d("Fri, 31 Dec 2010")]
+ ]
+ expect(referential.time_tables.map(&defined_attributes)).to eq(expected_attributes)
+ end
+ end
+
end