class NextTrain

Attributes

stpid[R]

Public Class Methods

[](stpid) click to toggle source
# File lib/next_train.rb, line 5
def self.[](stpid)
  new(stpid).execute
end
api_key=(api_key) click to toggle source
# File lib/next_train.rb, line 9
def self.api_key= (api_key)
  CTA::TrainTracker.key = api_key
end
new(stpid) click to toggle source
# File lib/next_train.rb, line 13
def initialize(stpid)
  @stpid = stpid
end

Public Instance Methods

execute() click to toggle source
# File lib/next_train.rb, line 17
def execute
  if minutes_until_next_arrival == 0
    "arriving"
  else
    arrival_time_in_minutes
  end
end

Private Instance Methods

arrival_time_in_minutes() click to toggle source
# File lib/next_train.rb, line 29
def arrival_time_in_minutes
  time_until_next_arrival_diff[:diff]
end
arrival_time_key() click to toggle source
# File lib/next_train.rb, line 45
def arrival_time_key
  "arrT"
end
arrivals() click to toggle source
# File lib/next_train.rb, line 53
def arrivals
  ensure_no_puts do
    data = CTA::TrainTracker.arrivals(stpid: stpid)

    if data.empty?
       raise "No data returned, please check your API key"
    else
       data
    end
  end
end
ensure_no_puts(&block) click to toggle source
# File lib/next_train.rb, line 69
def ensure_no_puts(&block)
  tmp = $stdout
  $stdout = StringIO.new
  block.call
ensure
  $stdout = tmp
end
error?(data) click to toggle source
# File lib/next_train.rb, line 65
def error?(data)
  data["errCd"] && data["errCd"] != "0"
end
minutes_until_next_arrival() click to toggle source
# File lib/next_train.rb, line 33
def minutes_until_next_arrival
  time_until_next_arrival_diff[:minute]
end
next_arrival() click to toggle source
# File lib/next_train.rb, line 49
def next_arrival
  arrivals[0]
end
next_arrival_time() click to toggle source
# File lib/next_train.rb, line 41
def next_arrival_time
  Time.parse(next_arrival[arrival_time_key])
end
time_until_next_arrival_diff() click to toggle source
# File lib/next_train.rb, line 37
def time_until_next_arrival_diff
  Time.diff(next_arrival_time, Time.now, "%N")
end