ns-yapi 0.4.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +4 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile.lock +1 -1
- data/lib/ns_client.rb +18 -2
- data/ns.gemspec +1 -1
- data/spec/fixtures/invalid_stations_xml.xml +10510 -0
- data/spec/fixtures/stations_cannot_find_pmw.xml +10475 -0
- data/spec/fixtures/stations_list_mangled.xml +52 -0
- data/spec/fixtures/stations_list_with_invalid_new_lines.xml +34 -33
- data/spec/ns_client_spec.rb +79 -23
- data/spec/spec_helper.rb +11 -0
- metadata +12 -5
- data/.rvmrc +0 -5
@@ -0,0 +1,52 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<Stations>
|
3
|
+
|
4
|
+
<Station>
|
5
|
+
<Co
|
6
|
+
de>LC</Code>
|
7
|
+
<Typ
|
8
|
+
e>stoptreinstation</Type>
|
9
|
+
<Nam
|
10
|
+
en>
|
11
|
+
<Kort>L
|
12
|
+
ochem</Kort>
|
13
|
+
<
|
14
|
+
Middel>Lochem<
|
15
|
+
/Middel>
|
16
|
+
<Lang>Lochem</Lang>
|
17
|
+
</Nam
|
18
|
+
en>
|
19
|
+
<Land>NL</Land>
|
20
|
+
<UICCode>8400399< / UICCode >
|
21
|
+
<Lat>52.166668</Lat>
|
22
|
+
<Lon>6.4263887</Lon>
|
23
|
+
<Syno
|
24
|
+
niemen>
|
25
|
+
|
26
|
+
</Syno
|
27
|
+
niemen>
|
28
|
+
</Station>
|
29
|
+
|
30
|
+
<Station>
|
31
|
+
<C
|
32
|
+
ode>HT</Code>
|
33
|
+
<Type>intercitystation</Type>
|
34
|
+
<Nam
|
35
|
+
en>
|
36
|
+
<Kort>Den Bosch</Kort>
|
37
|
+
<Middel>'s-Hertogenbosch</Middel>
|
38
|
+
<Lang>'s-Hertogenbosch</Lang>
|
39
|
+
</N
|
40
|
+
amen>
|
41
|
+
<Land>NL</Land>
|
42
|
+
<UICC
|
43
|
+
ode>12</UICCode>
|
44
|
+
<Lat>52.166668</Lat>
|
45
|
+
<Lon>6.4263887</Lon>
|
46
|
+
<Synoniemen>
|
47
|
+
|
48
|
+
</Synoniemen>
|
49
|
+
</Station>
|
50
|
+
|
51
|
+
|
52
|
+
</Stations>
|
@@ -1,40 +1,41 @@
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
2
2
|
<Stations>
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
Middel>Lochem
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
</Synoniemen>
|
20
|
-
</Station>
|
4
|
+
<Station>
|
5
|
+
<Code>LC</Code>
|
6
|
+
<Type>stoptreinstation</Type>
|
7
|
+
<Namen>
|
8
|
+
<Kort>Lochem</Kort>
|
9
|
+
<
|
10
|
+
Middel>Lochem<
|
11
|
+
/Middel>
|
12
|
+
<Lang>Lochem</Lang>
|
13
|
+
</Namen>
|
14
|
+
<Land>NL</Land>
|
15
|
+
<UICCode>8400399< / UICCode >
|
16
|
+
<Lat>52.166668</Lat>
|
17
|
+
<Lon>6.4263887</Lon>
|
18
|
+
<Synoniemen>
|
21
19
|
|
22
|
-
|
23
|
-
|
24
|
-
<Type>intercitystation</Type>
|
25
|
-
<Namen>
|
26
|
-
<Kort>Den Bosch</Kort>
|
27
|
-
<Middel>'s-Hertogenbosch</Middel>
|
28
|
-
<Lang>'s-Hertogenbosch</Lang>
|
29
|
-
</Namen>
|
30
|
-
<Land>NL</Land>
|
31
|
-
<UICCode>12</UICCode>
|
32
|
-
<Lat>52.166668</Lat>
|
33
|
-
<Lon>6.4263887</Lon>
|
34
|
-
<Synoniemen>
|
20
|
+
</Synoniemen>
|
21
|
+
</Station>
|
35
22
|
|
36
|
-
|
37
|
-
|
23
|
+
<Station>
|
24
|
+
<Code>HT</Code>
|
25
|
+
<Type>intercitystation</Type>
|
26
|
+
<Namen>
|
27
|
+
<Kort>Den Bosch</Kort>
|
28
|
+
<Middel>'s-Hertogenbosch</Middel>
|
29
|
+
<Lang>'s-Hertogenbosch</Lang>
|
30
|
+
</Namen>
|
31
|
+
<Land>NL</Land>
|
32
|
+
<UICCode>12</UICCode>
|
33
|
+
<Lat>52.166668</Lat>
|
34
|
+
<Lon>6.4263887</Lon>
|
35
|
+
<Synoniemen>
|
38
36
|
|
37
|
+
</Synoniemen>
|
38
|
+
</Station>
|
39
39
|
|
40
|
-
|
40
|
+
|
41
|
+
</Stations>
|
data/spec/ns_client_spec.rb
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
#encoding: utf-8
|
2
2
|
require 'spec_helper'
|
3
|
+
require 'yaml'
|
3
4
|
|
4
5
|
describe NSClient do
|
5
6
|
|
6
|
-
|
7
|
-
@client = NSClient.new("username", "password")
|
8
|
-
end
|
7
|
+
let! (:client) { NSClient.new("username", "password") }
|
9
8
|
|
10
9
|
context "Stations" do
|
11
10
|
|
@@ -16,12 +15,12 @@ describe NSClient do
|
|
16
15
|
end
|
17
16
|
|
18
17
|
it "should return all stations" do
|
19
|
-
stations =
|
18
|
+
stations = client.stations
|
20
19
|
stations.size.should == 620
|
21
20
|
end
|
22
21
|
|
23
22
|
it "should return expected first station from list" do
|
24
|
-
stations =
|
23
|
+
stations = client.stations
|
25
24
|
first_station = stations.first
|
26
25
|
first_station.class.should == NSClient::Station
|
27
26
|
first_station.type.should == "knooppuntIntercitystation"
|
@@ -36,24 +35,81 @@ describe NSClient do
|
|
36
35
|
end
|
37
36
|
|
38
37
|
it "should retrieve a convenient hash with usable station names and codes for prices usage" do
|
39
|
-
stations =
|
38
|
+
stations = client.stations_short
|
40
39
|
stations.size.should == 620
|
41
40
|
stations["HT"].should == ["'s-Hertogenbosch", "NL"]
|
42
41
|
end
|
43
42
|
|
44
|
-
end
|
45
43
|
|
46
|
-
|
44
|
+
end
|
47
45
|
|
48
|
-
|
49
|
-
|
46
|
+
describe "integration specs", :integration do
|
47
|
+
|
48
|
+
# requires a credentials.yml in spec/fixtures with a username and password
|
49
|
+
it "should parse live data correctly", focus: true do
|
50
|
+
found_error = false
|
51
|
+
WebMock.allow_net_connect!
|
52
|
+
#while (!found_error) do
|
53
|
+
credentials = YAML.load_file(File.join($ROOT, "spec/fixtures/credentials.yml"))
|
54
|
+
client = NSClient.new(credentials["username"], credentials["password"])
|
55
|
+
stations = client.stations
|
56
|
+
station = stations.find { |s| s.code == "OETZ" }
|
57
|
+
expected_count = 613
|
58
|
+
found_error = !(station.code == "OETZ" && station.country == "A" && station.name == "Ötztal" && stations.count == expected_count)
|
59
|
+
|
60
|
+
if found_error
|
61
|
+
f = File.open("/tmp/ns_stations_without_oztal.xml", "w")
|
62
|
+
f.write(client.last_received_raw_xml)
|
63
|
+
f.close
|
64
|
+
raise "Could not find staiton with code 'OETZ', see /tmp/ns_stations_without_oztal.xml" if station.blank?
|
65
|
+
raise "Found station, but with different properties or size differs? Country should be 'A' but is #{station.country}, station name should be 'Ötztal' but is #{station.name}, and the count should be #{expected_count}. (count is #{stations.count}) see /tmp/ns_stations_without_oztal.xml"
|
66
|
+
else
|
67
|
+
p "Test went OK, #{stations.count} stations found"
|
68
|
+
end
|
69
|
+
#end
|
70
|
+
# remove the loop to constantly check NS if we are doubting their source
|
50
71
|
end
|
51
72
|
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
describe "invalid stations xml" do
|
78
|
+
|
79
|
+
context "with only newlines/spaces we can fix" do
|
80
|
+
|
52
81
|
it "should return all stations" do
|
53
|
-
|
82
|
+
stub_ns_client_request "http://username:password@webservices.ns.nl/ns-api-stations-v2", load_fixture('stations_list_with_invalid_new_lines.xml')
|
83
|
+
stations = client.stations
|
54
84
|
stations.size.should == 2
|
55
85
|
end
|
56
86
|
|
87
|
+
{
|
88
|
+
"< Code>" => "<Code>",
|
89
|
+
"< Code >" => "<Code>",
|
90
|
+
"< Code >" => "<Code>",
|
91
|
+
"< Code>" => "<Code>",
|
92
|
+
"</ Code>" => "</Code>",
|
93
|
+
"< / Code>" => "</Code>",
|
94
|
+
"</ Code >" => "</Code>",
|
95
|
+
"</ Code >" => "</Code>",
|
96
|
+
"</\n\nCode >" => "</Code>",
|
97
|
+
"</\r\tCode\n>" => "</Code>",
|
98
|
+
}.each do |k, v|
|
99
|
+
it "removes unwanted whitespace from #{k} , expecting #{v} (remove_unwanted_whitespace)" do
|
100
|
+
client.remove_unwanted_whitespace(k).should eq v
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
end
|
105
|
+
|
106
|
+
context "with mangled XML we cannot / won't fix" do
|
107
|
+
|
108
|
+
it "raises an error when xml is unparseable" do
|
109
|
+
stub_ns_client_request "http://username:password@webservices.ns.nl/ns-api-stations-v2", load_fixture('stations_list_mangled.xml')
|
110
|
+
expect { client.stations }.to raise_error(NSClient::UnparseableXMLError)
|
111
|
+
end
|
112
|
+
|
57
113
|
end
|
58
114
|
|
59
115
|
end
|
@@ -62,7 +118,7 @@ describe NSClient do
|
|
62
118
|
|
63
119
|
it "should retrieve planned and unplanned disruptions" do
|
64
120
|
stub_ns_client_request "http://username:password@webservices.ns.nl/ns-api-storingen?actual=true", load_fixture('disruptions.xml')
|
65
|
-
disruptions =
|
121
|
+
disruptions = client.disruptions
|
66
122
|
disruptions.size.should == 2
|
67
123
|
disruptions[:planned].size.should == 1
|
68
124
|
disruptions[:unplanned].size.should == 1
|
@@ -70,7 +126,7 @@ describe NSClient do
|
|
70
126
|
|
71
127
|
it "should retrieve expected planned disruption" do
|
72
128
|
stub_ns_client_request "http://username:password@webservices.ns.nl/ns-api-storingen?actual=true", load_fixture('disruptions.xml')
|
73
|
-
disruptions =
|
129
|
+
disruptions = client.disruptions
|
74
130
|
disruptions.size.should == 2
|
75
131
|
planned_disruption = disruptions[:planned].first
|
76
132
|
planned_disruption.class.should == NSClient::PlannedDisruption
|
@@ -87,7 +143,7 @@ describe NSClient do
|
|
87
143
|
|
88
144
|
it "should retrieve expected unplanned disruption" do
|
89
145
|
stub_ns_client_request "http://username:password@webservices.ns.nl/ns-api-storingen?actual=true", load_fixture('disruptions.xml')
|
90
|
-
disruptions =
|
146
|
+
disruptions = client.disruptions
|
91
147
|
disruptions.size.should == 2
|
92
148
|
unplanned_disruption = disruptions[:unplanned].first
|
93
149
|
unplanned_disruption.class.should == NSClient::UnplannedDisruption
|
@@ -102,7 +158,7 @@ describe NSClient do
|
|
102
158
|
|
103
159
|
it "should not return disruption when empty in response" do
|
104
160
|
stub_ns_client_request "http://username:password@webservices.ns.nl/ns-api-storingen?actual=true", load_fixture('no_disruptions.xml')
|
105
|
-
disruptions =
|
161
|
+
disruptions = client.disruptions
|
106
162
|
disruptions.size.should == 2
|
107
163
|
disruptions[:planned].size.should == 0
|
108
164
|
disruptions[:unplanned].size.should == 0
|
@@ -113,7 +169,7 @@ describe NSClient do
|
|
113
169
|
it "should retrieve disruptions for station name" do
|
114
170
|
# ie, for Amsterdam only (http://webservices.ns.nl/ns-api-storingen?station=Amsterdam)
|
115
171
|
stub_ns_client_request "http://username:password@webservices.ns.nl/ns-api-storingen?station=Amsterdam", load_fixture('disruptions_amsterdam.xml')
|
116
|
-
disruptions =
|
172
|
+
disruptions = client.disruptions "Amsterdam"
|
117
173
|
disruptions.size.should == 2
|
118
174
|
disruptions[:planned].size.should == 4
|
119
175
|
disruptions[:unplanned].size.should == 0
|
@@ -121,7 +177,7 @@ describe NSClient do
|
|
121
177
|
|
122
178
|
it "should raise an error when using invalid station name" do
|
123
179
|
stub_ns_client_request "http://username:password@webservices.ns.nl/ns-api-storingen?station=bla", load_fixture('disruption_invalid_station_name.xml')
|
124
|
-
expect {
|
180
|
+
expect { client.disruptions "bla" }.to raise_error(NSClient::InvalidStationNameError, "Could not find a station with name 'bla'")
|
125
181
|
end
|
126
182
|
end
|
127
183
|
|
@@ -133,7 +189,7 @@ describe NSClient do
|
|
133
189
|
it "should retrieve prices for a trip" do
|
134
190
|
stub_ns_client_request "http://username:password@webservices.ns.nl/ns-api-prijzen-v2?from=Purmerend&to=Amsterdam&via=Zaandam&date=17062013", load_fixture('prices.xml')
|
135
191
|
date = Date.strptime('17-06-2013', '%d-%m-%Y')
|
136
|
-
response =
|
192
|
+
response = client.prices from: "Purmerend", to: "Amsterdam", via: "Zaandam", date: date
|
137
193
|
response.class.should == NSClient::PricesResponse
|
138
194
|
response.tariff_units.should == 10
|
139
195
|
response.products.size.should == 2
|
@@ -145,7 +201,7 @@ describe NSClient do
|
|
145
201
|
it "should retrieve expected price data" do
|
146
202
|
stub_ns_client_request "http://username:password@webservices.ns.nl/ns-api-prijzen-v2?from=Purmerend&to=Amsterdam&via=Zaandam&date=17062013", load_fixture('prices.xml')
|
147
203
|
date = Date.strptime('17-06-2013', '%d-%m-%Y')
|
148
|
-
response =
|
204
|
+
response = client.prices from: "Purmerend", to: "Amsterdam", via: "Zaandam", date: date
|
149
205
|
response.class.should == NSClient::PricesResponse
|
150
206
|
response.tariff_units.should == 10
|
151
207
|
response.products.size.should == 2
|
@@ -160,7 +216,7 @@ describe NSClient do
|
|
160
216
|
|
161
217
|
it "should raise error when from is not given" do
|
162
218
|
expect {
|
163
|
-
|
219
|
+
client.prices from: nil, to: "Amsterdam"
|
164
220
|
}.to raise_error(NSClient::MissingParameter, "from station is required")
|
165
221
|
end
|
166
222
|
|
@@ -168,19 +224,19 @@ describe NSClient do
|
|
168
224
|
date = Date.strptime('17-06-2013', '%d-%m-%Y')
|
169
225
|
stub_ns_client_request "http://username:password@webservices.ns.nl/ns-api-prijzen-v2?from=Amsterdam&to=Purmerend&date=17062013", load_fixture('prices_invalid_station_name.xml')
|
170
226
|
expect {
|
171
|
-
|
227
|
+
client.prices from: "Amsterdam", to: "Purmerend", date: date
|
172
228
|
}.to raise_error(NSClient::InvalidStationNameError, "'Amsterdam' is not a valid station name")
|
173
229
|
end
|
174
230
|
|
175
231
|
it "should raise error when to is not given" do
|
176
232
|
expect {
|
177
|
-
|
233
|
+
client.prices from: "Purmerend", to: nil
|
178
234
|
}.to raise_error(NSClient::MissingParameter, "to station is required")
|
179
235
|
end
|
180
236
|
|
181
237
|
it "should raise error complaining about from and to missing when both not given" do
|
182
238
|
expect {
|
183
|
-
|
239
|
+
client.prices from: nil, to: nil
|
184
240
|
}.to raise_error(NSClient::MissingParameter, "from and to station is required")
|
185
241
|
end
|
186
242
|
|
data/spec/spec_helper.rb
CHANGED
@@ -25,6 +25,17 @@ RSpec.configure do |config|
|
|
25
25
|
Timecop.return # make sure timecop is disabled after each test
|
26
26
|
end
|
27
27
|
|
28
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
29
|
+
config.filter_run :focus => true
|
30
|
+
config.run_all_when_everything_filtered = true
|
31
|
+
|
32
|
+
unless config.inclusion_filter[:integration]
|
33
|
+
p "Integration specs are DISABLED. To run integration specs only, use `rspec --tag integration`"
|
34
|
+
config.filter_run_excluding :integration => true
|
35
|
+
else
|
36
|
+
p "Running integrtion specs ONLY."
|
37
|
+
end
|
38
|
+
|
28
39
|
end
|
29
40
|
|
30
41
|
# END
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ns-yapi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-09-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: httpclient
|
@@ -67,7 +67,8 @@ extensions: []
|
|
67
67
|
extra_rdoc_files: []
|
68
68
|
files:
|
69
69
|
- .gitignore
|
70
|
-
- .
|
70
|
+
- .ruby-gemset
|
71
|
+
- .ruby-version
|
71
72
|
- .travis.yml
|
72
73
|
- Gemfile
|
73
74
|
- Gemfile.lock
|
@@ -80,10 +81,13 @@ files:
|
|
80
81
|
- spec/fixtures/disruption_invalid_station_name.xml
|
81
82
|
- spec/fixtures/disruptions.xml
|
82
83
|
- spec/fixtures/disruptions_amsterdam.xml
|
84
|
+
- spec/fixtures/invalid_stations_xml.xml
|
83
85
|
- spec/fixtures/no_disruptions.xml
|
84
86
|
- spec/fixtures/prices.xml
|
85
87
|
- spec/fixtures/prices_invalid_station_name.xml
|
86
88
|
- spec/fixtures/stations.xml
|
89
|
+
- spec/fixtures/stations_cannot_find_pmw.xml
|
90
|
+
- spec/fixtures/stations_list_mangled.xml
|
87
91
|
- spec/fixtures/stations_list_with_invalid_new_lines.xml
|
88
92
|
- spec/model/prices_url_spec.rb
|
89
93
|
- spec/ns_client_spec.rb
|
@@ -103,7 +107,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
103
107
|
version: '0'
|
104
108
|
segments:
|
105
109
|
- 0
|
106
|
-
hash: -
|
110
|
+
hash: -3456481437934328000
|
107
111
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
108
112
|
none: false
|
109
113
|
requirements:
|
@@ -112,7 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
112
116
|
version: '0'
|
113
117
|
segments:
|
114
118
|
- 0
|
115
|
-
hash: -
|
119
|
+
hash: -3456481437934328000
|
116
120
|
requirements: []
|
117
121
|
rubyforge_project:
|
118
122
|
rubygems_version: 1.8.24
|
@@ -123,10 +127,13 @@ test_files:
|
|
123
127
|
- spec/fixtures/disruption_invalid_station_name.xml
|
124
128
|
- spec/fixtures/disruptions.xml
|
125
129
|
- spec/fixtures/disruptions_amsterdam.xml
|
130
|
+
- spec/fixtures/invalid_stations_xml.xml
|
126
131
|
- spec/fixtures/no_disruptions.xml
|
127
132
|
- spec/fixtures/prices.xml
|
128
133
|
- spec/fixtures/prices_invalid_station_name.xml
|
129
134
|
- spec/fixtures/stations.xml
|
135
|
+
- spec/fixtures/stations_cannot_find_pmw.xml
|
136
|
+
- spec/fixtures/stations_list_mangled.xml
|
130
137
|
- spec/fixtures/stations_list_with_invalid_new_lines.xml
|
131
138
|
- spec/model/prices_url_spec.rb
|
132
139
|
- spec/ns_client_spec.rb
|