class Bart::Client::Estimates

Constants

RESOLUTION

Public Instance Methods

find(stop_id, platform: nil, direction: nil)
Alias for: get
get(stop_id, platform: nil, direction: nil) click to toggle source

We need to memoize but never for longer than `RESOLUTION`, so rather than use Memoist this API maintains its own memo.

# File lib/bart_api/client/estimates.rb, line 11
def get stop_id, platform: nil, direction: nil
  @memo ||= {}
  model, stored_at = @memo[[stop_id, platform, direction]]
  return model if stored_at && 
    Time.now - Bart.configuration.refresh_time < stored_at

  parsed = get_request '/api/etd.aspx', query: { 
    cmd: :etd, 
    orig: stop_id,
    plat: platform,
    dir: direction
  }.select { |_,v| v != nil }

  parsed['root']['station'].tap do |station|
    station['etd'] = [station['etd']].flatten
    station['etd'].each do |etd|
      etd['estimate'] = [etd['estimate']].flatten
    end
  end

  model = Stop.new parsed['root']['station']
  @memo[[stop_id, platform, direction]] = [model, Time.now]
  model
end
Also aliased as: find
key(stop_id, platform, direction) click to toggle source
# File lib/bart_api/client/estimates.rb, line 5
def key stop_id, platform, direction
  [stop_id, platform, direction]
end