lib/gtfs/realtime/stop_time.rb in gtfs-realtime-0.2.1 vs lib/gtfs/realtime/stop_time.rb in gtfs-realtime-0.2.2

- old
+ new

@@ -1,8 +1,55 @@ module GTFS class Realtime class StopTime < GTFS::Realtime::Model many_to_one :trip many_to_one :stop + + attr_accessor :actual_arrival_time, :actual_arrival_delay, :actual_departure_time, :actual_departure_delay + + def live? + actual_arrival_time || actual_arrival_delay || actual_departure_time || actual_departure_delay + end + + def arrival_time + actual_arrival_time || scheduled_arrival_time + end + + def departure_time + actual_departure_time || scheduled_departure_time + end + + def scheduled_arrival_time + self.class.parse_time(self[:arrival_time]) + end + + def scheduled_departure_time + self.class.parse_time(self[:departure_time]) + end + + def set(val) + return super(val) unless val.is_a?(GTFS::Realtime::StopTimeUpdate) + + @actual_arrival_time = val.arrival_time + @actual_arrival_delay = val.arrival_delay + @actual_departure_time = val.departure_time + @actual_departure_delay = val.departure_delay + end + + private + + def self.parse_time(time, date = Date.today) + # TODO: handle case where date != Date.today + day_adjustment = 0 + hour = time[0...2].to_i + + # handle timestamps like "24:30" + if hour > 24 + days = hour / 24 + time[0...2] = (hour % 24).to_s.rjust(2, '0') + end + + Time.parse(time) + day_adjustment * 60 * 60 * 24 + end end end end