ns-yapi 0.2.0 → 0.2.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/Gemfile.lock +1 -1
- data/lib/ns_client.rb +48 -9
- data/ns.gemspec +1 -1
- data/spec/fixtures/disruptions.xml +2 -0
- data/spec/ns_client_spec.rb +25 -5
- metadata +4 -4
data/Gemfile.lock
CHANGED
data/lib/ns_client.rb
CHANGED
@@ -74,44 +74,83 @@ class NSClient
|
|
74
74
|
raise InvalidStationNameError, message
|
75
75
|
end
|
76
76
|
|
77
|
-
(xdoc/'/Storingen').each
|
77
|
+
(xdoc/'/Storingen').each do |disruption|
|
78
78
|
|
79
|
-
(disruption/'Ongepland/Storing').each
|
79
|
+
(disruption/'Ongepland/Storing').each do |unplanned|
|
80
80
|
unplanned_disruption = UnplannedDisruption.new
|
81
81
|
unplanned_disruption.id = (unplanned/'./id').text
|
82
82
|
unplanned_disruption.trip = (unplanned/'./Traject').text
|
83
83
|
unplanned_disruption.reason = (unplanned/'./Reden').text
|
84
84
|
unplanned_disruption.message = (unplanned/'./Bericht').text
|
85
85
|
unplanned_disruption.datetime_string = (unplanned/'./Datum').text
|
86
|
+
unplanned_disruption.cause = (unplanned/'./Oorzaak').text
|
86
87
|
result[:unplanned] << unplanned_disruption
|
87
|
-
|
88
|
+
end
|
88
89
|
|
89
|
-
(disruption/'Gepland/Storing').each
|
90
|
+
(disruption/'Gepland/Storing').each do |planned|
|
90
91
|
planned_disruption = PlannedDisruption.new
|
91
92
|
planned_disruption.id = (planned/'./id').text
|
92
93
|
planned_disruption.trip = (planned/'./Traject').text
|
93
94
|
planned_disruption.reason = (planned/'./Reden').text
|
94
95
|
planned_disruption.advice = (planned/'./Advies').text
|
95
96
|
planned_disruption.message = (planned/'./Bericht').text
|
97
|
+
planned_disruption.cause = (planned/'./Oorzaak').text
|
96
98
|
result[:planned] << planned_disruption
|
97
|
-
|
98
|
-
|
99
|
+
end
|
100
|
+
end
|
99
101
|
result
|
100
102
|
end
|
101
103
|
|
104
|
+
def prices (opts = {from: nil, to: nil, via: nil, date: nil})
|
105
|
+
date = opts[:date]
|
106
|
+
response = @client.get "http://@webservices.ns.nl/ns-api-prijzen-v2?from=#{opts[:from]}&to=#{opts[:to]}&via=#{opts[:via]}&date=#{date.strftime("%d%m%Y")}"
|
107
|
+
xdoc = Nokogiri.XML(response.content)
|
108
|
+
prices_response = PricesResponse.new
|
109
|
+
(xdoc/'/Producten').each do |products|
|
110
|
+
prices_response.tariff_units = (products/'./Tariefeenheden').text.to_i
|
111
|
+
|
112
|
+
(products/'Product').each do |product|
|
113
|
+
prices = []
|
114
|
+
(product/'Prijs').each do |price_element|
|
115
|
+
product_price = ProductPrice.new
|
116
|
+
product_price.amount = price_element.text
|
117
|
+
prices << product_price
|
118
|
+
end
|
119
|
+
name = product.attr('naam')
|
120
|
+
prices_response.products[name] = prices
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
124
|
+
prices_response
|
125
|
+
end
|
126
|
+
|
127
|
+
|
102
128
|
def disruption_url(query)
|
103
129
|
if query
|
104
130
|
return "http://webservices.ns.nl/ns-api-storingen?station=#{query}"
|
105
131
|
end
|
106
|
-
"http://webservices.ns.nl/ns-api-storingen?"
|
132
|
+
"http://webservices.ns.nl/ns-api-storingen?actual=true"
|
133
|
+
end
|
134
|
+
|
135
|
+
class PricesResponse
|
136
|
+
attr_accessor :tariff_units, :products
|
137
|
+
|
138
|
+
def initialize
|
139
|
+
@products = {}
|
140
|
+
@tariff_units = 0
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
class ProductPrice
|
145
|
+
attr_accessor :discount, :class, :amount
|
107
146
|
end
|
108
147
|
|
109
148
|
class UnplannedDisruption
|
110
|
-
attr_accessor :id, :trip, :reason, :message, :datetime_string
|
149
|
+
attr_accessor :id, :trip, :reason, :message, :datetime_string, :cause
|
111
150
|
end
|
112
151
|
|
113
152
|
class PlannedDisruption
|
114
|
-
attr_accessor :id, :trip, :reason, :advice, :message
|
153
|
+
attr_accessor :id, :trip, :reason, :advice, :message, :cause
|
115
154
|
end
|
116
155
|
|
117
156
|
class Station
|
data/ns.gemspec
CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |gem|
|
6
6
|
gem.name = "ns-yapi"
|
7
|
-
gem.version = '0.2.
|
7
|
+
gem.version = '0.2.1'
|
8
8
|
gem.authors = ["Stefan Hendriks"]
|
9
9
|
gem.email = ["stefanhen83@gmail.com"]
|
10
10
|
gem.description = %q{Yet Another (Ruby) NS API client}
|
@@ -6,6 +6,7 @@
|
|
6
6
|
<Reden>beperkingen op last van de politie</Reden>
|
7
7
|
<Bericht>Another test message</Bericht>
|
8
8
|
<Datum>2010-12-16T11:16:00+0100</Datum>
|
9
|
+
<Oorzaak>oorzaak</Oorzaak>
|
9
10
|
</Storing>
|
10
11
|
</Ongepland>
|
11
12
|
<Gepland>
|
@@ -18,6 +19,7 @@
|
|
18
19
|
plaats van de trein tussen Almere Centrum en Lelystad Centrum rijden vier Sprinters per uur reis tussen Almere
|
19
20
|
Muziekwijk en Naarden-Bussum via Weesp</Advies>
|
20
21
|
<Bericht>Test message</Bericht>
|
22
|
+
<Oorzaak>oorzaak</Oorzaak>
|
21
23
|
</Storing>
|
22
24
|
</Gepland>
|
23
25
|
</Storingen>
|
data/spec/ns_client_spec.rb
CHANGED
@@ -37,7 +37,7 @@ describe NSClient do
|
|
37
37
|
context "Disruptions" do
|
38
38
|
|
39
39
|
it "should retrieve planned and unplanned disruptions" do
|
40
|
-
stub_ns_client_request "http://username:password@webservices.ns.nl/ns-api-storingen?", load_fixture('disruptions.xml')
|
40
|
+
stub_ns_client_request "http://username:password@webservices.ns.nl/ns-api-storingen?actual=true", load_fixture('disruptions.xml')
|
41
41
|
disruptions = @client.disruptions
|
42
42
|
disruptions.size.should == 2
|
43
43
|
disruptions[:planned].size.should == 1
|
@@ -45,7 +45,7 @@ describe NSClient do
|
|
45
45
|
end
|
46
46
|
|
47
47
|
it "should retrieve expected planned disruption" do
|
48
|
-
stub_ns_client_request "http://username:password@webservices.ns.nl/ns-api-storingen?", load_fixture('disruptions.xml')
|
48
|
+
stub_ns_client_request "http://username:password@webservices.ns.nl/ns-api-storingen?actual=true", load_fixture('disruptions.xml')
|
49
49
|
disruptions = @client.disruptions
|
50
50
|
disruptions.size.should == 2
|
51
51
|
planned_disruption = disruptions[:planned].first
|
@@ -58,10 +58,11 @@ describe NSClient do
|
|
58
58
|
plaats van de trein tussen Almere Centrum en Lelystad Centrum rijden vier Sprinters per uur reis tussen Almere
|
59
59
|
Muziekwijk en Naarden-Bussum via Weesp"
|
60
60
|
planned_disruption.message.should == "Test message"
|
61
|
+
planned_disruption.cause.should == "oorzaak"
|
61
62
|
end
|
62
63
|
|
63
64
|
it "should retrieve expected unplanned disruption" do
|
64
|
-
stub_ns_client_request "http://username:password@webservices.ns.nl/ns-api-storingen?", load_fixture('disruptions.xml')
|
65
|
+
stub_ns_client_request "http://username:password@webservices.ns.nl/ns-api-storingen?actual=true", load_fixture('disruptions.xml')
|
65
66
|
disruptions = @client.disruptions
|
66
67
|
disruptions.size.should == 2
|
67
68
|
unplanned_disruption = disruptions[:unplanned].first
|
@@ -70,12 +71,13 @@ describe NSClient do
|
|
70
71
|
unplanned_disruption.id.should == "prio-13345"
|
71
72
|
unplanned_disruption.trip.should == "'s-Hertogenbosch-Nijmegen"
|
72
73
|
unplanned_disruption.reason.should == "beperkingen op last van de politie"
|
74
|
+
unplanned_disruption.cause.should == "oorzaak"
|
73
75
|
unplanned_disruption.message.should == "Another test message"
|
74
76
|
unplanned_disruption.datetime_string == "2010-12-16T11:16:00+0100" #intentional, give raw data. Let user parse if needed.
|
75
77
|
end
|
76
78
|
|
77
79
|
it "should not return disruption when empty in response" do
|
78
|
-
stub_ns_client_request "http://username:password@webservices.ns.nl/ns-api-storingen?", load_fixture('no_disruptions.xml')
|
80
|
+
stub_ns_client_request "http://username:password@webservices.ns.nl/ns-api-storingen?actual=true", load_fixture('no_disruptions.xml')
|
79
81
|
disruptions = @client.disruptions
|
80
82
|
disruptions.size.should == 2
|
81
83
|
disruptions[:planned].size.should == 0
|
@@ -103,7 +105,25 @@ describe NSClient do
|
|
103
105
|
end
|
104
106
|
|
105
107
|
context "Prices" do
|
106
|
-
|
108
|
+
it "should retrieve prices for a trip" do
|
109
|
+
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')
|
110
|
+
date = Date.strptime('17-06-2013', '%d-%m-%Y')
|
111
|
+
response = @client.prices from: "Purmerend", to: "Amsterdam", via: "Zaandam", date: date
|
112
|
+
response.class.should == NSClient::PricesResponse
|
113
|
+
response.tariff_units.should == 10
|
114
|
+
response.products.size.should == 2
|
115
|
+
|
116
|
+
enkele_reis = response.products["Enkele reis"]
|
117
|
+
enkele_reis.size.should == 6
|
118
|
+
end
|
119
|
+
|
120
|
+
xit "should retrieve expected price data"
|
121
|
+
|
122
|
+
xit "assumes date is now, when not given"
|
123
|
+
xit "should treat via as optional parameter"
|
124
|
+
xit "should raise error when from is not given"
|
125
|
+
xit "should raise error when to is not given"
|
126
|
+
|
107
127
|
end
|
108
128
|
|
109
129
|
def stub_ns_client_request(url, response)
|
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.2.
|
4
|
+
version: 0.2.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-06-
|
12
|
+
date: 2013-06-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: httpclient
|
@@ -98,7 +98,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
98
98
|
version: '0'
|
99
99
|
segments:
|
100
100
|
- 0
|
101
|
-
hash:
|
101
|
+
hash: -4220924222430246748
|
102
102
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
103
103
|
none: false
|
104
104
|
requirements:
|
@@ -107,7 +107,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
107
107
|
version: '0'
|
108
108
|
segments:
|
109
109
|
- 0
|
110
|
-
hash:
|
110
|
+
hash: -4220924222430246748
|
111
111
|
requirements: []
|
112
112
|
rubyforge_project:
|
113
113
|
rubygems_version: 1.8.24
|