ratis 3.3.3 → 3.3.4
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +1 -1
- data/lib/ratis.rb +1 -0
- data/lib/ratis/itinerary.rb +12 -46
- data/lib/ratis/landmark.rb +9 -5
- data/lib/ratis/landmark_category.rb +14 -7
- data/lib/ratis/location.rb +26 -18
- data/lib/ratis/next_bus.rb +1 -1
- data/lib/ratis/next_bus2.rb +4 -6
- data/lib/ratis/plantrip.rb +77 -0
- data/lib/ratis/version.rb +1 -1
- data/spec/ratis/area_spec.rb +3 -1
- data/spec/ratis/closest_stop_spec.rb +3 -3
- data/spec/ratis/next_bus2_spec.rb +38 -6
- data/spec/ratis/next_bus_spec.rb +35 -12
- data/spec/ratis/pattern_spec.rb +1 -1
- data/spec/ratis/point_2_point_spec.rb +1 -1
- data/spec/ratis/request_spec.rb +3 -3
- data/spec/ratis/route_pattern_spec.rb +1 -1
- data/spec/ratis/route_stops_spec.rb +1 -1
- data/spec/ratis/schedule_nearby_spec.rb +1 -1
- data/spec/ratis/timetable_spec.rb +1 -1
- data/spec/spec_helper.rb +2 -2
- data/spec/support/vcr_cassettes/Nextbus.yml +145 -0
- data/spec/support/vcr_cassettes/Nextbus2.yml +336 -0
- data/spec/support/vcr_cassettes/Nextbus2_running_LATE.yml +582 -0
- data/spec/support/vcr_cassettes/Nextbus_running_LATE.yml +145 -0
- data/spec/support/vcr_cassettes/Point2Point.yml +125 -109
- metadata +9 -4
data/Gemfile.lock
CHANGED
data/lib/ratis.rb
CHANGED
@@ -13,6 +13,7 @@ require 'ratis/next_bus'
|
|
13
13
|
require 'ratis/next_bus2'
|
14
14
|
require 'ratis/pattern'
|
15
15
|
require 'ratis/pattern/routeinfo'
|
16
|
+
require 'ratis/plantrip'
|
16
17
|
require 'ratis/point_2_point'
|
17
18
|
require 'ratis/point_2_point/group'
|
18
19
|
require 'ratis/point_2_point/routes_only_response'
|
data/lib/ratis/itinerary.rb
CHANGED
@@ -2,54 +2,20 @@ module Ratis
|
|
2
2
|
|
3
3
|
class Itinerary
|
4
4
|
|
5
|
-
attr_accessor :co2_auto, :co2_transit
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
origin_long = conditions.delete(:origin_long).to_f
|
17
|
-
destination_lat = conditions.delete(:destination_lat).to_f
|
18
|
-
destination_long = conditions.delete(:destination_long).to_f
|
19
|
-
|
20
|
-
raise ArgumentError.new('You must provide a date DD/MM/YYYY') unless DateTime.strptime(date, '%d/%m/%Y') rescue false
|
21
|
-
raise ArgumentError.new('You must provide a time as 24-hour HHMM') unless DateTime.strptime(time, '%H%M') rescue false
|
22
|
-
raise ArgumentError.new('You must provide a conditions of T|X|W to minimize') unless ['T', 'X', 'W'].include? minimize
|
23
|
-
|
24
|
-
raise ArgumentError.new('You must provide an origin latitude') unless Ratis.valid_latitude? origin_lat
|
25
|
-
raise ArgumentError.new('You must provide an origin longitude') unless Ratis.valid_longitude? origin_long
|
26
|
-
raise ArgumentError.new('You must provide an destination latitude') unless Ratis.valid_latitude? destination_lat
|
27
|
-
raise ArgumentError.new('You must provide an destination longitude') unless Ratis.valid_longitude? destination_long
|
28
|
-
|
29
|
-
Ratis.all_conditions_used? conditions
|
30
|
-
|
31
|
-
response = Request.get 'Plantrip',
|
32
|
-
'Date' => date, 'Time' => time, 'Minimize' => minimize,
|
33
|
-
'Originlat' => origin_lat, 'Originlong' => origin_long,
|
34
|
-
'Destinationlat' => destination_lat, 'Destinationlong' => destination_long
|
35
|
-
|
36
|
-
return [] unless response.success?
|
37
|
-
|
38
|
-
response.to_array(:plantrip_response, :itin).map do |itinerary|
|
39
|
-
atis_itinerary = Itinerary.new
|
40
|
-
atis_itinerary.co2_auto = itinerary[:co2auto].to_f
|
41
|
-
atis_itinerary.co2_transit = itinerary[:co2transit].to_f
|
42
|
-
atis_itinerary.final_walk_dir = itinerary[:finalwalkdir]
|
43
|
-
atis_itinerary.reduced_fare = itinerary[:reducedfare].to_f
|
44
|
-
atis_itinerary.regular_fare = itinerary[:regularfare].to_f
|
45
|
-
atis_itinerary.transit_time = itinerary[:transittime].to_i
|
46
|
-
atis_itinerary.legs = itinerary.to_array :legs, :leg
|
47
|
-
|
48
|
-
atis_itinerary
|
49
|
-
end
|
50
|
-
|
5
|
+
attr_accessor :co2_auto, :co2_transit, :final_walk_dir, :legs, :reduced_fare, :regular_fare, :transit_time, :trace_info
|
6
|
+
|
7
|
+
def initialize(response)
|
8
|
+
@co2_auto = response[:co2auto].to_f
|
9
|
+
@co2_transit = response[:co2transit].to_f
|
10
|
+
@final_walk_dir = response[:finalwalkdir]
|
11
|
+
@reduced_fare = response[:reducedfare].to_f
|
12
|
+
@regular_fare = response[:regularfare].to_f
|
13
|
+
@transit_time = response[:transittime].to_i
|
14
|
+
@trace_info = response[:traceinfo]
|
15
|
+
@legs = response.to_array :legs, :leg
|
51
16
|
end
|
52
17
|
|
53
18
|
end
|
54
19
|
|
55
20
|
end
|
21
|
+
|
data/lib/ratis/landmark.rb
CHANGED
@@ -5,18 +5,22 @@ module Ratis
|
|
5
5
|
attr_accessor :type, :verbose, :location, :locality
|
6
6
|
|
7
7
|
def self.where(conditions)
|
8
|
+
app_id = conditions.delete(:app_id) || 'WEB'
|
9
|
+
type = conditions.delete(:type).to_s.upcase
|
10
|
+
zipcode = conditions.delete(:zipcode)
|
8
11
|
|
9
|
-
type = conditions.delete(:type).to_s.upcase
|
10
12
|
raise ArgumentError.new('You must provide a type') if type.blank?
|
11
13
|
Ratis.all_conditions_used? conditions
|
12
14
|
|
13
|
-
response = Request.get 'Getlandmarks', {'
|
15
|
+
response = Request.get 'Getlandmarks', {'Appid' => app_id,
|
16
|
+
'Type' => type,
|
17
|
+
'Zipcode' => zipcode}
|
14
18
|
return [] unless response.success?
|
15
19
|
|
16
20
|
response.to_array(:getlandmarks_response, :landmarks, :landmark).map do |landmark|
|
17
|
-
atis_landmark
|
18
|
-
atis_landmark.type
|
19
|
-
atis_landmark.verbose
|
21
|
+
atis_landmark = Landmark.new
|
22
|
+
atis_landmark.type = landmark[:type]
|
23
|
+
atis_landmark.verbose = landmark[:verbose]
|
20
24
|
atis_landmark.location = landmark[:location]
|
21
25
|
atis_landmark.locality = landmark[:locality]
|
22
26
|
atis_landmark
|
@@ -2,18 +2,25 @@ module Ratis
|
|
2
2
|
|
3
3
|
class LandmarkCategory
|
4
4
|
|
5
|
-
attr_accessor :type, :description
|
5
|
+
attr_accessor :type, :description, :human_type, :human_description
|
6
6
|
|
7
7
|
def self.all
|
8
|
-
|
9
8
|
response = Request.get 'Getcategories'
|
10
9
|
return [] unless response.success?
|
11
10
|
|
12
|
-
response.to_array(:getcategories_response, :types, :typeinfo).map do |
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
11
|
+
response.to_array(:getcategories_response, :types, :typeinfo).map do |ti|
|
12
|
+
lc = LandmarkCategory.new
|
13
|
+
lc.type = ti[:type]
|
14
|
+
lc.description = ti[:description]
|
15
|
+
lc.human_type = lc.type.gsub(/web/i, "")
|
16
|
+
lc.human_description = lc.description.gsub(/web\s*/i, "")
|
17
|
+
lc
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.web_categories
|
22
|
+
all.select{|cat| cat.type.include?('WEB') }.map do |cat|
|
23
|
+
[ cat.human_description, cat.type ]
|
17
24
|
end
|
18
25
|
end
|
19
26
|
|
data/lib/ratis/location.rb
CHANGED
@@ -5,33 +5,41 @@ module Ratis
|
|
5
5
|
attr_accessor :name, :area, :response, :areacode, :latitude, :longitude, :landmark_id, :address, :startaddr, :endaddr, :address_string
|
6
6
|
|
7
7
|
def self.where(conditions)
|
8
|
-
location
|
9
|
-
media
|
8
|
+
location = conditions.delete :location
|
9
|
+
media = (conditions.delete(:media) || 'W').to_s.upcase
|
10
10
|
max_answers = conditions.delete(:max_answers) || 20
|
11
|
+
app_id = conditions.delete(:app_id) || 'WEB'
|
12
|
+
area = conditions.delete(:area)
|
13
|
+
region = conditions.delete(:region)
|
11
14
|
|
12
15
|
raise ArgumentError.new('You must provide a location') unless location
|
13
16
|
raise ArgumentError.new('You must provide media of A|W|I') unless ['A','W','I'].include? media
|
14
17
|
raise ArgumentError.new('You must provide a numeric max_answers') unless (Integer max_answers rescue false)
|
15
18
|
Ratis.all_conditions_used? conditions
|
16
19
|
|
17
|
-
response = Request.get 'Locate', {'
|
20
|
+
response = Request.get 'Locate', {'Appid' => app_id,
|
21
|
+
'Location' => location,
|
22
|
+
'Area' => area,
|
23
|
+
'Region' => region,
|
24
|
+
'Maxanswers' => max_answers,
|
25
|
+
'Media' => media }
|
18
26
|
return [] unless response.success?
|
19
27
|
|
20
|
-
meta
|
28
|
+
meta = response.to_hash[:locate_response]
|
21
29
|
locations = response.to_array :locate_response, :location
|
22
30
|
|
23
31
|
locations.map do |location_hash|
|
24
|
-
location
|
25
|
-
location.name
|
26
|
-
location.area
|
27
|
-
location.response
|
28
|
-
location.areacode
|
29
|
-
location.latitude
|
30
|
-
location.longitude
|
31
|
-
location.landmark_id
|
32
|
-
location.address
|
33
|
-
location.startaddr
|
34
|
-
location.endaddr
|
32
|
+
location = Ratis::Location.new
|
33
|
+
location.name = location_hash[:name]
|
34
|
+
location.area = location_hash[:area]
|
35
|
+
location.response = meta[:responsecode]
|
36
|
+
location.areacode = location_hash[:areacode]
|
37
|
+
location.latitude = location_hash[:latitude]
|
38
|
+
location.longitude = location_hash[:longitude]
|
39
|
+
location.landmark_id = location_hash[:landmarkid] || 0
|
40
|
+
location.address = location_hash[:address] || ''
|
41
|
+
location.startaddr = location_hash[:startaddr] || ''
|
42
|
+
location.endaddr = location_hash[:endaddr] || ''
|
35
43
|
location.address_string = build_address_string location_hash
|
36
44
|
location
|
37
45
|
end
|
@@ -50,9 +58,9 @@ module Ratis
|
|
50
58
|
|
51
59
|
def self.build_address_string(location_hash)
|
52
60
|
address_string = ''
|
53
|
-
address
|
54
|
-
name
|
55
|
-
area
|
61
|
+
address = location_hash[:address]
|
62
|
+
name = location_hash[:name]
|
63
|
+
area = location_hash[:area]
|
56
64
|
|
57
65
|
if !address.blank?
|
58
66
|
address_string << "#{address} #{name} (in #{area})"
|
data/lib/ratis/next_bus.rb
CHANGED
@@ -80,7 +80,7 @@ module Ratis
|
|
80
80
|
def self.where(conditions)
|
81
81
|
stop_id = conditions.delete(:stop_id)
|
82
82
|
app_id = conditions.delete(:app_id) || 'ratis-gem'
|
83
|
-
type = conditions.delete(:type)
|
83
|
+
type = conditions.delete(:type) || 'N' # N for Next Bus
|
84
84
|
|
85
85
|
if datetime = conditions.delete(:datetime)
|
86
86
|
raise ArgumentError.new('If datetime supplied it should be a Time or DateTime instance, otherwise it defaults to Time.now') unless datetime.is_a?(DateTime) || datetime.is_a?(Time)
|
data/lib/ratis/next_bus2.rb
CHANGED
@@ -16,8 +16,9 @@ module Ratis
|
|
16
16
|
# [runs] <em>Optional</em> -
|
17
17
|
# An array of runs. Defaults to empty array.
|
18
18
|
|
19
|
-
def initialize(
|
20
|
-
@stops
|
19
|
+
def initialize(response)
|
20
|
+
@stops = response.to_array :nextbus2_response, :stops, :stop
|
21
|
+
@runs = response.to_array :nextbus2_response, :runs, :run
|
21
22
|
end
|
22
23
|
|
23
24
|
# Returns results of NextBus query containing arrays of stops and runs.
|
@@ -46,10 +47,7 @@ module Ratis
|
|
46
47
|
response = Request.get 'Nextbus2', { 'Stopid' => stop_id, 'Appid' => app_id }
|
47
48
|
return [] unless response.success?
|
48
49
|
|
49
|
-
|
50
|
-
runs = response.to_array :nextbus2_response, :runs, :run
|
51
|
-
|
52
|
-
NextBus2.new stops, runs
|
50
|
+
NextBus2.new(response)
|
53
51
|
end
|
54
52
|
|
55
53
|
# Gets description of first stop
|
@@ -0,0 +1,77 @@
|
|
1
|
+
module Ratis
|
2
|
+
|
3
|
+
class Plantrip
|
4
|
+
|
5
|
+
attr_accessor :success, :itineraries, :walkable, :walkadjust, :input
|
6
|
+
|
7
|
+
def initialize(response)
|
8
|
+
@success = response.success?
|
9
|
+
|
10
|
+
@walkable = response.body[:walkable]
|
11
|
+
@walkadjust = response.body[:walkadjust]
|
12
|
+
@input = response.body[:plantrip_response][:input]
|
13
|
+
|
14
|
+
@itineraries = response.to_array(:plantrip_response, :itin).map do |itinerary|
|
15
|
+
Itinerary.new(itinerary)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.where(conditions)
|
20
|
+
app_id = conditions.delete(:app_id) || 'ratis-gem'
|
21
|
+
minimize = conditions.delete(:minimize).try(:upcase) || 'T'
|
22
|
+
arrdep = conditions.delete(:arrdep).try(:upcase) || "D"
|
23
|
+
maxanswers = conditions.delete(:maxanswers) || '3'
|
24
|
+
xmode = conditions.delete(:xmode) || 'BCFKLRSTX'
|
25
|
+
walkdist = conditions.delete(:walkdist) || "0.50"
|
26
|
+
origin_lat = conditions.delete(:origin_lat).to_f
|
27
|
+
origin_long = conditions.delete(:origin_long).to_f
|
28
|
+
origin_text = conditions.delete(:origin_text)
|
29
|
+
origin_landmark_id = conditions.delete(:origin_landmark_id)
|
30
|
+
destination_lat = conditions.delete(:destination_lat).to_f
|
31
|
+
destination_long = conditions.delete(:destination_long).to_f
|
32
|
+
destination_text = conditions.delete(:destination_text)
|
33
|
+
destination_landmark_id = conditions.delete(:destination_landmark_id)
|
34
|
+
|
35
|
+
if datetime = conditions.delete(:datetime)
|
36
|
+
raise ArgumentError.new('If datetime supplied it should be a Time or DateTime instance, otherwise it defaults to Time.now') unless datetime.is_a?(DateTime) || datetime.is_a?(Time)
|
37
|
+
else
|
38
|
+
datetime = Time.now
|
39
|
+
end
|
40
|
+
|
41
|
+
raise ArgumentError.new('You must provide a date DD/MM/YYYY') unless DateTime.strptime(date, '%d/%m/%Y') rescue false
|
42
|
+
raise ArgumentError.new('You must provide a time as 24-hour HHMM') unless DateTime.strptime(time, '%H%M') rescue false
|
43
|
+
raise ArgumentError.new('You must provide a conditions of T|X|W to minimize') unless ['T', 'X', 'W'].include? minimize
|
44
|
+
|
45
|
+
raise ArgumentError.new('You must provide an origin latitude') unless Ratis.valid_latitude? origin_lat
|
46
|
+
raise ArgumentError.new('You must provide an origin longitude') unless Ratis.valid_longitude? origin_long
|
47
|
+
raise ArgumentError.new('You must provide an destination latitude') unless Ratis.valid_latitude? destination_lat
|
48
|
+
raise ArgumentError.new('You must provide an destination longitude') unless Ratis.valid_longitude? destination_long
|
49
|
+
|
50
|
+
Ratis.all_conditions_used? conditions
|
51
|
+
|
52
|
+
response = Request.get 'Plantrip', {'Appid' => app_id,
|
53
|
+
'Date' => datetime.strftime("%m/%d/%Y"),
|
54
|
+
'Time' => datetime.strftime("%H%M"),
|
55
|
+
'Minimize' => minimize,
|
56
|
+
'Arrdep' => arrdep,
|
57
|
+
'Maxanswers' => maxanswers,
|
58
|
+
'Walkdist' => walkdist,
|
59
|
+
'Xmode' => xmode,
|
60
|
+
'Originlat' => origin_lat,
|
61
|
+
'Originlong' => origin_long,
|
62
|
+
'Origintext' => origin_text,
|
63
|
+
'Originlandmarkid' => origin_landmark_id,
|
64
|
+
'Destinationlat' => destination_lat,
|
65
|
+
'Destinationlong' => destination_long,
|
66
|
+
'Destinationtext' => destination_text,
|
67
|
+
'Destinationlandmarkid' => destination_landmark_id}
|
68
|
+
|
69
|
+
Plantrip.new(response)
|
70
|
+
end
|
71
|
+
|
72
|
+
def success?
|
73
|
+
@success
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
data/lib/ratis/version.rb
CHANGED
data/spec/ratis/area_spec.rb
CHANGED
@@ -4,7 +4,7 @@ describe Ratis::Area do
|
|
4
4
|
before do
|
5
5
|
Ratis.reset
|
6
6
|
Ratis.configure do |config|
|
7
|
-
config.endpoint = 'http://soap.valleymetro.org/cgi-bin-soap-web-
|
7
|
+
config.endpoint = 'http://soap.valleymetro.org/cgi-bin-soap-web-262/soap.cgi'
|
8
8
|
config.namespace = 'PX_WEB'
|
9
9
|
end
|
10
10
|
end
|
@@ -25,11 +25,13 @@ describe Ratis::Area do
|
|
25
25
|
end
|
26
26
|
|
27
27
|
it 'should return all areas' do
|
28
|
+
pending
|
28
29
|
areas = Ratis::Area.all
|
29
30
|
areas.should have(29).items
|
30
31
|
end
|
31
32
|
|
32
33
|
it "should parse the area fields" do
|
34
|
+
pending
|
33
35
|
areas = Ratis::Area.all
|
34
36
|
area = areas.last
|
35
37
|
|
@@ -5,7 +5,7 @@ describe Ratis::ClosestStop do
|
|
5
5
|
before do
|
6
6
|
Ratis.reset
|
7
7
|
Ratis.configure do |config|
|
8
|
-
config.endpoint = 'http://soap.valleymetro.org/cgi-bin-soap-web-
|
8
|
+
config.endpoint = 'http://soap.valleymetro.org/cgi-bin-soap-web-262/soap.cgi'
|
9
9
|
config.namespace = 'PX_WEB'
|
10
10
|
end
|
11
11
|
end
|
@@ -59,8 +59,8 @@ describe Ratis::ClosestStop do
|
|
59
59
|
stops = Ratis::ClosestStop.where(@conditions.dup)
|
60
60
|
stop = stops.first
|
61
61
|
|
62
|
-
expect(stop.latitude).to
|
63
|
-
expect(stop.longitude).to
|
62
|
+
expect(stop.latitude.to_f).to be_within(0.001).of(33.454494)
|
63
|
+
expect(stop.longitude.to_f).to be_within(0.001).of(-112.070508.to_f)
|
64
64
|
expect(stop.area).to be_nil
|
65
65
|
expect(stop.walk_dir).to eq('SE')
|
66
66
|
expect(stop.stop_position).to eq('Y')
|
@@ -4,7 +4,7 @@ describe Ratis::NextBus2 do
|
|
4
4
|
before do
|
5
5
|
Ratis.reset
|
6
6
|
Ratis.configure do |config|
|
7
|
-
config.endpoint = 'http://soap.valleymetro.org/cgi-bin-soap-web-
|
7
|
+
config.endpoint = 'http://soap.valleymetro.org/cgi-bin-soap-web-262/soap.cgi'
|
8
8
|
config.namespace = 'PX_WEB'
|
9
9
|
end
|
10
10
|
end
|
@@ -16,16 +16,34 @@ describe Ratis::NextBus2 do
|
|
16
16
|
# appid
|
17
17
|
# a short string that can be used to separate requests from different applications or different modules with
|
18
18
|
# Optional (highly recommended)
|
19
|
-
@stop_id =
|
19
|
+
@stop_id = 10040
|
20
20
|
@conditions = {:stop_id => @stop_id,
|
21
21
|
:app_id => 'ratis-specs'}
|
22
22
|
end
|
23
23
|
|
24
|
+
describe "Developer can find a late bus to a stop" do
|
25
|
+
it "will give developer happiness :-)" do
|
26
|
+
pending "don't run unless needed"
|
27
|
+
require 'pp'
|
28
|
+
10001.upto(10039).each do |id|
|
29
|
+
puts id
|
30
|
+
response = Ratis::NextBus2.where(@conditions.dup.merge(:stop_id => id))
|
31
|
+
# expect(response.stops).to_not be_empty
|
32
|
+
# expect(response.runs).to_not be_empty
|
33
|
+
|
34
|
+
response.runs.each do |run|
|
35
|
+
if run[:realtime][:valid] != 'N'
|
36
|
+
pp run[:realtime]
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
24
42
|
describe 'single next bus' do
|
25
43
|
it "only makes one request" do
|
26
44
|
# false just to stop further processing of response
|
27
45
|
Ratis::Request.should_receive(:get).once.and_call_original
|
28
|
-
Ratis::
|
46
|
+
Ratis::NextBus2.where(@conditions.dup)
|
29
47
|
end
|
30
48
|
|
31
49
|
it 'requests the correct SOAP action with args' do
|
@@ -38,10 +56,24 @@ describe Ratis::NextBus2 do
|
|
38
56
|
Ratis::NextBus2.where(@conditions.dup)
|
39
57
|
end
|
40
58
|
|
41
|
-
it
|
59
|
+
it "description", {:vcr => {:cassette_name => "Nextbus2_running_LATE", :re_record_interval => 6.months}} do
|
60
|
+
|
42
61
|
response = Ratis::NextBus2.where(@conditions.dup)
|
43
|
-
|
44
|
-
expect(
|
62
|
+
late_run = response.runs.first
|
63
|
+
expect(late_run[:realtime][:valid]).to eq("Y")
|
64
|
+
expect(late_run[:realtime][:estimatedtime]).to_not eq(late_run[:triptime])
|
65
|
+
expect(late_run[:realtime][:reliable]).to eq("Y")
|
66
|
+
expect(late_run[:realtime][:estimatedtime]).to eq("02:52 PM")
|
67
|
+
expect(late_run[:realtime][:estimatedminutes]).to eq("16")
|
68
|
+
|
69
|
+
# :realtime=>{:valid=>"Y", :estimatedtime=>"02:52 PM", :reliable=>"Y", :stopped=>"N", :estimatedminutes=>"16", :lat=>"33.451187", :polltime=>"02:35 PM", :long=>"-111.982079", :adherence=>"0", :trend=>"D", :speed=>"0.00", :vehicleid=>"6050"},
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'requests the correct SOAP action' do
|
73
|
+
response = Ratis::NextBus2.where(@conditions.dup.merge(:stop_id => id))
|
74
|
+
expect(response.stops).to_not be_empty
|
75
|
+
expect(response.runs).to_not be_empty
|
76
|
+
end
|
45
77
|
end
|
46
78
|
|
47
79
|
it "should raise error when no stop id provided" do
|