onebusaway 0.1.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/Gemfile +13 -0
- data/Gemfile.lock +23 -0
- data/LICENSE.txt +20 -0
- data/README.markdown +37 -0
- data/Rakefile +53 -0
- data/VERSION +1 -0
- data/lib/onebusaway.rb +181 -0
- data/test/helper.rb +18 -0
- data/test/sample_data.rb +76 -0
- data/test/unit/test_onebusaway.rb +7 -0
- metadata +138 -0
data/Gemfile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
source "http://rubygems.org"
|
2
|
+
# Add dependencies required to use your gem here.
|
3
|
+
# Example:
|
4
|
+
# gem "activesupport", ">= 2.3.5"
|
5
|
+
|
6
|
+
# Add dependencies to develop your gem here.
|
7
|
+
# Include everything needed to run rake, tests, features, etc.
|
8
|
+
group :development do
|
9
|
+
gem "shoulda", ">= 0"
|
10
|
+
gem "bundler", "~> 1.0.0"
|
11
|
+
gem "jeweler", "~> 1.5.1"
|
12
|
+
gem "rcov", ">= 0"
|
13
|
+
end
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
git (1.2.5)
|
5
|
+
jeweler (1.5.1)
|
6
|
+
bundler (~> 1.0.0)
|
7
|
+
git (>= 1.2.5)
|
8
|
+
rake
|
9
|
+
rake (0.8.7)
|
10
|
+
rcov (0.9.9)
|
11
|
+
shoulda (2.11.3)
|
12
|
+
|
13
|
+
PLATFORMS
|
14
|
+
ruby
|
15
|
+
|
16
|
+
DEPENDENCIES
|
17
|
+
bundler (~> 1.0.0)
|
18
|
+
jeweler (~> 1.5.1)
|
19
|
+
rcov
|
20
|
+
shoulda
|
21
|
+
|
22
|
+
METADATA
|
23
|
+
version: 1.0.6
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2010 Jeff Ching
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.markdown
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
OneBusAway API
|
2
|
+
--------------
|
3
|
+
|
4
|
+
Unofficial Ruby library for interacting with the [OneBusAway API](http://code.google.com/p/onebusaway/wiki/OneBusAwayApiReference)
|
5
|
+
|
6
|
+
### Documentation & Requirements
|
7
|
+
* REXML
|
8
|
+
|
9
|
+
### Examples
|
10
|
+
|
11
|
+
Basic usage:
|
12
|
+
|
13
|
+
require 'rubygems'
|
14
|
+
require 'onebusaway'
|
15
|
+
|
16
|
+
Onebusaway.api_key = 'YOUR_API_KEY'
|
17
|
+
|
18
|
+
# find a stop by id - returns a Onebusaway::Stop instance
|
19
|
+
stop = Onebusaway.stop_by_id(:id => "1_10020")
|
20
|
+
|
21
|
+
# find a route by id - returns a Onebusaway::Route instance
|
22
|
+
route = Onebusaway.route_by_id(:id => "1_30")
|
23
|
+
|
24
|
+
# find stops nearby a given latitude and longitude
|
25
|
+
# - returns an array of Onebusaway::Stop instances
|
26
|
+
stops = Onebusaway.stops_for_location(:lat => "47.66", :lon => "-122.29")
|
27
|
+
|
28
|
+
# find routes nearby a given latitude and longitude
|
29
|
+
# - returns an array of Onebusaway::Route instances
|
30
|
+
routes = Onebusaway.routes_for_location(:lat => "47.66", :lon => "-122.29")
|
31
|
+
|
32
|
+
# find stops for a route - returns an array of Onebusaway::Stop instances
|
33
|
+
stops = Onebusaway.stops_for_route(:id => "1_30")
|
34
|
+
|
35
|
+
# find arrivals/departures for a given stop
|
36
|
+
# - returns an array of Onebusaway::ArrivalAndDeparture instances
|
37
|
+
arrivals = Onebusaway.arrivals_and_departures_for_stop(:id => "1_570")
|
data/Rakefile
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
begin
|
4
|
+
Bundler.setup(:default, :development)
|
5
|
+
rescue Bundler::BundlerError => e
|
6
|
+
$stderr.puts e.message
|
7
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
+
exit e.status_code
|
9
|
+
end
|
10
|
+
require 'rake'
|
11
|
+
|
12
|
+
require 'jeweler'
|
13
|
+
Jeweler::Tasks.new do |gem|
|
14
|
+
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
15
|
+
gem.name = "onebusaway"
|
16
|
+
gem.homepage = "http://github.com/chingor13/onebusaway"
|
17
|
+
gem.license = "MIT"
|
18
|
+
gem.summary = %Q{Unofficial Ruby library for interacting with the OneBusAway API}
|
19
|
+
gem.description = %Q{Unofficial Ruby library for interacting with the OneBusAway API. See http://code.google.com/p/onebusaway/wiki/OneBusAwayRestApi}
|
20
|
+
gem.email = "ching.jeff@gmail.com"
|
21
|
+
gem.authors = ["Jeff Ching"]
|
22
|
+
# Include your dependencies below. Runtime dependencies are required when using your gem,
|
23
|
+
# and development dependencies are only needed for development (ie running rake tasks, tests, etc)
|
24
|
+
# gem.add_runtime_dependency 'jabber4r', '> 0.1'
|
25
|
+
# gem.add_development_dependency 'rspec', '> 1.2.3'
|
26
|
+
end
|
27
|
+
Jeweler::RubygemsDotOrgTasks.new
|
28
|
+
|
29
|
+
require 'rake/testtask'
|
30
|
+
Rake::TestTask.new(:test) do |test|
|
31
|
+
test.libs << 'lib' << 'test'
|
32
|
+
test.pattern = 'test/**/test_*.rb'
|
33
|
+
test.verbose = true
|
34
|
+
end
|
35
|
+
|
36
|
+
require 'rcov/rcovtask'
|
37
|
+
Rcov::RcovTask.new do |test|
|
38
|
+
test.libs << 'test'
|
39
|
+
test.pattern = 'test/**/test_*.rb'
|
40
|
+
test.verbose = true
|
41
|
+
end
|
42
|
+
|
43
|
+
task :default => :test
|
44
|
+
|
45
|
+
require 'rake/rdoctask'
|
46
|
+
Rake::RDocTask.new do |rdoc|
|
47
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
48
|
+
|
49
|
+
rdoc.rdoc_dir = 'rdoc'
|
50
|
+
rdoc.title = "onebusaway #{version}"
|
51
|
+
rdoc.rdoc_files.include('README*')
|
52
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
53
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0
|
data/lib/onebusaway.rb
ADDED
@@ -0,0 +1,181 @@
|
|
1
|
+
module Onebusaway
|
2
|
+
|
3
|
+
API_BASE = "http://api.onebusaway.org/api/where/"
|
4
|
+
|
5
|
+
class << self
|
6
|
+
def api_key=(key)
|
7
|
+
@api_key = key
|
8
|
+
end
|
9
|
+
|
10
|
+
def stop_by_id(params)
|
11
|
+
raise if params[:id].nil?
|
12
|
+
|
13
|
+
xml = request('stop', params)
|
14
|
+
stop = Stop.from_xml(xml)
|
15
|
+
end
|
16
|
+
|
17
|
+
def route_by_id(params)
|
18
|
+
raise if params[:id].nil?
|
19
|
+
|
20
|
+
xml = request('route', params)
|
21
|
+
route = Route.from_xml(xml)
|
22
|
+
end
|
23
|
+
|
24
|
+
def stops_for_location(params)
|
25
|
+
raise if params[:lat].nil? || params[:lon].nil?
|
26
|
+
|
27
|
+
doc = request('stops-for-location', params)
|
28
|
+
stops = []
|
29
|
+
doc.elements.each("stops/stop") do |stop_el|
|
30
|
+
stops << Stop.from_xml(stop_el)
|
31
|
+
end
|
32
|
+
stops
|
33
|
+
end
|
34
|
+
|
35
|
+
def routes_for_location(params)
|
36
|
+
raise if params[:lat].nil? || params[:lon].nil?
|
37
|
+
|
38
|
+
doc = request('routes-for-location', params)
|
39
|
+
routes = []
|
40
|
+
doc.elements.each("routes/route") do |route_el|
|
41
|
+
routes << Route.from_xml(route_el)
|
42
|
+
end
|
43
|
+
routes
|
44
|
+
end
|
45
|
+
|
46
|
+
def stops_for_route(params)
|
47
|
+
raise if params[:id].nil?
|
48
|
+
|
49
|
+
doc = request('stops-for-route', params)
|
50
|
+
stops = []
|
51
|
+
doc.elements.each("stops/stop") do |stop_el|
|
52
|
+
stops << Stop.from_xml(stop_el)
|
53
|
+
end
|
54
|
+
stops
|
55
|
+
end
|
56
|
+
|
57
|
+
def arrivals_and_departures_for_stop(params)
|
58
|
+
raise if params[:id].nil?
|
59
|
+
|
60
|
+
doc = request('arrivals-and-departures-for-stop', params)
|
61
|
+
arrivals = []
|
62
|
+
doc.elements.each("arrivalsAndDepartures/arrivalAndDeparture") do |arrival_el|
|
63
|
+
arrivals << ArrivalAndDeparture.from_xml(arrival_el)
|
64
|
+
end
|
65
|
+
arrivals
|
66
|
+
end
|
67
|
+
|
68
|
+
private
|
69
|
+
|
70
|
+
def api_url(call, options = {})
|
71
|
+
url = API_BASE + call
|
72
|
+
id = options.delete(:id)
|
73
|
+
if id
|
74
|
+
url += "/" + id
|
75
|
+
end
|
76
|
+
url += ".xml?"
|
77
|
+
options[:key] = @api_key
|
78
|
+
url += options.to_a.map{|pair| "#{pair[0]}=#{pair[1]}"}.join("&")
|
79
|
+
url
|
80
|
+
end
|
81
|
+
|
82
|
+
def request(call, url_options)
|
83
|
+
url = api_url(call, url_options)
|
84
|
+
|
85
|
+
doc = REXML::Document.new(open(url))
|
86
|
+
root = doc.root
|
87
|
+
status_code = root.elements["code"].text
|
88
|
+
status_text = root.elements["text"].text
|
89
|
+
|
90
|
+
# failed status
|
91
|
+
unless /2\d{2}/.match(status_code)
|
92
|
+
raise "Request failed (#{status_code}): #{status_text}"
|
93
|
+
end
|
94
|
+
|
95
|
+
return root.elements["data"]
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
|
100
|
+
class Base
|
101
|
+
def self.from_xml(xml_or_data)
|
102
|
+
xml_or_data = REXML::Document.new(xml_or_data).root if xml_or_data.is_a?(String)
|
103
|
+
self.parse(xml_or_data)
|
104
|
+
end
|
105
|
+
|
106
|
+
def self.parse(data)
|
107
|
+
raise "not implemented"
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
class Agency < Base
|
112
|
+
attr_accessor :id, :name, :url, :timezone, :lang, :phone
|
113
|
+
def self.parse(data)
|
114
|
+
agency = self.new
|
115
|
+
[:id, :name, :url, :timezone, :lang, :phone].each do |attr|
|
116
|
+
value = data.elements[attr.to_s]
|
117
|
+
agency.send("#{attr}=", value.text) if value
|
118
|
+
end
|
119
|
+
agency
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
class ArrivalAndDeparture < Base
|
124
|
+
attr_accessor :routeId, :routeShortName, :tripId, :tripHeadsign, :stopId, :predictedArrivalTime, :scheduledArrivalTime, :predictedDepartureTime, :scheduledDepartureTime, :status
|
125
|
+
def self.parse(data)
|
126
|
+
arrival = self.new
|
127
|
+
[:routeId, :routeShortName, :tripId, :tripHeadsign, :stopId, :predictedArrivalTime, :scheduledArrivalTime, :predictedDepartureTime, :scheduledDepartureTime, :status].each do |attr|
|
128
|
+
value = data.elements[attr.to_s]
|
129
|
+
arrival.send("#{attr}=", value.text) if value
|
130
|
+
end
|
131
|
+
arrival
|
132
|
+
end
|
133
|
+
|
134
|
+
def minutes_from_now
|
135
|
+
@minutes_from_now ||= begin
|
136
|
+
at = predictedArrivalTime.to_i
|
137
|
+
if at == 0
|
138
|
+
# no predicted time, use scheduled
|
139
|
+
(scheduledArrivalTime.to_i/1000 - Time.now.to_i) / 60
|
140
|
+
else
|
141
|
+
(predictedArrivalTime.to_i/1000 - Time.now.to_i) / 60
|
142
|
+
end
|
143
|
+
end
|
144
|
+
@minutes_from_now
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
class EncodedPolyline < Base
|
149
|
+
attr_accessor :points, :length, :levels
|
150
|
+
end
|
151
|
+
|
152
|
+
class Route < Base
|
153
|
+
attr_accessor :id, :shortName, :longName, :description, :type, :url, :agency
|
154
|
+
def self.parse(data)
|
155
|
+
route = self.new
|
156
|
+
[:id, :shortName, :longName, :description, :type, :url].each do |attr|
|
157
|
+
value = data.elements[attr.to_s]
|
158
|
+
route.send("#{attr}=", value.text) if value
|
159
|
+
end
|
160
|
+
route.agency = Agency.parse(data.elements["agency"])
|
161
|
+
route
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
class Stop < Base
|
166
|
+
attr_accessor :id, :lat, :lon, :direction, :name, :code, :locationType, :routes
|
167
|
+
def self.parse(data)
|
168
|
+
stop = self.new
|
169
|
+
[:id, :lat, :lon, :direction, :name, :code, :locationType].each do |attr|
|
170
|
+
value = data.elements[attr.to_s]
|
171
|
+
stop.send("#{attr}=", value.text) if value
|
172
|
+
end
|
173
|
+
stop.routes ||= []
|
174
|
+
data.elements.each("routes/route") do |route_el|
|
175
|
+
stop.routes << Route.parse(route_el)
|
176
|
+
end
|
177
|
+
stop
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
data/test/helper.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
begin
|
4
|
+
Bundler.setup(:default, :development)
|
5
|
+
rescue Bundler::BundlerError => e
|
6
|
+
$stderr.puts e.message
|
7
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
+
exit e.status_code
|
9
|
+
end
|
10
|
+
require 'test/unit'
|
11
|
+
require 'shoulda'
|
12
|
+
|
13
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
14
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
15
|
+
require 'onebusaway'
|
16
|
+
|
17
|
+
class Test::Unit::TestCase
|
18
|
+
end
|
data/test/sample_data.rb
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
module Onebusaway
|
2
|
+
module SampleData
|
3
|
+
STOP_DATA = <<EOS
|
4
|
+
<response>
|
5
|
+
<version>1.0</version>
|
6
|
+
<code>200</code>
|
7
|
+
<text>OK</text>
|
8
|
+
<data class="stop">
|
9
|
+
<id>1_10020</id>
|
10
|
+
<lat>47.6685829</lat>
|
11
|
+
<lon>-122.2883</lon>
|
12
|
+
<direction>W</direction>
|
13
|
+
<name>NE 55th St & 37th Ave NE</name>
|
14
|
+
<code>10020</code>
|
15
|
+
<locationType>0</locationType>
|
16
|
+
<routes>
|
17
|
+
<route>
|
18
|
+
<id>1_30</id>
|
19
|
+
<shortName>30</shortName>
|
20
|
+
<description>Sandpoint/U-Dist/Seattle Center</description>
|
21
|
+
<type>3</type>
|
22
|
+
<url>http://metro.kingcounty.gov/tops/bus/schedules/s030_0_.html</url>
|
23
|
+
<agency>
|
24
|
+
<id>1</id>
|
25
|
+
<name>Metro Transit</name>
|
26
|
+
<url>http://metro.kingcounty.gov</url>
|
27
|
+
<timezone>America/Los_Angeles</timezone>
|
28
|
+
<lang>en</lang>
|
29
|
+
<phone>206-553-3000</phone>
|
30
|
+
</agency>
|
31
|
+
</route>
|
32
|
+
<route>
|
33
|
+
<id>1_74</id>
|
34
|
+
<shortName>74</shortName>
|
35
|
+
<description>Sandpoint/U-Dist/CPS</description>
|
36
|
+
<type>3</type>
|
37
|
+
<url>http://metro.kingcounty.gov/tops/bus/schedules/s074_0_.html</url>
|
38
|
+
<agency>
|
39
|
+
<id>1</id>
|
40
|
+
<name>Metro Transit</name>
|
41
|
+
<url>http://metro.kingcounty.gov</url>
|
42
|
+
<timezone>America/Los_Angeles</timezone>
|
43
|
+
<lang>en</lang>
|
44
|
+
<phone>206-553-3000</phone>
|
45
|
+
</agency>
|
46
|
+
</route>
|
47
|
+
</routes>
|
48
|
+
</data>
|
49
|
+
</response>
|
50
|
+
EOS
|
51
|
+
ROUTE_DATA = <<EOS
|
52
|
+
<response>
|
53
|
+
<version>1.0</version>
|
54
|
+
<code>200</code>
|
55
|
+
<text>OK</text>
|
56
|
+
<data class="route">
|
57
|
+
<id>1_30</id>
|
58
|
+
<shortName>30</shortName>
|
59
|
+
|
60
|
+
<description>Sandpoint/U-Dist/Seattle Center</description>
|
61
|
+
<type>3</type>
|
62
|
+
<url>http://metro.kingcounty.gov/tops/bus/schedules/s030_0_.html</url>
|
63
|
+
<agency>
|
64
|
+
<id>1</id>
|
65
|
+
<name>Metro Transit</name>
|
66
|
+
|
67
|
+
<url>http://metro.kingcounty.gov</url>
|
68
|
+
<timezone>America/Los_Angeles</timezone>
|
69
|
+
<lang>en</lang>
|
70
|
+
<phone>206-553-3000</phone>
|
71
|
+
</agency>
|
72
|
+
</data>
|
73
|
+
</response>
|
74
|
+
EOS
|
75
|
+
end
|
76
|
+
end
|
metadata
ADDED
@@ -0,0 +1,138 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: onebusaway
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Jeff Ching
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-11-17 00:00:00 -08:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
prerelease: false
|
23
|
+
name: shoulda
|
24
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
version: "0"
|
33
|
+
requirement: *id001
|
34
|
+
type: :development
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
prerelease: false
|
37
|
+
name: bundler
|
38
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
hash: 23
|
44
|
+
segments:
|
45
|
+
- 1
|
46
|
+
- 0
|
47
|
+
- 0
|
48
|
+
version: 1.0.0
|
49
|
+
requirement: *id002
|
50
|
+
type: :development
|
51
|
+
- !ruby/object:Gem::Dependency
|
52
|
+
prerelease: false
|
53
|
+
name: jeweler
|
54
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ~>
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
hash: 1
|
60
|
+
segments:
|
61
|
+
- 1
|
62
|
+
- 5
|
63
|
+
- 1
|
64
|
+
version: 1.5.1
|
65
|
+
requirement: *id003
|
66
|
+
type: :development
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
prerelease: false
|
69
|
+
name: rcov
|
70
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
71
|
+
none: false
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
hash: 3
|
76
|
+
segments:
|
77
|
+
- 0
|
78
|
+
version: "0"
|
79
|
+
requirement: *id004
|
80
|
+
type: :development
|
81
|
+
description: Unofficial Ruby library for interacting with the OneBusAway API. See http://code.google.com/p/onebusaway/wiki/OneBusAwayRestApi
|
82
|
+
email: ching.jeff@gmail.com
|
83
|
+
executables: []
|
84
|
+
|
85
|
+
extensions: []
|
86
|
+
|
87
|
+
extra_rdoc_files:
|
88
|
+
- LICENSE.txt
|
89
|
+
- README.markdown
|
90
|
+
files:
|
91
|
+
- Gemfile
|
92
|
+
- Gemfile.lock
|
93
|
+
- LICENSE.txt
|
94
|
+
- README.markdown
|
95
|
+
- Rakefile
|
96
|
+
- VERSION
|
97
|
+
- lib/onebusaway.rb
|
98
|
+
- test/helper.rb
|
99
|
+
- test/sample_data.rb
|
100
|
+
- test/unit/test_onebusaway.rb
|
101
|
+
has_rdoc: true
|
102
|
+
homepage: http://github.com/chingor13/onebusaway
|
103
|
+
licenses:
|
104
|
+
- MIT
|
105
|
+
post_install_message:
|
106
|
+
rdoc_options: []
|
107
|
+
|
108
|
+
require_paths:
|
109
|
+
- lib
|
110
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
111
|
+
none: false
|
112
|
+
requirements:
|
113
|
+
- - ">="
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
hash: 3
|
116
|
+
segments:
|
117
|
+
- 0
|
118
|
+
version: "0"
|
119
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
120
|
+
none: false
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
hash: 3
|
125
|
+
segments:
|
126
|
+
- 0
|
127
|
+
version: "0"
|
128
|
+
requirements: []
|
129
|
+
|
130
|
+
rubyforge_project:
|
131
|
+
rubygems_version: 1.3.7
|
132
|
+
signing_key:
|
133
|
+
specification_version: 3
|
134
|
+
summary: Unofficial Ruby library for interacting with the OneBusAway API
|
135
|
+
test_files:
|
136
|
+
- test/helper.rb
|
137
|
+
- test/sample_data.rb
|
138
|
+
- test/unit/test_onebusaway.rb
|