Sha256: 85b39b1a7466b5ffe72955983622fdc33c606c4dc8cdd521dc90b463aa031367

Contents?: true

Size: 1.46 KB

Versions: 1

Compression:

Stored size: 1.46 KB

Contents

require "gtfs/realtime/nearby"

module GTFS
  class Realtime
    class Stop < GTFS::Realtime::Model
      include GTFS::Realtime::Nearby

      one_to_many :service_alerts
      one_to_many :stop_times
      one_to_many :stop_time_updates
      many_to_many :trip_updates, join_table: :gtfs_realtime_stop_time_updates
      many_to_many :trips, join_table: :gtfs_realtime_stop_times
      many_through_many :routes, through: [
        [:stop_times, :stop_id, :trip_id],
        [:trips, :id, :route_id]
      ]
      many_through_many :active_routes, class: GTFS::Realtime::Route, through: [
        [:stop_time_updates, :stop_id, :trip_update_id],
        [:trip_updates, :id, :route_id]
      ]

      def stop_times_schedule_for(date)
        # TODO: .all.first is a weird syntax to do eager loading correctly. Maybe there's a better way?
        self_with_eager_loads = GTFS::Realtime::Stop.where(id: id).eager(stop_times: {trip: [:calendar_dates, :route, :shapes]}).all.first
        self_with_eager_loads.stop_times.select{|st| st.trip.active?(Date.today)}.sort_by{|st| st.departure_time}
      end

      def stop_times_for_today
        stop_times = stop_times_schedule_for(Date.today)
        stop_time_updates.each do |stu|
          # find a matching existing record in the schedule
          stop_time = stop_times.find{|st| st.trip_id == stu.trip_update.trip_id}

          # update its info
          stop_time.set(stu)
        end
        stop_times
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
gtfs-realtime-0.3.0 lib/gtfs/realtime/stop.rb