cta_redux 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +7 -0
- data/README.md +31 -7
- data/cta_redux.gemspec +6 -0
- data/ext/inflate_database/extconf.rb +14 -0
- data/lib/cta_redux.rb +35 -15
- data/lib/cta_redux/bus_tracker.rb +66 -0
- data/lib/cta_redux/customer_alerts.rb +27 -2
- data/lib/cta_redux/train_tracker.rb +47 -0
- data/lib/cta_redux/version.rb +1 -1
- metadata +22 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9e3939dcf2d580a8ef7487ea5f9ef1a3b1464737
|
4
|
+
data.tar.gz: d148cd49ce17813bec6bed9b33fd3a0f4fe9393f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1633690c5355c45aa87daafaf17fa261f25d495bd6b022b09394e9e067e5071c00e4b1293405ab015c9d88488b3ff1d272821c10a337bedd6f3ac2cc06742454
|
7
|
+
data.tar.gz: 82df0c408f08a8c45def1be764730302620a9bfd70309d8ba4cd12617e72926c34b6f5b494a050639d25afa1d4aac739af078dd9c55ce3872de640df725f7437
|
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,16 +1,40 @@
|
|
1
1
|
# cta_redux
|
2
2
|
|
3
|
-
|
3
|
+
[![Build Status](https://travis-ci.org/ahayworth/cta_redux.svg?branch=master)](https://travis-ci.org/ahayworth/cta_redux)
|
4
4
|
|
5
|
-
|
5
|
+
The CTA (http://www.transitchicago.com) provides a wealth of information for developers, but it's hard to access, inconsistent, and there are no official clients. CTA Redux is an easy to use, comprehensive client for that data.
|
6
6
|
|
7
|
-
|
7
|
+
This gem combines GTFS data with live API responses to create a consistent view of CTA vehicles and status.
|
8
8
|
|
9
|
-
|
9
|
+
Examples:
|
10
10
|
|
11
|
-
|
11
|
+
```ruby
|
12
|
+
require 'cta_redux'
|
12
13
|
|
13
|
-
|
14
|
+
CTA::TrainTracker.key = 'foo'
|
15
|
+
CTA::BusTracker.key = 'bar'
|
14
16
|
|
15
|
-
|
17
|
+
# Pick a random stop on the brown line
|
18
|
+
stop = CTA::Route[:brown].stops.all.sample
|
16
19
|
|
20
|
+
routes = []
|
21
|
+
stop.predictions!.predictions.sort_by(&:seconds).each do |prd|
|
22
|
+
routes << prd.route.route_id
|
23
|
+
puts "A #{prd.direction} #{prd.route.route_long_name} " +
|
24
|
+
"train will be arriving at #{stop.stop_name} in #{prd.minutes} minutes."
|
25
|
+
end
|
26
|
+
|
27
|
+
# Pick a random stop on the 8-Halsted route
|
28
|
+
stop = CTA::Route["8"].stops.all.sample
|
29
|
+
stop.predictions!.predictions.sort_by(&:seconds).each do |prd|
|
30
|
+
routes << prd.route.route_id
|
31
|
+
puts "A(n) #{prd.route.route_id}-#{prd.route.route_long_name} will be " +
|
32
|
+
"arriving at #{stop.stop_name} in #{prd.minutes} minutes."
|
33
|
+
end
|
34
|
+
|
35
|
+
CTA::CustomerAlerts.alerts!(:routes => routes.uniq).alerts.each do |alert|
|
36
|
+
puts "Alert: #{alert.short_description}"
|
37
|
+
end
|
38
|
+
```
|
39
|
+
|
40
|
+
More information is available at (http://www.rubydoc.info/gems/cta_redux/0.1.0)
|
data/cta_redux.gemspec
CHANGED
@@ -18,12 +18,18 @@ Gem::Specification.new do |spec|
|
|
18
18
|
|
19
19
|
spec.files = `git ls-files -z`.split("\x0")
|
20
20
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
21
|
+
spec.extensions = ["ext/inflate_database/extconf.rb"]
|
21
22
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
22
23
|
spec.require_paths = ["lib"]
|
23
24
|
|
25
|
+
# TODO - Support 1.8.7, I doubt it'll be that difficult.
|
26
|
+
spec.required_ruby_version = ">= 1.9.3"
|
27
|
+
|
24
28
|
spec.add_development_dependency "bundler", "~> 1.7"
|
25
29
|
spec.add_development_dependency "rake", "~> 10.0"
|
26
30
|
spec.add_development_dependency "rspec", "~> 3.2.0"
|
31
|
+
spec.add_development_dependency "yard", ">= 0.8.7.6"
|
32
|
+
|
27
33
|
spec.add_dependency "sequel", ">= 4.19.0"
|
28
34
|
spec.add_dependency "sqlite3", ">= 1.3.10"
|
29
35
|
spec.add_dependency "faraday", ">= 0.9.1"
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'mkmf'
|
2
|
+
require 'zlib'
|
3
|
+
data_dir = File.join(File.expand_path("../../..", __FILE__), 'data')
|
4
|
+
db_filename = File.join(data_dir, 'cta-gtfs.db')
|
5
|
+
if !File.exists?(db_filename)
|
6
|
+
dbf = File.open(db_filename, 'wb')
|
7
|
+
Zlib::GzipReader.open("#{db_filename}.gz") do |gz|
|
8
|
+
dbf.puts gz.read
|
9
|
+
end
|
10
|
+
dbf.close
|
11
|
+
File.unlink("#{db_filename}.gz")
|
12
|
+
end
|
13
|
+
|
14
|
+
create_makefile "inflate_database/inflate_database"
|
data/lib/cta_redux.rb
CHANGED
@@ -4,40 +4,60 @@ require "sqlite3"
|
|
4
4
|
require "faraday"
|
5
5
|
require "faraday_middleware"
|
6
6
|
require "multi_xml"
|
7
|
-
require "zlib"
|
8
7
|
|
9
8
|
module CTA
|
10
9
|
base_path = File.expand_path("..", __FILE__)
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
|
11
|
+
require "#{base_path}/cta_redux/faraday_middleware/bus_tracker_parser.rb"
|
12
|
+
require "#{base_path}/cta_redux/faraday_middleware/train_tracker_parser.rb"
|
13
|
+
require "#{base_path}/cta_redux/faraday_middleware/customer_alerts_parser.rb"
|
14
|
+
require "#{base_path}/cta_redux/faraday_middleware/simple_cache.rb"
|
15
|
+
|
16
|
+
require "#{base_path}/cta_redux/api/api_response.rb"
|
17
|
+
require "#{base_path}/cta_redux/api/bus_tracker.rb"
|
18
|
+
require "#{base_path}/cta_redux/api/train_tracker.rb"
|
19
|
+
require "#{base_path}/cta_redux/api/customer_alerts.rb"
|
20
|
+
|
14
21
|
require "#{base_path}/cta_redux/train_tracker.rb"
|
15
22
|
require "#{base_path}/cta_redux/bus_tracker.rb"
|
16
23
|
require "#{base_path}/cta_redux/customer_alerts.rb"
|
24
|
+
require "#{base_path}/cta_redux/version.rb"
|
25
|
+
|
17
26
|
|
27
|
+
data_dir = File.join(File.expand_path("../..", __FILE__), 'data')
|
18
28
|
db_filename = File.join(data_dir, 'cta-gtfs.db')
|
19
29
|
|
20
|
-
#
|
21
|
-
if
|
22
|
-
|
23
|
-
|
24
|
-
|
30
|
+
# travis-ci needs to manually unzip things
|
31
|
+
if ENV['TRAVIS'] == 'true'
|
32
|
+
if !File.exists?(db_filename)
|
33
|
+
dbf = File.open(db_filename, 'wb')
|
34
|
+
Zlib::GzipReader.open("#{db_filename}.gz") do |gz|
|
35
|
+
dbf.puts gz.read
|
36
|
+
end
|
37
|
+
dbf.close
|
38
|
+
File.unlink("#{db_filename}.gz")
|
25
39
|
end
|
26
|
-
dbf.close
|
27
40
|
end
|
28
|
-
|
29
41
|
DB = Sequel.sqlite(:database => db_filename, :readonly => true)
|
30
42
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
43
|
+
require "#{base_path}/cta_redux/models/agency.rb"
|
44
|
+
require "#{base_path}/cta_redux/models/calendar.rb"
|
45
|
+
require "#{base_path}/cta_redux/models/route.rb"
|
46
|
+
require "#{base_path}/cta_redux/models/shape.rb"
|
47
|
+
require "#{base_path}/cta_redux/models/stop.rb"
|
48
|
+
require "#{base_path}/cta_redux/models/stop_time.rb"
|
49
|
+
require "#{base_path}/cta_redux/models/transfer.rb"
|
50
|
+
require "#{base_path}/cta_redux/models/trip.rb"
|
35
51
|
|
36
52
|
require "#{base_path}/cta_redux/models/train.rb"
|
37
53
|
require "#{base_path}/cta_redux/models/bus.rb"
|
54
|
+
|
38
55
|
end
|
39
56
|
|
40
57
|
class Array
|
58
|
+
# Encloses the object with an array, if it is not already
|
59
|
+
# @param object [Object] the object to enclose
|
60
|
+
# @return [Array<Object>] the object, enclosed in an array
|
41
61
|
def self.wrap(object)
|
42
62
|
if object.nil?
|
43
63
|
[]
|
@@ -1,5 +1,6 @@
|
|
1
1
|
module CTA
|
2
2
|
class BusTracker
|
3
|
+
# Returns the connection object we use to talk to the BusTracker API
|
3
4
|
def self.connection
|
4
5
|
raise "You need to set a developer key first. Try CTA::BusTracker.key = 'foo'." unless @key
|
5
6
|
|
@@ -13,10 +14,22 @@ module CTA
|
|
13
14
|
end
|
14
15
|
end
|
15
16
|
|
17
|
+
# Returns the current time according to the BusTime servers that power the BusTracker API.
|
18
|
+
# @return [CTA::BusTracker::TimeResponse]
|
16
19
|
def self.time!
|
17
20
|
connection.get('gettime')
|
18
21
|
end
|
19
22
|
|
23
|
+
# Returns status of vehicles out on the road.
|
24
|
+
# @param [Hash] options
|
25
|
+
# @option options [Array<String>, Array<Integer>, String, Integer] :vehicles A list or single vehicle IDs to query.
|
26
|
+
# Not available with :routes.
|
27
|
+
# @option options [Array<String>, Array<Integer>, String, Integer] :routes A list or single route IDs to query.
|
28
|
+
# Not available with :vehicles.
|
29
|
+
# @return [CTA::BusTracker::VehiclesResponse]
|
30
|
+
# @example
|
31
|
+
# CTA::BusTracker.vehicles!(:routes => [22,36])
|
32
|
+
# CTA::BusTracker.vehicles!(:vehicles => 4240)
|
20
33
|
def self.vehicles!(options={})
|
21
34
|
allowed_keys = [:vehicles, :routes]
|
22
35
|
if options.keys.any? { |k| !allowed_keys.include?(k) }
|
@@ -36,10 +49,18 @@ module CTA
|
|
36
49
|
connection.get('getvehicles', { :rt => routes, :vid => vehicles })
|
37
50
|
end
|
38
51
|
|
52
|
+
# Returns a list of all routes the BusTracker API knows about - whether or not they are active.
|
53
|
+
# @return [CTA::BusTracker::RoutesResponse]
|
39
54
|
def self.routes!
|
40
55
|
connection.get('getroutes')
|
41
56
|
end
|
42
57
|
|
58
|
+
# Returns the directions in which a route operates (eg Eastbound, Westbound)
|
59
|
+
# @param [Hash] options
|
60
|
+
# @option options [String, Integer] :route The route to query for available directions
|
61
|
+
# @return [CTA::BusTracker::DirectionsResponse]
|
62
|
+
# @example
|
63
|
+
# CTA::BusTracker.directions!(:route => 37)
|
43
64
|
def self.directions!(options={})
|
44
65
|
allowed_keys = [:route]
|
45
66
|
if options.keys.any? { |k| !allowed_keys.include?(k) }
|
@@ -58,6 +79,13 @@ module CTA
|
|
58
79
|
connection.get('getdirections', { :rt => routes.first })
|
59
80
|
end
|
60
81
|
|
82
|
+
# Returns the stops along a route and direction
|
83
|
+
# @params [Hash] options
|
84
|
+
# @option options [String, Integer] :route The route to query for stops
|
85
|
+
# @option options [String, Integer] :direction The direction to query for stops
|
86
|
+
# @return [CTA::BusTracker::StopsResponse]
|
87
|
+
# @example
|
88
|
+
# CTA::BusTracker.stops!(:route => 22, :direction => :northbound)
|
61
89
|
def self.stops!(options={})
|
62
90
|
allowed_keys = [:route, :direction]
|
63
91
|
if options.keys.any? { |k| !allowed_keys.include?(k) }
|
@@ -84,6 +112,14 @@ module CTA
|
|
84
112
|
connection.get('getstops', { :rt => routes.first, :dir => directions.first.to_s.capitalize })
|
85
113
|
end
|
86
114
|
|
115
|
+
# Returns available patterns for a route
|
116
|
+
# @params [Hash] options
|
117
|
+
# @option options [String, Integer] :route The route to query for patterns. Not available with :patterns
|
118
|
+
# @option options [Array<String>, Array<Integer>, String, Integer] :patterns Patterns to return. Not available with :route
|
119
|
+
# @return [CTA::BusTracker::PatternsResponse]
|
120
|
+
# @example
|
121
|
+
# CTA::BusTracker.patterns!(:route => 22)
|
122
|
+
# CTA::BusTracker.patterns!(:patterns => [3936, 3932])
|
87
123
|
def self.patterns!(options={})
|
88
124
|
allowed_keys = [:route, :patterns]
|
89
125
|
if options.keys.any? { |k| !allowed_keys.include?(k) }
|
@@ -106,6 +142,16 @@ module CTA
|
|
106
142
|
connection.get('getpatterns', { :pid => patterns, :rt => routes.first })
|
107
143
|
end
|
108
144
|
|
145
|
+
# Returns a set of arrival/departure predictions.
|
146
|
+
# @params [Hash] options
|
147
|
+
# @option options [Array<String>, Array<Integer>, String, Integer] :vehicles Vehicles to predict. Not available with :routes
|
148
|
+
# @option options [Array<String>, Array<Integer>, String, Integer] :routes Routes to predict. Not available with :vehicles
|
149
|
+
# @option options [Array<String>, Array<Integer>, String, Integer] :stops Stops along a route to predict. Required with :routes
|
150
|
+
# @option options [String, Integer] :limit Maximum number of predictions to return.
|
151
|
+
# @return [CTA::BusTracker::PredictionsResponse]
|
152
|
+
# @example
|
153
|
+
# CTA::BusTracker.predictions!(:routes => 22, :stops => 15895)
|
154
|
+
# CTA::BusTracker.predictions!(:vehicles => [2172, 1860], :limit => 1)
|
109
155
|
def self.predictions!(options={})
|
110
156
|
allowed_keys = [:vehicles, :stops, :routes, :limit]
|
111
157
|
if options.keys.any? { |k| !allowed_keys.include?(k) }
|
@@ -127,6 +173,16 @@ module CTA
|
|
127
173
|
connection.get('getpredictions', { :rt => routes, :vid => vehicles, :stpid => stops, :top => limit })
|
128
174
|
end
|
129
175
|
|
176
|
+
# Returns active bulletins.
|
177
|
+
# @note Consider using {CTA::CustomerAlerts.alerts!} or {CTA::CustomerAlerts.status!}, as those are not rate-limited.
|
178
|
+
# @params [Hash] options
|
179
|
+
# @option options [Array<String>, Array<Integer>, String, Integer] :routes Routes for which to retrieve bulletins.
|
180
|
+
# When combined with :direction or :stops, may only specify one :route.
|
181
|
+
# @option options [String, Integer] :direction Direction of a route for which to retrieve bulletins.
|
182
|
+
# @option options [String, Integer] :stop Stop along a route for which to retrieve bulletins.
|
183
|
+
# @return [CTA::BusTracker::ServiceBulletinsResponse]
|
184
|
+
# @example
|
185
|
+
# CTA::BusTracker.bulletins!(:routes => [8, 22])
|
130
186
|
def self.bulletins!(options={})
|
131
187
|
allowed_keys = [:routes, :directions, :stop]
|
132
188
|
if options.keys.any? { |k| !allowed_keys.include?(k) }
|
@@ -162,19 +218,29 @@ module CTA
|
|
162
218
|
connection.get('getservicebulletins', { :rt => routes, :stpid => stops, :dir => directions.first })
|
163
219
|
end
|
164
220
|
|
221
|
+
# Returns the current API key used to talk to BusTracker
|
222
|
+
# @return [String] the api key
|
165
223
|
def self.key
|
166
224
|
@key
|
167
225
|
end
|
168
226
|
|
227
|
+
# Sets the API key used to talk to BusTracker
|
228
|
+
# @note If using SimpleCache as a caching strategy, this resets the cache.
|
229
|
+
# @param key [String] The key to use
|
169
230
|
def self.key=(key)
|
170
231
|
@key = key
|
171
232
|
@connection = nil
|
172
233
|
end
|
173
234
|
|
235
|
+
# Returns the debug status of the API. When in debug mode, all API responses will additionally return
|
236
|
+
# the parsed XML tree, and the original XML for inspection
|
174
237
|
def self.debug
|
175
238
|
!!@debug
|
176
239
|
end
|
177
240
|
|
241
|
+
# Sets the debug status of the API. When in debug mode, all API responses will additionally return
|
242
|
+
# the parsed XML tree, and the original XML for inspection
|
243
|
+
# @param debug [true, false]
|
178
244
|
def self.debug=(debug)
|
179
245
|
@debug = debug
|
180
246
|
@connection = nil
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module CTA
|
2
2
|
class CustomerAlerts
|
3
3
|
|
4
|
+
# Returns the connection object we use to talk to the CustomerAlerts API
|
4
5
|
def self.connection
|
5
6
|
@connection ||= Faraday.new do |faraday|
|
6
7
|
faraday.url_prefix = 'http://www.transitchicago.com/api/1.0/'
|
@@ -10,14 +11,21 @@ module CTA
|
|
10
11
|
end
|
11
12
|
end
|
12
13
|
|
14
|
+
# Returns an overview of system status.
|
15
|
+
# @param [Hash] options
|
16
|
+
# @option options [Array<Integer> Array<String>, Integer, String] :routes Routes to query for status
|
17
|
+
# @option options [String, Integer] :stations Station to query for status
|
18
|
+
# @return [CTA::CustomerAlerts::RouteStatusResponse]
|
19
|
+
# @example
|
20
|
+
# CTA::CustomerAlerts.status!(:routes => [8,22])
|
13
21
|
def self.status!(options = {})
|
14
|
-
allowed_keys = [:routes, :
|
22
|
+
allowed_keys = [:routes, :station]
|
15
23
|
if options.keys.any? { |k| !allowed_keys.include?(k) }
|
16
24
|
raise "Illegal argument!"
|
17
25
|
end
|
18
26
|
|
19
27
|
routes = Array.wrap(options[:routes]).flatten.compact.uniq.join(',')
|
20
|
-
stations = Array.wrap(options[:
|
28
|
+
stations = Array.wrap(options[:station]).flatten.compact.uniq
|
21
29
|
|
22
30
|
if stations.size > 1
|
23
31
|
raise "Can only specify one station!"
|
@@ -26,6 +34,18 @@ module CTA
|
|
26
34
|
connection.get('routes.aspx', { :type => options[:type], :routeid => routes, :stationid => stations.first })
|
27
35
|
end
|
28
36
|
|
37
|
+
# Returns alerts for given routes or stations
|
38
|
+
# @param [Hash] options
|
39
|
+
# @option options [Array<Integer> Array<String>, Integer, String] :routes Routes to query for alerts. Not available with :station
|
40
|
+
# @option options [Integer, String] :station Station to query for alerts. Not available with :route
|
41
|
+
# @option options [true, false] :active Only return active alerts
|
42
|
+
# @option options [true, false] :accessibility Include alerts related to accessibility (elevators, etc)
|
43
|
+
# @option options [true, false] :planned Only return planned alerts
|
44
|
+
# @option options [Integer] :recent_days Only return alerts within the specified number of days
|
45
|
+
# @option options [Integer] :before Only return alerts starting prior to the specified number of days
|
46
|
+
# @return [CTA::CustomerAlerts::AlertsResponse]
|
47
|
+
# @example
|
48
|
+
# CTA::CustomerAlerts.alerts!(:route => 8)
|
29
49
|
def self.alerts!(options = {})
|
30
50
|
allowed_keys = [:active, :accessibility, :planned, :routes, :station, :recent_days, :before]
|
31
51
|
if options.keys.any? { |k| !allowed_keys.include?(k) }
|
@@ -60,10 +80,15 @@ module CTA
|
|
60
80
|
connection.get('alerts.aspx', params)
|
61
81
|
end
|
62
82
|
|
83
|
+
# Returns the debug status of the API. When in debug mode, all API responses will additionally return
|
84
|
+
# the parsed XML tree, and the original XML for inspection
|
63
85
|
def self.debug
|
64
86
|
!!@debug
|
65
87
|
end
|
66
88
|
|
89
|
+
# Sets the debug status of the API. When in debug mode, all API responses will additionally return
|
90
|
+
# the parsed XML tree, and the original XML for inspection
|
91
|
+
# @param debug [true, false]
|
67
92
|
def self.debug=(debug)
|
68
93
|
@debug = debug
|
69
94
|
@connection = nil
|
@@ -1,5 +1,6 @@
|
|
1
1
|
module CTA
|
2
2
|
class TrainTracker
|
3
|
+
# Returns the connection object we use to talk to the TrainTracker API
|
3
4
|
def self.connection
|
4
5
|
raise "You need to set a developer key first. Try CTA::TrainTracker.key = 'foo'." unless @key
|
5
6
|
|
@@ -13,6 +14,15 @@ module CTA
|
|
13
14
|
end
|
14
15
|
end
|
15
16
|
|
17
|
+
# Returns the arrivals for a route, or station
|
18
|
+
# @param [Hash] options
|
19
|
+
# @option options [String, Integer] :route The route to query
|
20
|
+
# @option options [String, Integer] :station The station to query for arrivals
|
21
|
+
# @option options [String, Integer] :parent_station The parent station to query for arrivals.
|
22
|
+
# @option options [String, Integer] :limit Maximum number of results to return
|
23
|
+
# @return [CTA::TrainTracker::ArrivalsResponse]
|
24
|
+
# @example
|
25
|
+
# CTA::TrainTracker.arrivals!(:route => :red)
|
16
26
|
def self.arrivals!(options={})
|
17
27
|
allowed_keys = [:route, :parent_station, :station, :limit]
|
18
28
|
if options.keys.any? { |k| !allowed_keys.include?(k) }
|
@@ -48,10 +58,25 @@ module CTA
|
|
48
58
|
connection.get('ttarrivals.aspx', params)
|
49
59
|
end
|
50
60
|
|
61
|
+
# Returns the arrivals for a route, or station
|
62
|
+
# @param [Hash] options
|
63
|
+
# @option options [String, Integer] :route The route to query
|
64
|
+
# @option options [String, Integer] :station The station to query for arrivals
|
65
|
+
# @option options [String, Integer] :parent_station The parent station to query for arrivals.
|
66
|
+
# @option options [String, Integer] :limit Maximum number of results to return
|
67
|
+
# @return [CTA::TrainTracker::ArrivalsResponse]
|
68
|
+
# @example
|
69
|
+
# CTA::TrainTracker.predicitons!(:route => :red)
|
51
70
|
def self.predictions!(options={})
|
52
71
|
self.arrivals!(options)
|
53
72
|
end
|
54
73
|
|
74
|
+
# Returns a set of upcoming positions for a train/run
|
75
|
+
# @param [Hash] options
|
76
|
+
# @option options [String, Integer] :run The run number of the train to follow
|
77
|
+
# @return [CTA::TrainTracker::FollowResponse]
|
78
|
+
# @example
|
79
|
+
# CTA::TrainTracker.follow!(:run => 914)
|
55
80
|
def self.follow!(options={})
|
56
81
|
raise "Must specify a run! Try follow(:run => 914)..." unless options.has_key?(:run)
|
57
82
|
|
@@ -64,6 +89,12 @@ module CTA
|
|
64
89
|
connection.get('ttfollow.aspx', { :runnumber => runs.first })
|
65
90
|
end
|
66
91
|
|
92
|
+
# Returns the position and next station of all trains in service.
|
93
|
+
# @param [Hash] options
|
94
|
+
# @option options [Array<String>, Array<Integer>, String, Integer] :routes Routes for which to return positions
|
95
|
+
# @return [CTA::TrainTracker::LocationsResponse]
|
96
|
+
# @example
|
97
|
+
# CTA::TrainTracker.locations!(:route => [:red, :blue])
|
67
98
|
def self.locations!(options={})
|
68
99
|
unless options.has_key?(:routes)
|
69
100
|
raise "Must specify at least one route! (Try locations(:routes => [:red, :blue]) )"
|
@@ -78,23 +109,39 @@ module CTA
|
|
78
109
|
connection.get('ttpositions.aspx', { :rt => rt.join(',') })
|
79
110
|
end
|
80
111
|
|
112
|
+
# Returns the position and next station of all trains in service.
|
113
|
+
# @param [Hash] options
|
114
|
+
# @option options [Array<String>, Array<Integer>, String, Integer] :routes Routes for which to return positions
|
115
|
+
# @return [CTA::TrainTracker::LocationsResponse]
|
116
|
+
# @example
|
117
|
+
# CTA::TrainTracker.positions!(:route => [:red, :blue])
|
81
118
|
def self.positions!(options={})
|
82
119
|
self.locations!(options)
|
83
120
|
end
|
84
121
|
|
122
|
+
# Returns the current API key used to talk to TrainTracker
|
123
|
+
# @return [String] the api key
|
85
124
|
def self.key
|
86
125
|
@key
|
87
126
|
end
|
88
127
|
|
128
|
+
# Sets the API key used to talk to TrainTracker
|
129
|
+
# @note If using SimpleCache as a caching strategy, this resets the cache.
|
130
|
+
# @param key [String] The key to use
|
89
131
|
def self.key=(key)
|
90
132
|
@key = key
|
91
133
|
@connection = nil
|
92
134
|
end
|
93
135
|
|
136
|
+
# Returns the debug status of the API. When in debug mode, all API responses will additionally return
|
137
|
+
# the parsed XML tree, and the original XML for inspection
|
94
138
|
def self.debug
|
95
139
|
!!@debug
|
96
140
|
end
|
97
141
|
|
142
|
+
# Sets the debug status of the API. When in debug mode, all API responses will additionally return
|
143
|
+
# the parsed XML tree, and the original XML for inspection
|
144
|
+
# @param debug [true, false]
|
98
145
|
def self.debug=(debug)
|
99
146
|
@debug = debug
|
100
147
|
@connection = nil
|
data/lib/cta_redux/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cta_redux
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Hayworth
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02-
|
11
|
+
date: 2015-02-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 3.2.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: yard
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.8.7.6
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.8.7.6
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: sequel
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -130,11 +144,13 @@ description: |-
|
|
130
144
|
email:
|
131
145
|
- ahayworth@gmail.com
|
132
146
|
executables: []
|
133
|
-
extensions:
|
147
|
+
extensions:
|
148
|
+
- ext/inflate_database/extconf.rb
|
134
149
|
extra_rdoc_files: []
|
135
150
|
files:
|
136
151
|
- ".gitignore"
|
137
152
|
- ".rspec"
|
153
|
+
- ".travis.yml"
|
138
154
|
- Gemfile
|
139
155
|
- LICENSE
|
140
156
|
- README.md
|
@@ -142,6 +158,7 @@ files:
|
|
142
158
|
- cta_redux.gemspec
|
143
159
|
- data/.gitkeep
|
144
160
|
- data/cta-gtfs.db.gz
|
161
|
+
- ext/inflate_database/extconf.rb
|
145
162
|
- lib/cta_redux.rb
|
146
163
|
- lib/cta_redux/api/api_response.rb
|
147
164
|
- lib/cta_redux/api/bus_tracker.rb
|
@@ -198,7 +215,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
198
215
|
requirements:
|
199
216
|
- - ">="
|
200
217
|
- !ruby/object:Gem::Version
|
201
|
-
version:
|
218
|
+
version: 1.9.3
|
202
219
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
203
220
|
requirements:
|
204
221
|
- - ">="
|
@@ -232,3 +249,4 @@ test_files:
|
|
232
249
|
- spec/stubs/ttfollow_run217_response.xml
|
233
250
|
- spec/stubs/ttpositions_response.xml
|
234
251
|
- spec/train_tracker_spec.rb
|
252
|
+
has_rdoc:
|