class Object
Public Class Methods
error(message)
click to toggle source
# File lib/slurpy/slurpy.rb, line 94 def self.error(message) puts "ERROR: #{message}" exit 1 end
extract_date(date)
click to toggle source
# File lib/slurpy/slurpy.rb, line 174 def self.extract_date(date) epoch_time_in_seconds = date .to_s .scan(%r(/Date\((\d+)\)/)) .flatten.first.to_i / 1000 Slurpy.error 'Failed to retrieve date from #{date}' unless epoch_time_in_seconds timezone = Timezone::Zone.new :zone => TIMEZONE timezone.time(Time.at(epoch_time_in_seconds)).strftime('%R') end
from_cache(resource, lambda)
click to toggle source
# File lib/slurpy/slurpy.rb, line 118 def self.from_cache(resource, lambda) APICache.get(resource, period: 1, cache: 10) do lambda.call end end
get_route(route_num)
click to toggle source
# File lib/slurpy/slurpy.rb, line 140 def self.get_route(route_num) Slurpy.from_cache "route::#{route_num}", lambda { infos = request(:routes) .select {|route| route['Description'].include? "(R#{route_num})" } Slurpy.error "No route 'R#{route_num}', sorry." unless infos.size == 1 infos } end
get_route_by_id(route_id)
click to toggle source
# File lib/slurpy/slurpy.rb, line 169 def self.get_route_by_id(route_id) request(:routes) .select { |route| route['RouteID'] == route_id.to_i }.first end
get_stop(query)
click to toggle source
# File lib/slurpy/slurpy.rb, line 151 def self.get_stop(query) Slurpy.from_cache "stop::#{query}", lambda { infos = request(:stops) .select { |stop| stop['Description'].downcase.include? query.downcase } stops = infos.map{ |stop| stop['Description']}.to_set.to_a error = "No stop matches '#{query}', sorry." if stops.empty? #error = "Your request for stop '#{query}' is not specific enough. " \ # "Pick one: #{stops.inspect}" if stops.size > 1 Slurpy.error error if error return infos, stops } end
get_times()
click to toggle source
# File lib/slurpy/slurpy.rb, line 136 def self.get_times request(:times) end
invalidate_cache()
click to toggle source
# File lib/slurpy/slurpy.rb, line 124 def self.invalidate_cache Moneta.new(:File, dir: CACHE_FOLDER).clear end
request(resource)
click to toggle source
# File lib/slurpy/slurpy.rb, line 128 def self.request(resource) Slurpy.from_cache "res::#{resource}", lambda { JSON.parse( Typhoeus.get("#{BASE_URL}#{RESOURCES[resource]}") .response_body) } end
shuttles_for_stop(stop)
click to toggle source
# File lib/slurpy/slurpy.rb, line 99 def self.shuttles_for_stop(stop) stops_info, stop_name = get_stop(stop) stop_ids = stops_info.map { |stop_info| stop_info['RouteStopID'] } shuttles = get_times .select do |time| stop_ids.include? time['RouteStopID'] end .inject({}) do |route_to_stop_times, times| route_to_stop_times.update( times['RouteID'] => extract_date(times['StopTimes'] .first['DepartureTime']) ) end return shuttles, stop_name end