ratis 3.1.8 → 3.2.0
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/CHANGELOG +4 -1
- data/Gemfile.lock +1 -1
- data/lib/ratis/next_bus.rb +42 -24
- data/lib/ratis/version.rb +1 -1
- data/spec/ratis/next_bus_spec.rb +11 -3
- data/spec/ratis/point_2_point_spec.rb +2 -2
- data/spec/support/vcr_cassettes/Point2Point.yml +27 -27
- metadata +5 -5
data/CHANGELOG
CHANGED
@@ -25,4 +25,7 @@
|
|
25
25
|
- Removed to_hash, instead use better named to_hash_for_xml for use with NextRide SMS service end-point
|
26
26
|
|
27
27
|
3.1.8
|
28
|
-
- Within to_hash_from_xml, pull route and sign attributes from the service instead of the realtime info (they always seem to be blank)
|
28
|
+
- Within to_hash_from_xml, pull route and sign attributes from the service instead of the realtime info (they always seem to be blank)
|
29
|
+
|
30
|
+
3.2.0
|
31
|
+
- When querying Nextbus for a Light Rail stop, in most cases you will actually get back 2 stops for a single NextRide ID. One for each side of the stop platform. Made changes to handle this case. Both stops services are flattened into the #services attribute.
|
data/Gemfile.lock
CHANGED
data/lib/ratis/next_bus.rb
CHANGED
@@ -5,37 +5,47 @@ module Ratis
|
|
5
5
|
attr_accessor :stop, :services, :success
|
6
6
|
|
7
7
|
def initialize(response)
|
8
|
-
@success
|
8
|
+
@success = response.success?
|
9
|
+
@stop = []
|
10
|
+
@services = []
|
9
11
|
|
10
12
|
if @success
|
11
|
-
@stop
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
OpenStruct.new(:status => service[:status],
|
21
|
-
:sign => service[:sign],
|
22
|
-
:routetype => service[:routetype],
|
23
|
-
:times => service[:times],
|
24
|
-
:direction => service[:direction],
|
25
|
-
:servicetype => service[:servicetype],
|
26
|
-
:route => service[:route],
|
27
|
-
:operator => service[:operator],
|
28
|
-
:trips => parse_trip_info(service[:tripinfo])
|
29
|
-
)
|
13
|
+
@stop = response.body[:nextbus_response][:atstop]
|
14
|
+
|
15
|
+
# Only Light Rail stops will return 2 stops from ATIS for a single NextRide id
|
16
|
+
if @stop.is_a?(Array)
|
17
|
+
@stop.each do |_stop|
|
18
|
+
parse_stop(_stop)
|
19
|
+
end
|
20
|
+
else
|
21
|
+
parse_stop(@stop)
|
30
22
|
end
|
31
23
|
|
32
|
-
else
|
33
|
-
@stop = {}
|
34
|
-
@services = []
|
35
24
|
end
|
36
25
|
|
37
26
|
end
|
38
27
|
|
28
|
+
def parse_stop(single_stop)
|
29
|
+
_services = single_stop.delete(:service)
|
30
|
+
|
31
|
+
_services = [_services] unless _services.is_a?(Array)
|
32
|
+
|
33
|
+
@services << _services.map do |service|
|
34
|
+
OpenStruct.new(:status => service[:status],
|
35
|
+
:sign => service[:sign],
|
36
|
+
:routetype => service[:routetype],
|
37
|
+
:times => service[:times],
|
38
|
+
:direction => service[:direction],
|
39
|
+
:servicetype => service[:servicetype],
|
40
|
+
:route => service[:route],
|
41
|
+
:operator => service[:operator],
|
42
|
+
:trips => parse_trip_info(service[:tripinfo])
|
43
|
+
)
|
44
|
+
end
|
45
|
+
|
46
|
+
@services.flatten!
|
47
|
+
end
|
48
|
+
|
39
49
|
def parse_trip_info(trips)
|
40
50
|
# can come back as an Array or single Hash...
|
41
51
|
if trips.is_a?(Array)
|
@@ -95,11 +105,19 @@ module Ratis
|
|
95
105
|
@success
|
96
106
|
end
|
97
107
|
|
108
|
+
def stop_description
|
109
|
+
if @stop.is_a?(Array)
|
110
|
+
@stop.first[:description]
|
111
|
+
else
|
112
|
+
@stop[:description]
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
98
116
|
# Used to create an XML response for the NextBus SMS services which hits
|
99
117
|
# /nextride.xml?stop_id=<STOPID>
|
100
118
|
|
101
119
|
def to_hash_for_xml
|
102
|
-
{ :stopname =>
|
120
|
+
{ :stopname => stop_description,
|
103
121
|
:runs => @services.map do |service|
|
104
122
|
service.trips.map do |trip|
|
105
123
|
|
data/lib/ratis/version.rb
CHANGED
data/spec/ratis/next_bus_spec.rb
CHANGED
@@ -8,7 +8,7 @@ describe Ratis::NextBus do
|
|
8
8
|
config.namespace = 'PX_WEB'
|
9
9
|
end
|
10
10
|
|
11
|
-
@time = Chronic.parse('
|
11
|
+
@time = Chronic.parse('next monday at 6am')
|
12
12
|
end
|
13
13
|
|
14
14
|
let(:empty_body){ {:nextbus_response => {:atstop => {:service => []}}} }
|
@@ -20,6 +20,13 @@ describe Ratis::NextBus do
|
|
20
20
|
end
|
21
21
|
|
22
22
|
describe '#where' do
|
23
|
+
# TODO: Light Rails Stops can return 2 Atstop tags... how do we best handle this case
|
24
|
+
describe 'Light Rails stops' do
|
25
|
+
it "description" do
|
26
|
+
pending
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
23
30
|
describe 'time formatting' do
|
24
31
|
it 'should make requests with 24 hour time format' do
|
25
32
|
@stop_id = 10050
|
@@ -131,6 +138,7 @@ describe Ratis::NextBus do
|
|
131
138
|
describe 'multiple services returned' do
|
132
139
|
before do
|
133
140
|
@stop_id = 15894
|
141
|
+
@time = Chronic.parse('next monday at 3pm')
|
134
142
|
@conditions = {:stop_id => @stop_id,
|
135
143
|
:app_id => 'ratis-specs', # a short string that can be used to separate requests from different applications or different modules with
|
136
144
|
:type => 'N',
|
@@ -176,7 +184,7 @@ describe Ratis::NextBus do
|
|
176
184
|
expect(service.status).to eq('N')
|
177
185
|
expect(service.sign).to eq('108 Elliot West To Priest')
|
178
186
|
expect(service.routetype).to eq('B')
|
179
|
-
expect(service.times).to eq("
|
187
|
+
expect(service.times).to eq("01:46 PM, 03:46 PM, 04:46 PM, 05:46 PM")
|
180
188
|
expect(service.direction).to eq('W')
|
181
189
|
expect(service.servicetype).to eq('W')
|
182
190
|
expect(service.route).to eq('108')
|
@@ -188,7 +196,7 @@ describe Ratis::NextBus do
|
|
188
196
|
expect(service.status).to eq('N')
|
189
197
|
expect(service.sign).to eq('108 Elliot West To Priest Via Sosmn/Bsnln')
|
190
198
|
expect(service.routetype).to eq('B')
|
191
|
-
expect(service.times).to eq("
|
199
|
+
expect(service.times).to eq("02:46 PM, 06:46 PM")
|
192
200
|
expect(service.direction).to eq('W')
|
193
201
|
expect(service.servicetype).to eq('W')
|
194
202
|
expect(service.route).to eq('108')
|
@@ -13,7 +13,7 @@ describe Ratis::Point2Point do
|
|
13
13
|
describe '#where' do
|
14
14
|
describe 'services from origin to destination', {:vcr => {:cassette_name => "Point2Point"}} do
|
15
15
|
before do
|
16
|
-
@today =
|
16
|
+
@today = Chronic.parse('next monday at 6am').strftime("%m/%d/%Y")
|
17
17
|
@conditions = {:routes_only => true,
|
18
18
|
:origin_lat => 33.446931,
|
19
19
|
:origin_long => -112.097903,
|
@@ -126,7 +126,7 @@ describe Ratis::Point2Point do
|
|
126
126
|
|
127
127
|
it 'gets the trips within each group' do
|
128
128
|
schedule = Ratis::Point2Point.where(@conditions.dup)
|
129
|
-
schedule.groups[0].should have(
|
129
|
+
schedule.groups[0].should have(15).trips
|
130
130
|
schedule.groups[1].should have(16).trips
|
131
131
|
schedule.groups[2].should have(4).trips
|
132
132
|
end
|
@@ -20,27 +20,27 @@ http_interactions:
|
|
20
20
|
aW50MnBvaW50PjwvZW52OkJvZHk+PC9lbnY6RW52ZWxvcGU+
|
21
21
|
|
22
22
|
headers:
|
23
|
-
Soapaction:
|
24
|
-
- "\"PX_WEB#Point2point\""
|
25
23
|
Content-Type:
|
26
24
|
- text/xml;charset=UTF-8
|
27
|
-
Accept:
|
28
|
-
- "*/*"
|
29
25
|
Content-Length:
|
30
26
|
- "576"
|
27
|
+
Soapaction:
|
28
|
+
- "\"PX_WEB#Point2point\""
|
29
|
+
Accept:
|
30
|
+
- "*/*"
|
31
31
|
response:
|
32
32
|
status:
|
33
33
|
code: 302
|
34
34
|
message: Found
|
35
35
|
headers:
|
36
|
+
Content-Length:
|
37
|
+
- "0"
|
38
|
+
Location:
|
39
|
+
- http://www.iana.org/domains/example/
|
36
40
|
Connection:
|
37
41
|
- Keep-Alive
|
38
42
|
Server:
|
39
43
|
- BigIP
|
40
|
-
Location:
|
41
|
-
- http://www.iana.org/domains/example/
|
42
|
-
Content-Length:
|
43
|
-
- "0"
|
44
44
|
body:
|
45
45
|
base64_string: ""
|
46
46
|
http_version:
|
@@ -55,41 +55,41 @@ http_interactions:
|
|
55
55
|
Y2hlbWEiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxT
|
56
56
|
Y2hlbWEtaW5zdGFuY2UiIHhtbG5zOndzZGw9IlBYX1dFQiIgeG1sbnM6ZW52
|
57
57
|
PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI+
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
58
|
+
PGVudjpCb2R5PjxQb2ludDJwb2ludCB4bWxucz0iUFhfV0VCIj48RW5kdGlt
|
59
|
+
ZT4xODAwPC9FbmR0aW1lPjxEYXRlPjA2LzE3LzIwMTM8L0RhdGU+PE9yaWdp
|
60
|
+
bmxhdD4zMy40NDY5MzE8L09yaWdpbmxhdD48T3JpZ2lubG9uZz4tMTEyLjA5
|
61
|
+
NzkwMzwvT3JpZ2lubG9uZz48U3RhcnR0aW1lPjE3MDA8L1N0YXJ0dGltZT48
|
62
|
+
RGVzdGluYXRpb25sYXQ+MzMuNDQ3MDk4PC9EZXN0aW5hdGlvbmxhdD48Um91
|
63
|
+
dGVzb25seT5ZPC9Sb3V0ZXNvbmx5PjxSb3V0ZXM+MTwvUm91dGVzPjxEZXN0
|
64
|
+
aW5hdGlvbmxvbmc+LTExMi4wNzcyMTM8L0Rlc3RpbmF0aW9ubG9uZz48L1Bv
|
65
65
|
aW50MnBvaW50PjwvZW52OkJvZHk+PC9lbnY6RW52ZWxvcGU+
|
66
66
|
|
67
67
|
headers:
|
68
|
-
Soapaction:
|
69
|
-
- "\"PX_WEB#Point2point\""
|
70
68
|
Content-Type:
|
71
69
|
- text/xml;charset=UTF-8
|
72
|
-
|
73
|
-
- "
|
70
|
+
Soapaction:
|
71
|
+
- "\"PX_WEB#Point2point\""
|
74
72
|
Content-Length:
|
75
73
|
- "576"
|
74
|
+
Accept:
|
75
|
+
- "*/*"
|
76
76
|
response:
|
77
77
|
status:
|
78
78
|
code: 200
|
79
79
|
message: OK
|
80
80
|
headers:
|
81
|
+
Content-Type:
|
82
|
+
- text/xml; charset=utf-8
|
81
83
|
Date:
|
82
|
-
-
|
84
|
+
- Fri, 14 Jun 2013 17:03:34 GMT
|
85
|
+
Content-Length:
|
86
|
+
- "4558"
|
83
87
|
Connection:
|
84
88
|
- close
|
85
|
-
Soapserver:
|
86
|
-
- SOAP::Lite/Perl/0.55
|
87
89
|
Server:
|
88
90
|
- Apache/2.2.3 (CentOS)
|
89
|
-
|
90
|
-
-
|
91
|
-
Content-Length:
|
92
|
-
- "4558"
|
91
|
+
Soapserver:
|
92
|
+
- SOAP::Lite/Perl/0.55
|
93
93
|
body:
|
94
94
|
base64_string: |
|
95
95
|
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48U09BUC1F
|
@@ -196,5 +196,5 @@ http_interactions:
|
|
196
196
|
RU5WOkVudmVsb3BlPg==
|
197
197
|
|
198
198
|
http_version:
|
199
|
-
recorded_at:
|
199
|
+
recorded_at: Fri, 14 Jun 2013 17:03:34 GMT
|
200
200
|
recorded_with: VCR 2.4.0
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ratis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 3
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 3.
|
8
|
+
- 2
|
9
|
+
- 0
|
10
|
+
version: 3.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Burst Software
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2013-06-
|
18
|
+
date: 2013-06-14 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: savon
|