Class: IERail

Inherits:
Object
  • Object
show all
Defined in:
lib/ierail.rb

Defined Under Namespace

Classes: IERailGet

Constant Summary collapse

URL =
"http://api.irishrail.ie/realtime/realtime.asmx"

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *args, &block) ⇒ Object

Get direction-specific train information for a particular station, by station name. This gives data on trains through that station Returns array of StationData objects, and each obj looks like the one for IERail#station Returns empty array if no data.



193
194
195
196
197
198
199
200
201
202
# File 'lib/ierail.rb', line 193

def method_missing(name, *args, &block)
  # Only handle *bound_from (e.g northbound_from / southbound_from)
  if name =~ /bound_from/
    direction = name.to_s.split('_').first.capitalize

    ier = IERailGet.new("getStationDataByNameXML?StationDesc=#{args.first}", "arrayofobjstationdata", "objstationdata")

    ier.response.select { |sd| sd['Direction'] == direction }.map { |sd| StationData.new(sd) }
  end
end

Instance Method Details

#find_station(partial) ⇒ Object

Find station codes and descriptions using a partial string to match the station name Returns an array of Structs that each respond to {

  struct#name => "Sandycove",
  struct#description => "Glasthule (Sandycove)",
  struct#code => "SCOVE"
}

or an empty array if no matches.



173
174
175
176
177
178
179
180
181
182
183
184
185
# File 'lib/ierail.rb', line 173

def find_station(partial)
  ier = IERailGet.new("getStationsFilterXML?StationText=#{partial}", "ArrayOfObjStationFilter", "objStationFilter")

  unless defined?(Struct::Station)
      Struct.new("Station", :name, :description, :code)
  end

  ier.response.map do |st|
     Struct::Station.new(st['StationDesc_sp'],
                         st['StationDesc'],
                         st['StationCode'])
  end
end

#station(name) ⇒ Object

Get train information for a particular station, by station name. This gives data on trains thru that station Returns array of StationData objects, and each object responds to

obj#server_time => 2012-01-20T10:03:33.777,
obj#train_code => "E909",
obj#name / obj#station_name => "Glenageary",
obj#code / obj#station_code => "GLGRY",
obj#query_time => 10:03:33,
obj#train_date => 20 Jan 2012,
obj#origin => {:name => "Bray", :time => 09:55
obj#destination => => "Howth", :time => 11:03
obj#status => "En Route",
obj#last_location => "Arrived Killiney",
obj#due_in => 6,
obj#minutes_early => 0,
obj#minutes_late => 0,
obj#on_time? => true / false,
obj#early? => true / false,
obj#late? => true / false,
obj#arrival => => 10:09, :expected => 10:09
obj#departure => => 10:09, :expected => 10:09
obj#direction => "Northbound",
obj#train_type => "DART",

} Returns empty array if no data.



127
128
129
130
131
# File 'lib/ierail.rb', line 127

def station(name)
  ier = IERailGet.new("getStationDataByNameXML?StationDesc=#{name}", "arrayofobjstationdata", "objstationdata")

  ier.response.map { |sd| StationData.new(sd) }
end

#station_times(name, mins) ⇒ Object

Get train information for a particular station, by station name, within the time period in minutes from now. This gives data on trains thru that station. Returns array of StationData objects, and each obj looks like the one for IERail#station Will return an empty array if no information.



138
139
140
141
142
# File 'lib/ierail.rb', line 138

def station_times(name, mins)
  ier = IERailGet.new("getStationDataByNameXML_withNumMins?StationDesc=#{name}&NumMins=#{mins}", "arrayofobjstationdata", "objstationdata")

  ier.response.map { |sd| StationData.new(sd) }
end

#stationsObject

Get ALL the stations! Returns array of Station objects, and each object responds to {

  obj#name => "Belfast Central",
  obj#location => [-5.91744, 54.6123]
  obj#code => "BFSTC",
  obj#id => 228
}

Returns empty array if no data, but that would be odd.



77
78
79
80
81
# File 'lib/ierail.rb', line 77

def stations
  ier = IERailGet.new("getAllStationsXML?", "arrayofobjstation", "objstation")

  ier.response.map { |s| Station.new(s) }
end

#train_movements(code, date = Time.now) ⇒ Object

Get the movements of a particular train, by train code, on a date.

If no date is supplied assume train has run/is running today.

This gives all the stations that the train has or will be stopped at. Returns an array of TrainMovement objects, and each object responds to

obj#location => {code: "GLGRY", name: "Glenageary", stop_number: 1 (Stop number on route), type: "O" (Origin) \ "S" (Stop) \ "D" (Destination)
obj#train => => "E909", :date => 20 Jan 2012, :origin => "Glenageary"
obj#arrival => => 10:09, :expected => 10:09, :actual => 10.09
obj#departure => => 10:09, :expected => 10:09, :actual => 10.09
obj#station => "Glenageary"

} Returns empty array if no data.



158
159
160
161
162
# File 'lib/ierail.rb', line 158

def train_movements(code, date=Time.now)
  ier = IERailGet.new("getTrainMovementsXML?TrainId=#{code}&TrainDate=#{date.strftime("%d/%m/%Y")}", "ArrayOfObjTrainMovements", "ObjTrainMovements")

  ier.response.map{ |tm| TrainMovement.new(tm) }
end

#trainsObject

Get ALL the trains! That are on the go at the moment. Returns array of Train objects, and each object responds to

{
  obj#status => "R",
  obj#location => [-6.23929, 53.3509]
  obj#code =>  "D303",
  obj#date => 20 Jan 2012,
  obj#message => "D303\\n09:30 - Docklands to M3 Parkway (1 mins late)\\nDeparted Docklands next stop Broombridge",
  obj#direction => "Northbound"
}

Returns empty array if no data



95
96
97
98
99
# File 'lib/ierail.rb', line 95

def trains
  ier = IERailGet.new("getCurrentTrainsXML?", "arrayofobjtrainpositions", "objtrainpositions")

  ier.response.map { |t| Train.new(t) }
end