Class: IERail
- Inherits:
-
Object
- Object
- IERail
- 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
-
#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.
-
#method_missing(name, *args, &block) ⇒ Object
Get direction-specific train information for a particular station, by station name.
-
#station(name) ⇒ Object
Get train information for a particular station, by station name.
-
#station_times(name, mins) ⇒ Object
Get train information for a particular station, by station name, within the time period in minutes from now.
-
#stations ⇒ Object
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.
-
#train_movements(code, date = Time.now) ⇒ Object
Get the movements of a particular train, by train code, on a date.
-
#trains ⇒ Object
Get ALL the trains! That are on the go at the moment.
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 |
#stations ⇒ Object
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 |
#trains ⇒ Object
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 |