diff options
| author | Teddy Wing | 2017-05-12 17:32:09 +0200 |
|---|---|---|
| committer | Teddy Wing | 2017-05-12 17:56:27 +0200 |
| commit | b11e7d792b2c3743ca95f7a2d6d5c7bdc4a39105 (patch) | |
| tree | d987caa2f0034922e1a8a0ac5207492f93ee5273 | |
| parent | 7bf94bc6e6ce6558252252e68419e89a23213573 (diff) | |
| download | chouette-core-b11e7d792b2c3743ca95f7a2d6d5c7bdc4a39105.tar.bz2 | |
VehicleJourneysController: When filtering departure_time allow nil stops
There's a `params[:q][:vehicle_journey_without_departure_time]`
parameter coming in from the frontend that's supposed to allow it to
decide whether or not to include vehicle journeys that have nil stops.
Allow this parameter to function for the
`VehicleJourney.where_departure_time_between` method by conditionally
checking an input parameter to determine whether to add the "OR"
condition onto the "WHERE" filter.
Refs #3370
| -rw-r--r-- | app/controllers/vehicle_journeys_controller.rb | 4 | ||||
| -rw-r--r-- | app/models/chouette/vehicle_journey.rb | 12 | ||||
| -rw-r--r-- | spec/models/chouette/vehicle_journey_spec.rb | 17 |
3 files changed, 30 insertions, 3 deletions
diff --git a/app/controllers/vehicle_journeys_controller.rb b/app/controllers/vehicle_journeys_controller.rb index c78613e99..eebcbb922 100644 --- a/app/controllers/vehicle_journeys_controller.rb +++ b/app/controllers/vehicle_journeys_controller.rb @@ -84,7 +84,9 @@ class VehicleJourneysController < ChouetteController params[:q][:vehicle_journey_at_stops_departure_time_lteq] scope = scope.where_departure_time_between( params[:q][:vehicle_journey_at_stops_departure_time_gteq], - params[:q][:vehicle_journey_at_stops_departure_time_lteq] + params[:q][:vehicle_journey_at_stops_departure_time_lteq], + allow_empty: + params[:q][:vehicle_journey_without_departure_time] == 'true' ) end diff --git a/app/models/chouette/vehicle_journey.rb b/app/models/chouette/vehicle_journey.rb index 0b4db3d9d..852139625 100644 --- a/app/models/chouette/vehicle_journey.rb +++ b/app/models/chouette/vehicle_journey.rb @@ -231,13 +231,21 @@ module Chouette # "vehicle_journeys"."id" # ') # .where_departure_time_between('08:00', '09:45') - def self.where_departure_time_between(start_time, end_time) + def self.where_departure_time_between( + start_time, + end_time, + allow_empty: false + ) self .where( %Q( "vehicle_journey_at_stops"."departure_time" >= ? AND "vehicle_journey_at_stops"."departure_time" < ? - OR "vehicle_journey_at_stops"."id" IS NULL + #{ + if allow_empty + 'OR "vehicle_journey_at_stops"."id" IS NULL' + end + } ), "2000-01-01 #{start_time}:00 UTC", "2000-01-01 #{end_time}:00 UTC" diff --git a/spec/models/chouette/vehicle_journey_spec.rb b/spec/models/chouette/vehicle_journey_spec.rb index caa4af203..7f2305134 100644 --- a/spec/models/chouette/vehicle_journey_spec.rb +++ b/spec/models/chouette/vehicle_journey_spec.rb @@ -346,6 +346,23 @@ describe Chouette::VehicleJourney, :type => :model do .to_a ).to eq([journey_middle]) end + + it "can include vehicle journeys that have nil stops" do + journey = create(:vehicle_journey_empty) + route = journey.route + + expect(route + .vehicle_journeys + .select('DISTINCT "vehicle_journeys".*') + .joins(' + LEFT JOIN "vehicle_journey_at_stops" + ON "vehicle_journey_at_stops"."vehicle_journey_id" = + "vehicle_journeys"."id" + ') + .where_departure_time_between('02:30', '03:30', allow_empty: true) + .to_a + ).to eq([journey]) + end end subject { create(:vehicle_journey_odd) } |
