bus-o-matic 0.0.2 → 0.0.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 400fd1cb7e0e96c2dc0fee2cd937f188a2f3e572
4
- data.tar.gz: da750c8cdc0260fcecd5687cd7863ed8d0713efe
3
+ metadata.gz: e7a886fce58da346faaf023ea93d7119dc101bce
4
+ data.tar.gz: b25ace7e55ca30109cc5d65712257139a7928168
5
5
  SHA512:
6
- metadata.gz: b41fd9f133f7a8194ca712774ca6404497cdf8d6117b5bece4603d4bc17e703273c083f7f107f0b148ff2e99d817dd2bdfcb50745becf6adbb282c88316e965c
7
- data.tar.gz: 3f58618a70c0b7bfaec1854653890a25dab4bff8c35e6afa51bea17ff31fe1c85ffcb3383842e56be57b869bf584d3b0f1a3704662a815ece290750b6bc40f63
6
+ metadata.gz: 4277dbcc6bb94b238992d5272bbbac69971ea72099f2e440bf9544bd6af46e10d3a02086612cd22362d6500e081868c444a95262a578ddf983d49b6d136bb84f
7
+ data.tar.gz: 0bf32c7ca5f84195ed5f337b3978ef7dc97bc55606768df7cd461369eb3a5ec7c511f4b63f29375bd1dd2381044eb02ac6a9f7d40ce1bd2c80a6be9ba08ec72b
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in bus_rat.gemspec
4
+ gemspec
@@ -0,0 +1,24 @@
1
+ Copyright (c) 2015 Matt Cone
2
+
3
+ Copyright (c) 2013 fbonetti
4
+
5
+ MIT License
6
+
7
+ Permission is hereby granted, free of charge, to any person obtaining
8
+ a copy of this software and associated documentation files (the
9
+ "Software"), to deal in the Software without restriction, including
10
+ without limitation the rights to use, copy, modify, merge, publish,
11
+ distribute, sublicense, and/or sell copies of the Software, and to
12
+ permit persons to whom the Software is furnished to do so, subject to
13
+ the following conditions:
14
+
15
+ The above copyright notice and this permission notice shall be
16
+ included in all copies or substantial portions of the Software.
17
+
18
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
22
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
23
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
24
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,155 @@
1
+ # Bus-o-matic
2
+
3
+ Bus-o-matic is a simple Ruby wrapper for the [Pittsburgh Port Authority API]
4
+ (http://www.portauthority.org/paac/CompanyInfoProjects/DeveloperResources.aspx).
5
+ This gem allows you to retrieve real-time information about vehicles, routes,
6
+ stops, and predicted arrival times for buses in Pittsburgh, Pennsylvania.
7
+ This gem borrows heavily from [cta-api] (https://github.com/fbonetti/cta-api)
8
+ by [Frank Bonetti] (https://github.com/fbonetti).
9
+
10
+ ## Installation
11
+
12
+ Add this line to your application's Gemfile:
13
+
14
+ ```ruby
15
+ gem 'bus-o-matic'
16
+ ```
17
+
18
+ ## Setup
19
+
20
+ Before using Bus-o-matic, you'll need to request an API key from the [Port
21
+ Authority] (http://www.portauthority.org/paac/CompanyInfoProjects/DeveloperResources.aspx).
22
+ Require the gem and add your Port Authority API key. This can be put in an initializer.
23
+
24
+ ```ruby
25
+ require 'bus-o-matic'
26
+
27
+ key = "xxxxxxxxxxxxxxxxxxxx"
28
+ PIT::Busomatic.key = key
29
+ ```
30
+
31
+ ## Usage
32
+
33
+ The following examples illustrate how you can use Bus-o-matic.
34
+
35
+ ### Routes and Stops
36
+
37
+ Bus-o-matic can list all of the routes availabe in the Port Authority API.
38
+ You can also get the directions for a particular route, and a list all of
39
+ the stops on a route.
40
+
41
+ ```ruby
42
+
43
+ # Retrieve a list of all available routes
44
+ PIT::Busomatic.routes
45
+
46
+ # Retrieve the available directions for the specified route (INBOUND, OUTBOUND, etc.)
47
+ PIT::Busomatic.directions :rt => 16
48
+
49
+ # Retrieve the stops for Route 16 heading Inbound
50
+ PIT::Busomatic.stops :rt => 16, :dir => :INBOUND
51
+ ```
52
+
53
+ Note that the available directions (INBOUND, etc.) appear to be case sensitive.
54
+
55
+ ### Patterns
56
+
57
+ Bus-o-matic can retrieve a set of geo-positional points for a route, something
58
+ known as a "pattern." Patterns can be used to outline routes on maps.
59
+
60
+ ```ruby
61
+ # Retrieve the pattern for Route 16
62
+ PIT::Busomatic.patterns :rt => 16
63
+ ```
64
+
65
+ ### Vehicles
66
+
67
+ Bus-o-matic can find all of the vehicles that are currently active on a route,
68
+ or retrieve information about a specific vehicle. The first step is finding
69
+ the active vehicles on a route.
70
+
71
+ ```ruby
72
+ # Returns an array of vehicles that are active on Route 16.
73
+ PIT::Busomatic.vehicles :rt => 16
74
+ ```
75
+
76
+ You can retrieve information for vehicles on more than one route. Up to 10
77
+ routes can be specified at once.
78
+
79
+ ```ruby
80
+ # Returns an array of vehicles that are active on Routes 13, 16, and 17.
81
+ PIT::Busomatic.vehicles :rt => ["16","17","13"]
82
+ ```
83
+
84
+ You can also find information about one or more vehicles that are currently
85
+ active. Up to 10 vehicle IDs can be specified at once.
86
+
87
+ ```ruby
88
+ # Returns information about a specific vehicle.
89
+ PIT::Busomatic.vehicles :vid => 6013
90
+
91
+ # Returns information about multiple vehicles.
92
+ PIT::Busomatic.vehicles :vid => ["6013","6001"]
93
+ ```
94
+
95
+ Note that you cannot combine both `rt` and `vid` parameters in a single request.
96
+
97
+ ### Predicted Arrival Times
98
+
99
+ Bus-o-matic can return predicted arrival times for one or more buses. Up to 10
100
+ vehicle IDs can be specified at once. Note that you cannot combine both `vid`
101
+ and `stpid` parameters in a single request.
102
+
103
+ ```ruby
104
+ # Returns predictions for a single vehicle.
105
+ PIT::Busomatic.predictions :vid => 5629
106
+
107
+ # Returns predictions for multiple vehicles.
108
+ PIT::Busomatic.predictions :vid => ["5629","5604"]
109
+ ```
110
+
111
+ You can also retrieve predictions for one or more stops. Up to 10 stop IDs can
112
+ be specified at once. You can combine the `stpid` and `rt` parameters, as shown
113
+ below.
114
+
115
+ ```ruby
116
+
117
+ # Returns predictions for all buses on all applicable routes for single stop.
118
+ PIT::Busomatic.predictions :stpid => 1326
119
+
120
+ # Returns predictions for multiple stops.
121
+ PIT::Busomatic.predictions :stpid => ["1326","18320","18563"]
122
+
123
+ # Returns predictions for all buses on Route 16 for a single stop
124
+ PIT::Busomatic.predictions :stpid => 1326, :rt => 16
125
+
126
+ # Returns predictions for buses on Routes 13, 16, and 17 for Stop 1326.
127
+ PIT::Busomatic.predictions :stpid => 1326, :rt => ["13","16","17"]
128
+ ```
129
+
130
+ ### System Time
131
+
132
+ Returns the official Port Authority API system time.
133
+
134
+ ```ruby
135
+ PIT::Busomatic.time
136
+ ```
137
+
138
+
139
+ ## Contributing
140
+
141
+ This is my first Ruby gem, so I'd appreciate you reporting issues or creating
142
+ pull requests.
143
+
144
+ 1. Fork it
145
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
146
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
147
+ 4. Push to the branch (`git push origin my-new-feature`)
148
+ 5. Create a new Pull Request
149
+
150
+
151
+ ## License
152
+
153
+ Copyright (c) 2015 Matt Cone and 2013 fbonetti.
154
+
155
+ The MIT License (MIT). See the LICENSE.txt file for details.
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
Binary file
Binary file
@@ -0,0 +1,17 @@
1
+ Gem::Specification.new do |s|
2
+
3
+ s.name = "bus-o-matic"
4
+ s.version = "0.0.3"
5
+ s.authors = ["Matt Cone"]
6
+ s.email = ["matt@macinstruct.com"]
7
+ s.summary = %q{A wrapper for the Pittsburgh Port Authority TrueTime Bus API}
8
+ s.description = %q{A wrapper for the Pittsburgh Port Authority TrueTime Bus API}
9
+ s.homepage = "https://github.com/mattcone/bus-o-matic"
10
+ s.license = "MIT"
11
+ s.platform = Gem::Platform::RUBY
12
+
13
+ s.require_paths = ['lib']
14
+ s.files = Dir.glob("**/*").reject { |x| File.directory?(x) }
15
+ s.add_dependency "httparty", '~> 0.10.2'
16
+ s.add_dependency "hashie", '~> 2.0'
17
+ end
@@ -0,0 +1,133 @@
1
+ require 'httparty'
2
+ require 'hashie'
3
+ require 'time'
4
+
5
+ class Array
6
+ def self.wrap(object)
7
+ if object.nil?
8
+ []
9
+ elsif object.respond_to?(:to_ary)
10
+ object.to_ary || [object]
11
+ else
12
+ [object]
13
+ end
14
+ end
15
+ end
16
+
17
+ module PIT
18
+ class Busomatic
19
+ include HTTParty
20
+ base_uri 'http://realtime.portauthority.org/bustime/api/v2/'
21
+ format :xml
22
+ @@key = nil
23
+
24
+ def self.time(options={})
25
+ options.merge!({
26
+ :key => @@key
27
+ })
28
+ response = get("/gettime", :query => options)['bustime_response']
29
+ check_for_errors response['error']
30
+
31
+ Time.parse response['tm']
32
+ end
33
+
34
+ def self.vehicles(options={})
35
+ options.merge!({
36
+ :key => @@key
37
+ })
38
+ options[:vid] = options[:vid].join(',') if options[:vid].kind_of?(Array)
39
+ options[:rt] = options[:rt].join(',') if options[:rt].kind_of?(Array)
40
+
41
+ response = get("/getvehicles", :query => options)['bustime_response']
42
+ check_for_errors response['error']
43
+
44
+ results = Array.wrap response['vehicle']
45
+ results.map { |result| Hashie::Mash.new result } unless results.nil?
46
+ end
47
+
48
+ def self.routes(options={})
49
+ options.merge!({
50
+ :key => @@key
51
+ })
52
+ response = get("/getroutes", :query => options)['bustime_response']
53
+ check_for_errors response['error']
54
+
55
+ results = Array.wrap response['route']
56
+ Hash[ results.map { |result| [result['rt'], result['rtnm']] } ] unless results.nil?
57
+ end
58
+
59
+ def self.directions(options={})
60
+ options.merge!({
61
+ :key => @@key
62
+ })
63
+ response = get("/getdirections", :query => options)['bustime_response']
64
+ check_for_errors response['error']
65
+
66
+ results = Array.wrap response['dir']
67
+ results.map { |direction| direction.split(/ /)[0] } unless results.nil?
68
+ end
69
+
70
+ def self.stops(options={})
71
+ options.merge!({
72
+ :key => @@key
73
+ })
74
+ response = get("/getstops", :query => options)['bustime_response']
75
+ check_for_errors response['error']
76
+
77
+ results = Array.wrap response['stop']
78
+ results.map { |result| Hashie::Mash.new result } unless results.nil?
79
+ end
80
+
81
+ def self.patterns(options={})
82
+ options.merge!({
83
+ :key => @@key
84
+ })
85
+ options['pid'] = options['pid'].join(',') if options['pid'].kind_of?(Array)
86
+
87
+ response = get("/getpatterns", :query => options)['bustime_response']
88
+ check_for_errors response['error']
89
+
90
+ results = Array.wrap response['ptr']
91
+ results.map { |result| Hashie::Mash.new result } unless results.nil?
92
+ end
93
+
94
+ def self.predictions(options={})
95
+ options.merge!({
96
+ :key => @@key
97
+ })
98
+ options[:stpid] = options[:stpid].join(',') if options[:stpid].kind_of?(Array)
99
+ options[:rt] = options[:rt].join(',') if options[:rt].kind_of?(Array)
100
+ options[:vid] = options[:vid].join(',') if options[:vid].kind_of?(Array)
101
+
102
+ response = get("/getpredictions", :query => options)['bustime_response']
103
+ check_for_errors response['error']
104
+
105
+ results = Array.wrap response['prd']
106
+ results.map { |result| Hashie::Mash.new result } unless results.nil?
107
+ end
108
+
109
+ def self.bulletins(options={})
110
+ options.merge!({
111
+ :key => @@key
112
+ })
113
+ options['rt'] = options['rt'].join(',') if options['rt'].kind_of?(Array)
114
+ options['stpid'] = options['stpid'].join(',') if options['stpid'].kind_of?(Array)
115
+
116
+ response = get("/getservicebulletins", :query => options)['bustime_response']
117
+ check_for_errors response['error']
118
+
119
+ results = Array.wrap response['sb']
120
+ results.map { |result| Hashie::Mash.new result } unless results.nil?
121
+ end
122
+
123
+ def self.key=(key)
124
+ @@key = key
125
+ end
126
+
127
+ private
128
+
129
+ def self.check_for_errors(error)
130
+ puts "API ERROR: #{error['msg']}" if error
131
+ end
132
+ end
133
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bus-o-matic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Cone
@@ -44,7 +44,15 @@ email:
44
44
  executables: []
45
45
  extensions: []
46
46
  extra_rdoc_files: []
47
- files: []
47
+ files:
48
+ - Gemfile
49
+ - LICENSE.txt
50
+ - README.md
51
+ - Rakefile
52
+ - bus-o-matic-0.0.1.gem
53
+ - bus-o-matic-0.0.2.gem
54
+ - bus-o-matic.gemspec
55
+ - lib/bus-o-matic.rb
48
56
  homepage: https://github.com/mattcone/bus-o-matic
49
57
  licenses:
50
58
  - MIT