class Onebusaway

Attributes

api_base[R]

Public Class Methods

new(api_key) click to toggle source
# File lib/onebusaway_updated.rb, line 8
def initialize api_key
  @api_key  = api_key
  @api_base = URI 'http://api.onebusaway.org/api/where/'
end

Public Instance Methods

api_base=(url) click to toggle source
# File lib/onebusaway_updated.rb, line 17
def api_base= url
  @api_base = URI url
end
arrivals_and_departures_for_stop(agency_id, stop_id) click to toggle source
# File lib/onebusaway_updated.rb, line 57
def arrivals_and_departures_for_stop agency_id, stop_id
  result = request 'arrivals-and-departures-for-stop',
                   id: make_id(agency_id, stop_id)

  result['arrivalsAndDepartures'].map do |arr_dep|
    ArrivalAndDeparture.new arr_dep
  end
end
make_id(agency_id, sub_id) click to toggle source
# File lib/onebusaway_updated.rb, line 13
def make_id agency_id, sub_id
  "#{agency_id}_#{sub_id}"
end
route_by_id(agency_id, route_id) click to toggle source
# File lib/onebusaway_updated.rb, line 27
def route_by_id agency_id, route_id
  result = request 'route', id: make_id(agency_id, route_id)

  Route.new result
end
routes_for_location(lat, lon) click to toggle source
# File lib/onebusaway_updated.rb, line 41
def routes_for_location lat, lon
  result = request 'routes-for-location', lat: lat, lon: lon

  result['routes'].map do |route|
    Route.new route
  end
end
stop_by_id(agency_id, stop_id) click to toggle source
# File lib/onebusaway_updated.rb, line 21
def stop_by_id agency_id, stop_id
  result = request 'stop', id: make_id(agency_id, stop_id)

  Stop.new result
end
stops_for_location(lat, lon) click to toggle source
# File lib/onebusaway_updated.rb, line 33
def stops_for_location lat, lon
  result = request 'stops-for-location', lat: lat, lon: lon

  result['stops'].map do |stop|
    Stop.new stop
  end
end
stops_for_route(agency_id, route_id) click to toggle source
# File lib/onebusaway_updated.rb, line 49
def stops_for_route agency_id, route_id
  result = request 'stops-for-route', id: make_id(agency_id, route_id)

  result['stops'].map do |stop|
    Stop.new stop
  end
end

Private Instance Methods

api_url(method, options = {}) click to toggle source
# File lib/onebusaway_updated.rb, line 68
def api_url method, options = {}
  options[:key] = @api_key

  id = options.delete :id

  method = [method, id].compact.join '/'
  method << '.json'

  url = @api_base + method

  url.query = options.to_a.map{|pair| "#{pair[0]}=#{pair[1]}"}.join("&")
  url
end
request(call, url_options) click to toggle source
# File lib/onebusaway_updated.rb, line 82
def request call, url_options
  url = api_url call, url_options

  json = open(url).read

  result = JSON.parse json
  code = result['code'].to_s
  text = result['text']

  raise "Request failed (#{code}): #{text}" unless code.start_with? '2'

  result['data']
end