class Amtrak::TrainParser
Will take in an JSON document as a hash and parse out the train schedule
Attributes
json[R]
Public Class Methods
new(json)
click to toggle source
# File lib/amtrak/train_parser.rb, line 13 def initialize(json) @json = json end
parse(json)
click to toggle source
# File lib/amtrak/train_parser.rb, line 7 def self.parse(json) new(json).parse end
Public Instance Methods
find_arrival_times(segment)
click to toggle source
# File lib/amtrak/train_parser.rb, line 47 def find_arrival_times(segment) date, scheduled_time = segment['destinationScheduledArrivalDateTime'].split('T') estimated_arrival = segment['destinationEstimatedArrivalDateTime'] _, estimated_time = estimated_arrival.split('T') if estimated_arrival status = segment['destinationStatusComment'] { date: date, scheduled_time: format_time(scheduled_time), estimated_time: or_cancelled(format_time(estimated_time), status) } end
find_departure_times(segment)
click to toggle source
# File lib/amtrak/train_parser.rb, line 34 def find_departure_times(segment) date, scheduled_time = segment['originScheduledDepartureDateTime'].split('T') estimated_depart = segment['originEstimatedDepartureDateTime'] _, estimated_time = estimated_depart.split('T') if estimated_depart status = segment['originStatusComment'] { date: date, scheduled_time: format_time(scheduled_time), estimated_time: or_cancelled(format_time(estimated_time), status) } end
parse()
click to toggle source
# File lib/amtrak/train_parser.rb, line 17 def parse (json['journeys'] || []) .map(&method(:parse_journey)) .compact end
parse_journey(journey)
click to toggle source
# File lib/amtrak/train_parser.rb, line 23 def parse_journey(journey) segment = journey['segments'].first return unless segment { number: segment['trainNumber'].to_i, departure: find_departure_times(segment), arrival: find_arrival_times(segment) } end
Private Instance Methods
format_time(time)
click to toggle source
# File lib/amtrak/train_parser.rb, line 70 def format_time(time) return unless time Time.parse(time).strftime('%l:%M %P') end
or_cancelled(time, status)
click to toggle source
# File lib/amtrak/train_parser.rb, line 62 def or_cancelled(time, status) if status == 'Canceled' 'Canceled' else time end end