module QldTranslinkRt
Constants
- FEED_ALERTS
- FEED_TRIP_UPDATES
Public Instance Methods
Source
# File lib/qld_translink_rt.rb, line 25 def decode(body) TransitRealtime::FeedMessage.decode(body) end
Source
# File lib/qld_translink_rt.rb, line 72 def departures_for_stops(stop_ids, message:, time: Time.now, limit: QldConfig::MAX_DEPARTURES) ids = Array(stop_ids).map(&:to_s).to_set return [] if ids.empty? || message.nil? rows = [] Array(message.entity).each do |entity| trip_update = entity.trip_update next unless trip_update route_id = trip_update.trip&.route_id.to_s Array(trip_update.stop_time_update).each do |stu| next unless ids.include?(stu.stop_id.to_s) departure = stu.departure || stu.arrival next unless departure&.time at = Time.at(departure.time.to_i) next if at < time - 60 rows << { route_id: route_id, stop_id: stu.stop_id.to_s, time: at, delay_sec: departure.delay.to_i } end end rows.sort_by { |row| row[:time] }.first(limit) end
Source
# File lib/qld_translink_rt.rb, line 13 def fetch_feed(region:, feed:, fetch: nil) url = QldConfig.transit_feed_url(region: region, feed: feed) body = if fetch fetch.call(url) else RabbotHttp.fetch(url, user_agent: "Rabbot/1.0 (qld translink rt)") end decode(body) rescue StandardError nil end
Source
# File lib/qld_translink_rt.rb, line 53 def mode_filter(mode) !mode.to_s.strip.empty? end
Source
# File lib/qld_translink_rt.rb, line 57 def mode_matches?(mode, route_type) case mode.to_s.downcase when "train", "rail" route_type == 2 when "bus" route_type == 3 when "ferry" route_type == 4 when "tram" route_type == 0 else true end end
Source
# File lib/qld_translink_rt.rb, line 29 def parse_alerts(message, mode: nil) return [] unless message Array(message.entity).filter_map do |entity| alert = entity.alert next unless alert header = alert.header_text&.translation&.first&.text.to_s.strip description = alert.description_text&.translation&.first&.text.to_s.squeeze(" ").strip next if header.empty? && description.empty? route_type = alert.informed_entity&.first&.route_type if mode_filter(mode) && route_type && !mode_matches?(mode, route_type) next end { id: entity.id.to_s, header: header, description: description[0, 160] } end end
Source
# File lib/qld_translink_rt.rb, line 102 def reachable?(region: QldConfig::DEFAULT_REGION, fetch: nil) msg = fetch_feed(region: region, feed: FEED_ALERTS, fetch: fetch) !msg.nil? && msg.entity.any? rescue StandardError false end