ruby-irail 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,6 +4,7 @@ module IRail::API
4
4
  STATIONS_URI = "stations/"
5
5
  CONNECTIONS_URI = "connections/"
6
6
  VEHICLE_URI = "vehicle/"
7
+ LIVEBOARD_URI = "liveboard/"
7
8
 
8
9
  def stations(options = {})
9
10
  station_list_url = build_station_list_url
@@ -23,6 +24,18 @@ module IRail::API
23
24
  IRail::NMBS::DocumentParser.parse_vehicle(xml_vehicle)
24
25
  end
25
26
 
27
+ def departures(station_id, options = {})
28
+ liveboard_url = build_liveboard_url
29
+ xml_departures = get_departures(liveboard_url, station_id, options)
30
+ IRail::NMBS::DocumentParser.parse_liveboard(xml_departures)
31
+ end
32
+
33
+ def arrivals(station_id, options = {})
34
+ liveboard_url = build_liveboard_url
35
+ xml_arrivals = get_arrivals(liveboard_url, station_id, options)
36
+ IRail::NMBS::DocumentParser.parse_liveboard(xml_arrivals)
37
+ end
38
+
26
39
  def get_station_list(station_list_url, options = {})
27
40
  options = { :query => options } if options.any?
28
41
  IRail::Request.get(station_list_url, options)
@@ -38,6 +51,16 @@ module IRail::API
38
51
  IRail::Request.get(vehicle_url, options)
39
52
  end
40
53
 
54
+ def get_departures(liveboard_url, station_id, options = {})
55
+ options = build_departures_option_hash(station_id, options)
56
+ IRail::Request.get(liveboard_url, options)
57
+ end
58
+
59
+ def get_arrivals(liveboard_url, station_id, options = {})
60
+ options = build_arrivals_option_hash(station_id, options)
61
+ IRail::Request.get(liveboard_url, options)
62
+ end
63
+
41
64
  private
42
65
  def build_connections_option_hash(origin_station, destination_station, options = {})
43
66
  {
@@ -56,6 +79,24 @@ module IRail::API
56
79
  }
57
80
  end
58
81
 
82
+ def build_departures_option_hash(station_id, options = {})
83
+ {
84
+ :query => options.merge({
85
+ :id => station_id,
86
+ :arrdep => "DEP"
87
+ })
88
+ }
89
+ end
90
+
91
+ def build_arrivals_option_hash(station_id, options = {})
92
+ {
93
+ :query => options.merge({
94
+ :id => station_id,
95
+ :arrdep => "ARR"
96
+ })
97
+ }
98
+ end
99
+
59
100
  def build_station_list_url
60
101
  [API_URL, STATIONS_URI].join('/')
61
102
  end
@@ -67,5 +108,9 @@ module IRail::API
67
108
  def build_vehicle_url
68
109
  [API_URL, VEHICLE_URI].join('/')
69
110
  end
111
+
112
+ def build_liveboard_url
113
+ [API_URL, LIVEBOARD_URI].join('/')
114
+ end
70
115
  end
71
116
  end
@@ -0,0 +1,13 @@
1
+ require "roxml"
2
+
3
+ module IRail::NMBS
4
+ class Liveboard
5
+ include ROXML
6
+
7
+ xml_name 'liveboard'
8
+
9
+ xml_accessor :station, :as => Station
10
+ xml_accessor :departures, :from => "departures/departure", :as => [Step]
11
+ xml_accessor :arrivals, :from => "arrivals/arrival", :as => [Step]
12
+ end
13
+ end
@@ -21,6 +21,10 @@ module IRail::NMBS
21
21
  IRail::NMBS::VehicleInformation.from_xml(vehicle.to_s)
22
22
  end
23
23
 
24
+ def self.parse_liveboard(xml_string)
25
+ IRail::NMBS::Liveboard.from_xml(xml_string)
26
+ end
27
+
24
28
  def self.xml_vehicle(xml_string)
25
29
  xml_payload = Nokogiri::XML(xml_string)
26
30
  xml_payload.xpath(VEHICLE_XPATH)
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module IRail
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -87,6 +87,62 @@ describe IRail::API::NMBS do
87
87
  end
88
88
  end
89
89
 
90
+ describe :departures do
91
+ let(:liveboard_url) { mock("Url") }
92
+ let(:station_id) { mock("Station id") }
93
+ let(:options) { mock("Options") }
94
+ let(:liveboard) { mock("Liveboard") }
95
+ let(:xml_departures) { mock("Xml departures") }
96
+
97
+ before :each do
98
+ irail.stub(:build_liveboard_url => liveboard_url)
99
+ irail.stub(:get_departures => xml_departures)
100
+ IRail::NMBS::DocumentParser.stub(:parse_liveboard => liveboard)
101
+ end
102
+
103
+ it "builds the liveboard url" do
104
+ irail.should_receive(:build_liveboard_url)
105
+ irail.departures(station_id, options)
106
+ end
107
+
108
+ it "gets the departures xml" do
109
+ irail.should_receive(:get_departures).with(liveboard_url, station_id, options)
110
+ irail.departures(station_id, options)
111
+ end
112
+
113
+ it "returns the liveboard" do
114
+ irail.departures(station_id, options).should eql liveboard
115
+ end
116
+ end
117
+
118
+ describe :arrivals do
119
+ let(:liveboard_url) { mock("Url") }
120
+ let(:station_id) { mock("Station id") }
121
+ let(:options) { mock("Options") }
122
+ let(:liveboard) { mock("Liveboard") }
123
+ let(:xml_arrivals) { mock("Xml arrivals") }
124
+
125
+ before :each do
126
+ irail.stub(:build_liveboard_url => liveboard_url)
127
+ irail.stub(:get_arrivals => xml_arrivals)
128
+ IRail::NMBS::DocumentParser.stub(:parse_liveboard => liveboard)
129
+ end
130
+
131
+ it "builds the liveboard url" do
132
+ irail.should_receive(:build_liveboard_url)
133
+ irail.arrivals(station_id, options)
134
+ end
135
+
136
+ it "gets the arrivals xml" do
137
+ irail.should_receive(:get_arrivals).with(liveboard_url, station_id, options)
138
+ irail.arrivals(station_id, options)
139
+ end
140
+
141
+ it "returns the parsed departures" do
142
+ irail.arrivals(station_id, options).should eql liveboard
143
+ end
144
+ end
145
+
90
146
  describe :get_connections do
91
147
  let(:origin_station) { mock("Origin station") }
92
148
  let(:destination_station) { mock("Destination station") }
@@ -115,6 +171,60 @@ describe IRail::API::NMBS do
115
171
  end
116
172
  end
117
173
 
174
+ describe :get_departures do
175
+ let(:station_id) { mock("Station id") }
176
+ let(:options) { mock("Options") }
177
+ let(:liveboard_url) { mock("Liveboard url") }
178
+ let(:options_hash) { mock("Options hash") }
179
+ let(:response) { mock("Response") }
180
+
181
+ before :each do
182
+ irail.stub(:build_departures_option_hash => options_hash)
183
+ IRail::Request.stub(:get => response)
184
+ end
185
+
186
+ it "builds the options hash" do
187
+ irail.should_receive(:build_departures_option_hash).with(station_id, options)
188
+ irail.get_departures(liveboard_url, station_id, options)
189
+ end
190
+
191
+ it "calls the connections url through a get request" do
192
+ IRail::Request.should_receive(:get).with(liveboard_url, options_hash)
193
+ irail.get_departures(liveboard_url, station_id, options)
194
+ end
195
+
196
+ it "returns the response" do
197
+ irail.get_departures(liveboard_url, station_id, options).should eql response
198
+ end
199
+ end
200
+
201
+ describe :get_arrivals do
202
+ let(:station_id) { mock("Station id") }
203
+ let(:options) { mock("Options") }
204
+ let(:liveboard_url) { mock("Liveboard url") }
205
+ let(:options_hash) { mock("Options hash") }
206
+ let(:response) { mock("Response") }
207
+
208
+ before :each do
209
+ irail.stub(:build_arrivals_option_hash => options_hash)
210
+ IRail::Request.stub(:get => response)
211
+ end
212
+
213
+ it "builds the options hash" do
214
+ irail.should_receive(:build_arrivals_option_hash).with(station_id, options)
215
+ irail.get_arrivals(liveboard_url, station_id, options)
216
+ end
217
+
218
+ it "calls the connections url through a get request" do
219
+ IRail::Request.should_receive(:get).with(liveboard_url, options_hash)
220
+ irail.get_arrivals(liveboard_url, station_id, options)
221
+ end
222
+
223
+ it "returns the response" do
224
+ irail.get_arrivals(liveboard_url, station_id, options).should eql response
225
+ end
226
+ end
227
+
118
228
  describe :get_station_list do
119
229
  let(:url) { mock("Url") }
120
230
  let(:response) { mock("Response") }
@@ -0,0 +1,17 @@
1
+ require_relative '../../../../lib/ruby-irail/packages/nmbs/models/liveboard.rb'
2
+
3
+ describe IRail::NMBS::Liveboard do
4
+ let(:liveboard) { IRail::NMBS::Liveboard.new }
5
+
6
+ it "has a station" do
7
+ liveboard.should respond_to(:station)
8
+ end
9
+
10
+ it "has many departures" do
11
+ liveboard.should respond_to(:departures)
12
+ end
13
+
14
+ it "has many arrivals" do
15
+ liveboard.should respond_to(:arrivals)
16
+ end
17
+ end
@@ -12,6 +12,9 @@ describe IRail::NMBS::DocumentParser do
12
12
  class IRail::NMBS::Connection
13
13
  end
14
14
 
15
+ class IRail::NMBS::Liveboard
16
+ end
17
+
15
18
  describe :'self.parse_stations' do
16
19
  let(:xml_string) { mock("Xml string") }
17
20
  let(:xml_payload) { mock("Xml payload") }
@@ -109,4 +112,23 @@ describe IRail::NMBS::DocumentParser do
109
112
  IRail::NMBS::DocumentParser.parse_vehicle(xml_string).should eql vehicle_instance
110
113
  end
111
114
  end
115
+
116
+ describe :'self.parse_liveboard' do
117
+ let(:xml_string) { mock("Xml string") }
118
+ let(:liveboard) { mock("Loveboard") }
119
+ let(:liveboard_instance) { mock("Liveboard instance") }
120
+
121
+ before :each do
122
+ IRail::NMBS::Liveboard.stub(:from_xml => liveboard_instance)
123
+ end
124
+
125
+ it "creates a liveboard from the xml payload" do
126
+ IRail::NMBS::Liveboard.should_receive(:from_xml).with(xml_string)
127
+ IRail::NMBS::DocumentParser.parse_liveboard(xml_string)
128
+ end
129
+
130
+ it "returns a liveboard instance" do
131
+ IRail::NMBS::DocumentParser.parse_liveboard(xml_string).should eql liveboard_instance
132
+ end
133
+ end
112
134
  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.3.0
4
+ version: 0.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-18 00:00:00.000000000Z
12
+ date: 2012-07-19 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70168325071420 !ruby/object:Gem::Requirement
16
+ requirement: &70221051588820 !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: *70168325071420
24
+ version_requirements: *70221051588820
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: httparty
27
- requirement: &70168325071000 !ruby/object:Gem::Requirement
27
+ requirement: &70221051588400 !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: *70168325071000
35
+ version_requirements: *70221051588400
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: roxml
38
- requirement: &70168325070580 !ruby/object:Gem::Requirement
38
+ requirement: &70221051587980 !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: *70168325070580
46
+ version_requirements: *70221051587980
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: nokogiri
49
- requirement: &70168325070140 !ruby/object:Gem::Requirement
49
+ requirement: &70221051587560 !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: *70168325070140
57
+ version_requirements: *70221051587560
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:
@@ -79,6 +79,7 @@ files:
79
79
  - lib/ruby-irail/packages/mivbstib/parser/station_parser.rb
80
80
  - lib/ruby-irail/packages/nmbs/api.rb
81
81
  - lib/ruby-irail/packages/nmbs/models/connection.rb
82
+ - lib/ruby-irail/packages/nmbs/models/liveboard.rb
82
83
  - lib/ruby-irail/packages/nmbs/models/platform.rb
83
84
  - lib/ruby-irail/packages/nmbs/models/station.rb
84
85
  - lib/ruby-irail/packages/nmbs/models/step.rb
@@ -98,6 +99,7 @@ files:
98
99
  - spec/packages/mivbstib/parser/station_parser_spec.rb
99
100
  - spec/packages/nmbs/api_spec.rb
100
101
  - spec/packages/nmbs/models/connection_spec.rb
102
+ - spec/packages/nmbs/models/liveboard_spec.rb
101
103
  - spec/packages/nmbs/models/platform_spec.rb
102
104
  - spec/packages/nmbs/models/station_spec.rb
103
105
  - spec/packages/nmbs/models/step_spec.rb
@@ -140,6 +142,7 @@ test_files:
140
142
  - spec/packages/mivbstib/parser/station_parser_spec.rb
141
143
  - spec/packages/nmbs/api_spec.rb
142
144
  - spec/packages/nmbs/models/connection_spec.rb
145
+ - spec/packages/nmbs/models/liveboard_spec.rb
143
146
  - spec/packages/nmbs/models/platform_spec.rb
144
147
  - spec/packages/nmbs/models/station_spec.rb
145
148
  - spec/packages/nmbs/models/step_spec.rb