ruby-irail 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -40,6 +40,10 @@ train_stations = irail.stations
40
40
  origin = train_stations.first
41
41
  destination = train_stations.last
42
42
  irail.connections(origin, destination)
43
+
44
+ #get train trip information (all stops for a train)
45
+
46
+ irail.vehicle("BE.NMBS.IC2240") # the vehicle ids cans be found when querying for a connection
43
47
  ```
44
48
 
45
49
  ## Contributing
@@ -3,6 +3,7 @@ module IRail::API
3
3
  API_URL = "http://api.irail.be"
4
4
  STATIONS_URI = "stations/"
5
5
  CONNECTIONS_URI = "connections/"
6
+ VEHICLE_URI = "vehicle/"
6
7
 
7
8
  def stations(options = {})
8
9
  station_list_url = build_station_list_url
@@ -16,9 +17,10 @@ module IRail::API
16
17
  IRail::NMBS::DocumentParser.parse_connections(xml_connections)
17
18
  end
18
19
 
19
- def get_connections(connections_url, origin_station, destination_station, options = {})
20
- options = build_connections_option_hash(origin_station, destination_station, options)
21
- IRail::Request.get(connections_url, options)
20
+ def vehicle(vehicle_id, options = {})
21
+ vehicle_url = build_vehicle_url
22
+ xml_vehicle = get_vehicle(vehicle_url, vehicle_id, options)
23
+ IRail::NMBS::DocumentParser.parse_vehicle(xml_vehicle)
22
24
  end
23
25
 
24
26
  def get_station_list(station_list_url, options = {})
@@ -26,6 +28,16 @@ module IRail::API
26
28
  IRail::Request.get(station_list_url, options)
27
29
  end
28
30
 
31
+ def get_connections(connections_url, origin_station, destination_station, options = {})
32
+ options = build_connections_option_hash(origin_station, destination_station, options)
33
+ IRail::Request.get(connections_url, options)
34
+ end
35
+
36
+ def get_vehicle(vehicle_url, vehicle_id, options = {})
37
+ options = build_vehicle_option_hash(vehicle_id, options)
38
+ IRail::Request.get(vehicle_url, options)
39
+ end
40
+
29
41
  private
30
42
  def build_connections_option_hash(origin_station, destination_station, options = {})
31
43
  {
@@ -36,6 +48,14 @@ module IRail::API
36
48
  }
37
49
  end
38
50
 
51
+ def build_vehicle_option_hash(vehicle_id, options = {})
52
+ {
53
+ :query => options.merge({
54
+ :id => vehicle_id
55
+ })
56
+ }
57
+ end
58
+
39
59
  def build_station_list_url
40
60
  [API_URL, STATIONS_URI].join('/')
41
61
  end
@@ -43,5 +63,9 @@ module IRail::API
43
63
  def build_connections_url
44
64
  [API_URL, CONNECTIONS_URI].join('/')
45
65
  end
66
+
67
+ def build_vehicle_url
68
+ [API_URL, VEHICLE_URI].join('/')
69
+ end
46
70
  end
47
71
  end
@@ -9,12 +9,14 @@ module IRail::NMBS
9
9
 
10
10
  xml_name "via"
11
11
 
12
- xml_accessor :id, :from => "@id", :as => Integer
12
+ xml_accessor :id, :from => "@id", :as => Integer
13
+ xml_accessor :delay, :from => "@delay", :as => Integer
13
14
  xml_accessor :station, :as => Station
14
15
  xml_accessor :vehicle, :as => Vehicle
15
16
  xml_accessor :arrival, :as => Step, :from => "arrival"
16
17
  xml_accessor :departure, :as => Step, :from => "departure"
17
18
  xml_accessor :direction, :as => Station
18
19
  xml_reader :wait_time, :from => "timeBetween", :as => Integer
20
+ xml_accessor :unix_time, :from => "time", :as => UnixTime
19
21
  end
20
22
  end
@@ -0,0 +1,12 @@
1
+ require "roxml"
2
+ require_relative "./vehicle.rb"
3
+ require_relative "./vehicle_trip.rb"
4
+
5
+ module IRail::NMBS
6
+ class VehicleInformation
7
+ include ROXML
8
+
9
+ xml_accessor :vehicle, :as => Vehicle
10
+ xml_accessor :trip, :from => "stops", :as => VehicleTrip
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ require "roxml"
2
+ require_relative "./stopover.rb"
3
+
4
+ module IRail::NMBS
5
+ class VehicleTrip
6
+ include ROXML
7
+
8
+ xml_name 'stops'
9
+
10
+ xml_accessor :stop_count, :from => "@number", :as => Integer
11
+ xml_accessor :stops, :from => "stop", :as => [Stopover]
12
+ end
13
+ end
@@ -2,6 +2,7 @@ module IRail::NMBS
2
2
  class DocumentParser
3
3
  STATION_XPATH = "//station"
4
4
  CONNECTION_XPATH = "//connection"
5
+ VEHICLE_XPATH = "//vehicleinformation"
5
6
 
6
7
  def self.parse_stations(xml_string)
7
8
  xml_stations(xml_string).inject([]) do |stations, xml_station|
@@ -15,6 +16,16 @@ module IRail::NMBS
15
16
  end
16
17
  end
17
18
 
19
+ def self.parse_vehicle(xml_string)
20
+ vehicle = xml_vehicle(xml_string)
21
+ IRail::NMBS::VehicleInformation.from_xml(vehicle.to_s)
22
+ end
23
+
24
+ def self.xml_vehicle(xml_string)
25
+ xml_payload = Nokogiri::XML(xml_string)
26
+ xml_payload.xpath(VEHICLE_XPATH)
27
+ end
28
+
18
29
  def self.xml_stations(xml_string)
19
30
  xml_payload = Nokogiri::XML(xml_string)
20
31
  xml_payload.xpath(STATION_XPATH)
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module IRail
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -32,6 +32,34 @@ describe IRail::API::NMBS do
32
32
  end
33
33
  end
34
34
 
35
+ describe :vehicle do
36
+ let(:vehicle_id) { mock("Vehicle id") }
37
+ let(:vehicle_url) { mock("Vehicle url") }
38
+ let(:xml_vehicle) { mock("Xml vehicle") }
39
+ let(:vehicle) { mock("vehicle") }
40
+ let(:options) { mock("Options") }
41
+
42
+ before :each do
43
+ irail.stub(:build_vehicle_url => vehicle_url)
44
+ irail.stub(:get_vehicle => xml_vehicle)
45
+ IRail::NMBS::DocumentParser.stub(:parse_vehicle => vehicle)
46
+ end
47
+
48
+ it "builds the vehicle url" do
49
+ irail.should_receive(:build_vehicle_url)
50
+ irail.vehicle(vehicle_id)
51
+ end
52
+
53
+ it "gets the vehicle" do
54
+ irail.should_receive(:get_vehicle).with(vehicle_url, vehicle_id, options)
55
+ irail.vehicle(vehicle_id, options)
56
+ end
57
+
58
+ it "returns the parsed vehicle" do
59
+ irail.vehicle(vehicle_id, options).should eql vehicle
60
+ end
61
+ end
62
+
35
63
  describe :stations do
36
64
  let(:station_list_url) { mock("Url") }
37
65
  let(:xml_station_list) { mock("Xml station list") }
@@ -7,6 +7,10 @@ describe IRail::NMBS::Stopover do
7
7
  stopover.should respond_to(:id)
8
8
  end
9
9
 
10
+ it "has a delay" do
11
+ stopover.should respond_to(:delay)
12
+ end
13
+
10
14
  it "has a station" do
11
15
  stopover.should respond_to(:station)
12
16
  end
@@ -30,4 +34,8 @@ describe IRail::NMBS::Stopover do
30
34
  it "has a wait time in seconds" do
31
35
  stopover.should respond_to(:wait_time)
32
36
  end
37
+
38
+ it "has a unix time" do
39
+ stopover.should respond_to(:unix_time)
40
+ end
33
41
  end
@@ -0,0 +1,13 @@
1
+ require_relative '../../../../lib/ruby-irail/packages/nmbs/models/vehicle_information.rb'
2
+
3
+ describe IRail::NMBS::VehicleInformation do
4
+ let(:vehicle_information) { IRail::NMBS::VehicleInformation.new }
5
+
6
+ it "has a vehicle" do
7
+ vehicle_information.should respond_to(:vehicle)
8
+ end
9
+
10
+ it "has a trip" do
11
+ vehicle_information.should respond_to(:trip)
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ require_relative '../../../../lib/ruby-irail/packages/nmbs/models/vehicle_trip.rb'
2
+
3
+ describe IRail::NMBS::VehicleTrip do
4
+ let(:vehicle_trip) { IRail::NMBS::VehicleTrip.new }
5
+
6
+ it "has a count of the number of stops" do
7
+ vehicle_trip.should respond_to(:stop_count)
8
+ end
9
+
10
+ it "has many stops" do
11
+ vehicle_trip.should respond_to(:stops)
12
+ end
13
+ end
@@ -77,4 +77,36 @@ describe IRail::NMBS::DocumentParser do
77
77
  IRail::NMBS::DocumentParser.parse_connections(xml_string).size.should eql connections.size
78
78
  end
79
79
  end
80
+
81
+ describe :'self.parse_vehicle' do
82
+ let(:xml_string) { mock("Xml string") }
83
+ let(:xml_payload) { mock("Xml payload") }
84
+ let(:vehicle) { mock("Vehicle") }
85
+ let(:vehicle_instance) { mock("Vehicle instance") }
86
+
87
+ before :each do
88
+ Nokogiri.stub(:XML => xml_payload)
89
+ xml_payload.stub(:xpath => vehicle)
90
+ IRail::NMBS::VehicleInformation.stub(:from_xml => vehicle_instance)
91
+ end
92
+
93
+ it "gets the xml payload from the string passed as parameter" do
94
+ Nokogiri.should_receive(:XML).with(xml_string)
95
+ IRail::NMBS::DocumentParser.parse_vehicle(xml_string)
96
+ end
97
+
98
+ it "extracts the vehicle from the xml payload" do
99
+ xml_payload.should_receive(:xpath).with(IRail::NMBS::DocumentParser::VEHICLE_XPATH)
100
+ IRail::NMBS::DocumentParser.parse_vehicle(xml_string)
101
+ end
102
+
103
+ it "creates a new vehicle for the parsed vehicle attributes" do
104
+ IRail::NMBS::VehicleInformation.should_receive(:from_xml).with(vehicle.to_s)
105
+ IRail::NMBS::DocumentParser.parse_vehicle(xml_string)
106
+ end
107
+
108
+ it "returns a vehicule instance" do
109
+ IRail::NMBS::DocumentParser.parse_vehicle(xml_string).should eql vehicle_instance
110
+ end
111
+ end
80
112
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-irail
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-07-18 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70214013650340 !ruby/object:Gem::Requirement
16
+ requirement: &70168325071420 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70214013650340
24
+ version_requirements: *70168325071420
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: httparty
27
- requirement: &70214013649860 !ruby/object:Gem::Requirement
27
+ requirement: &70168325071000 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70214013649860
35
+ version_requirements: *70168325071000
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: roxml
38
- requirement: &70214013649380 !ruby/object:Gem::Requirement
38
+ requirement: &70168325070580 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70214013649380
46
+ version_requirements: *70168325070580
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: nokogiri
49
- requirement: &70214013648800 !ruby/object:Gem::Requirement
49
+ requirement: &70168325070140 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70214013648800
57
+ version_requirements: *70168325070140
58
58
  description: IRail makes Belgian railway schedule easily available for anyone. This
59
59
  is a Ruby wrapper for their API.
60
60
  email:
@@ -86,6 +86,8 @@ files:
86
86
  - lib/ruby-irail/packages/nmbs/models/trip.rb
87
87
  - lib/ruby-irail/packages/nmbs/models/unix_time.rb
88
88
  - lib/ruby-irail/packages/nmbs/models/vehicle.rb
89
+ - lib/ruby-irail/packages/nmbs/models/vehicle_information.rb
90
+ - lib/ruby-irail/packages/nmbs/models/vehicle_trip.rb
89
91
  - lib/ruby-irail/packages/nmbs/parser/document_parser.rb
90
92
  - lib/version.rb
91
93
  - ruby-irail.gemspec
@@ -102,7 +104,9 @@ files:
102
104
  - spec/packages/nmbs/models/stopover_spec.rb
103
105
  - spec/packages/nmbs/models/trip_spec.rb
104
106
  - spec/packages/nmbs/models/unix_time_spec.rb
107
+ - spec/packages/nmbs/models/vehicle_information_spec.rb
105
108
  - spec/packages/nmbs/models/vehicle_spec.rb
109
+ - spec/packages/nmbs/models/vehicle_trip_spec.rb
106
110
  - spec/packages/nmbs/parser/document_parser_spec.rb
107
111
  homepage: https://github.com/mlainez/ruby-irail
108
112
  licenses: []
@@ -142,5 +146,7 @@ test_files:
142
146
  - spec/packages/nmbs/models/stopover_spec.rb
143
147
  - spec/packages/nmbs/models/trip_spec.rb
144
148
  - spec/packages/nmbs/models/unix_time_spec.rb
149
+ - spec/packages/nmbs/models/vehicle_information_spec.rb
145
150
  - spec/packages/nmbs/models/vehicle_spec.rb
151
+ - spec/packages/nmbs/models/vehicle_trip_spec.rb
146
152
  - spec/packages/nmbs/parser/document_parser_spec.rb