def self.dispatch_command(args_text, fetch: nil, time: Time.now)
parsed = SunbusParse.parse(args_text)
return { error: parsed[:error] } if parsed[:error]
case parsed[:action]
when :help
{ reply: SunbusFormat.help_reply }
when :ringroad
result = SunbusRingRoad.drive_time_one_go(region: parsed[:region])
return { error: result[:error] } if result[:error]
{ reply: SunbusFormat.format_ringroad(result) }
when :stop
stops = SunbusGtfs.search_stops(parsed[:query], region: parsed[:region], fetch: fetch)
{ reply: SunbusFormat.format_stops(stops, query: parsed[:query], region: parsed[:region]) }
when :suburb
result = SunbusGtfs.stops_for_suburb(parsed[:query], region: parsed[:region], fetch: fetch)
return { error: result[:error] } if result[:error]
{
reply: SunbusFormat.format_suburb_stops(
result[:stops],
suburb: parsed[:query],
region: parsed[:region]
)
}
when :times
result = SunbusTimes.lookup(parsed[:stop], region: parsed[:region], fetch: fetch, time: time)
return { error: result[:error] } if result[:error]
{
reply: SunbusFormat.format_times(
stop_name: result[:stop][:name],
rows: result[:rows],
region: parsed[:region],
service_date: result[:service_date],
day_offset: result[:day_offset]
)
}
when :trip
result = SunbusConnect.plan(
from: parsed[:from],
to: parsed[:to],
region: parsed[:region],
fetch: fetch,
time: time
)
return { error: result[:error] } if result[:error]
{ reply: SunbusFormat.format_trip(result, region: parsed[:region], service_date: result[:service_date],
day_offset: result[:day_offset]) }
when :alerts
items = SunbusRss.alerts(region: parsed[:region], fetch: fetch)
{ reply: SunbusFormat.format_alerts(items, region: parsed[:region]) }
when :notices
items = SunbusRss.notices(region: parsed[:region], fetch: fetch)
{ reply: SunbusFormat.format_notices(items, region: parsed[:region]) }
else
{ error: SunbusFormat.help_reply }
end
end