class EasyTransilien::Trip

EasyTransilien::Trip This class give you the differents Train from one point to an other point, on the same Transilien::Route, in the Time boudaries you gave.

The key method id Trip.find(from, to, options) You can let options and options params empty: in that case [at] will be right now, and [last] will be in 1 hour later than [at]

A trip is the EasyTransilien representation from Transilien::VehicleJourney

Attributes

access_time[RW]
arrival_time[RW]
at[RW]
from_station[RW]
from_stop[RW]
last[RW]
mission[RW]
ms_journey[RW]
start_time[RW]
stops[RW]
to_station[RW]
to_stop[RW]

Public Class Methods

find(from, to , options= {}) click to toggle source

Find Options:

  • at (default Time.new)

  • last (default at + default_duration(3600))

  • whole_day: if true, override at and last with respectively 00:01 and 00:00

  • return: if true, invert from and to

# File lib/easy_transilien/trip.rb, line 28
def find(from, to , options= {})
  at = last = nil
  default_duration = 3600
  if options[:whole_day]
    now = Time.new
    at = Time.new(now.year, now.month, now.day, 0, 0, 1)
    last = at + 86400
  elsif options[:at] && options[:at].is_a?(Time)
    at = options[:at]
    last = options[:last] if options[:last] && options[:last].is_a?(Time)
    last ||= at + default_duration
  end
  if options[:return]
    from_was = from
    from = to
    to = from_was
  end
  at ||= Time.new
  raise "at params MUST be a valid Time instance. Given: #{at.inspect}" unless at.is_a?(Time)
  last ||= at + default_duration
  raise "last params MUST be a valid Time instance. Given: #{last.inspect}" unless last.is_a?(Time)

  # auto sort the mess… Yes, I'm very kind to these people
  if at > last
    aat = at
    at = last
    last = aat
  end

  from_station = EasyTransilien::Station.find(from).first
  to_station   = EasyTransilien::Station.find(to).first

  raise "Can't find a Station from #{from.inspect}" unless from_station
  raise "Can't find a Station from #{to.inspect}"   unless to_station

  routes   = Transilien::Route.find(stop_area_external_code: {and: [from_station.external_code, to_station.external_code] }, check_order: 1)
  journeys = Transilien::VehicleJourney.find(route_external_code: routes.map(&:external_code), date: Transilien.date(at), start_time: Transilien.time(at), end_time: Transilien.time(last))

  trips = []

  journeys.each do |journey|
    item = new
    item.at            = at
    item.last          = last
    item.from_station  = from_station
    item.to_station    = to_station
    item.stops         = journey.stops.map do |ms_stop|
      s = EasyTransilien::Stop.new
      s.ms_stop = ms_stop
      s
    end.sort
    item.from_stop     = item.stops.select { |ts| ts.station_external_code == from_station.external_code }.first
    item.to_stop       = item.stops.select { |ts| ts.station_external_code == to_station.external_code   }.first
    next if item.from_stop.nil? || item.to_stop.nil? # drop item if this journey doesn't deserve our from_stop or to_stop
    item.access_time   = journey.access_time
    item.ms_journey    = journey
    item.mission       = journey.name
    item.start_time    = item.from_stop.ms_stop.stop_time
    item.arrival_time  = item.to_stop.ms_stop.stop_time

    trips << item

  end
  trips.sort
end

Public Instance Methods

<=>(another) click to toggle source
# File lib/easy_transilien/trip.rb, line 120
def <=>(another)
  self.from_stop.time <=> another.from_stop.time
end
external_code() click to toggle source
# File lib/easy_transilien/trip.rb, line 96
def external_code
  journey.external_code
end
from_station_name() click to toggle source
# File lib/easy_transilien/trip.rb, line 100
def from_station_name
  from_station.name
end
inspect() click to toggle source
# File lib/easy_transilien/trip.rb, line 116
def inspect
  "<EasyTransilien::Trip:#{object_id} @access_time=#{access_time} @mission=#{mission} @from_stop=#{from_stop}, @to_stop=#{to_stop}>"
end
line_code() click to toggle source
# File lib/easy_transilien/trip.rb, line 108
def line_code
  ms_journey.route.line.code
end
to_s() click to toggle source
# File lib/easy_transilien/trip.rb, line 112
def to_s
  "[#{mission}] #{from_stop} -> #{to_stop}"
end
to_station_name() click to toggle source
# File lib/easy_transilien/trip.rb, line 104
def to_station_name
  to_station.name
end