one_bus_away 0.0.1 → 0.0.2
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 +4 -4
- data/.gitignore +1 -0
- data/README.md +10 -1
- data/bin/one-bus-away +13 -9
- data/lib/one_bus_away/version.rb +2 -2
- data/lib/one_bus_away.rb +60 -19
- data/lib/utilities.rb +6 -7
- data/one_bus_away.gemspec +3 -1
- data/spec/one_bus_away_spec.rb +21 -11
- metadata +31 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cb4cdf6f62d4648d4903644aa16332432a8a4da1
|
4
|
+
data.tar.gz: 08ba7dd760a9689cd393d0b64a34aa7493933a8b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 73641a3964d0fd91e848e8c0074a6eb10ee6fc46b6074a146d3ca1ff6cddc6a8f222dc8aea812bb2ad2b631869bc953ac5f65384fb554eaa1b4cad4e27ea431a
|
7
|
+
data.tar.gz: c984fba70ef2f9efcde525ffae6f16ef8ee304c73c57b0e149272b158e2bf2499b67012772faf7b27abeab1299117806eb61ea68b46066741ac2d4f129b064ce
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -17,13 +17,22 @@ And then execute:
|
|
17
17
|
Or install it yourself as:
|
18
18
|
|
19
19
|
$ gem install one_bus_away
|
20
|
+
|
21
|
+
Then you will need to create the file ~/.one_bus_away which contains just your API key which can be requested here: http://pugetsound.onebusaway.org/p/OneBusAwayApiService.action
|
22
|
+
|
23
|
+
$ cat ~/.one_bus_away
|
24
|
+
6xxxxxf7-6ec4-45adsf22-bf33-sdfsdfs
|
25
|
+
|
20
26
|
|
21
27
|
## Usage
|
22
28
|
|
23
29
|
|
24
30
|
one-bus-away arrivals-and-departures-for-stop [stop] [route] [arrival time from now]
|
25
31
|
|
26
|
-
one-bus-away arrivals-and-departures-for-stop
|
32
|
+
$ one-bus-away arrivals-and-departures-for-stop 13721 "D Line" 22
|
33
|
+
The D Line arrives in 4 minutes
|
34
|
+
The D Line arrives in 19 minutes
|
35
|
+
|
27
36
|
## Contributing
|
28
37
|
|
29
38
|
1. Fork it ( https://github.com/ellisandy/one-bus-away-cli/fork )
|
data/bin/one-bus-away
CHANGED
@@ -2,19 +2,22 @@
|
|
2
2
|
|
3
3
|
require 'rubygems'
|
4
4
|
require 'commander/import'
|
5
|
-
require 'one_bus_away'
|
5
|
+
#require 'one_bus_away'
|
6
|
+
require_relative '../lib/one_bus_away'
|
6
7
|
|
7
8
|
program :version, '0.0.1'
|
8
9
|
program :description, 'Simple querying of One Bus Away'
|
9
10
|
|
11
|
+
# puts $LOAD_PATH
|
12
|
+
@one_bus_away = OneBusAway.new(File.read(ENV['HOME']+"/.one_bus_away"))
|
13
|
+
|
10
14
|
command "current-time" do |c|
|
11
15
|
c.syntax = 'one-bus-away current-time'
|
12
16
|
c.summary = 'Get the current system time from One Bus Away'
|
13
17
|
c.description = 'Makes the current_time API call against the One Bus Away API. Simple, Straightforward, Unneeded'
|
14
18
|
c.example '','one-bus-away current-time'
|
15
19
|
c.action do |args, options|
|
16
|
-
puts
|
17
|
-
notify 'Something happened'
|
20
|
+
puts @one_bus_away.current_time
|
18
21
|
end
|
19
22
|
end
|
20
23
|
|
@@ -24,12 +27,13 @@ command "arrivals-and-departures-for-stop" do |c|
|
|
24
27
|
c.description = 'By default, you can get the next available arrival time.'
|
25
28
|
c.example 'description', 'one-bus-away arrivals-and-departures-for-stop [stop] [route] [arrival time from now]'
|
26
29
|
c.action do |args, options|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
30
|
+
arrivals = @one_bus_away.arrivals_and_departures_for_stop(args[0], args[1], args[2])
|
31
|
+
unless arrivals.empty?
|
32
|
+
arrivals.each do |arrival|
|
33
|
+
puts "The #{args[1]} arrives in #{arrival}"
|
34
|
+
end
|
35
|
+
else
|
36
|
+
puts "No buses in that time constrain"
|
33
37
|
end
|
34
38
|
end
|
35
39
|
end
|
data/lib/one_bus_away/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
|
2
|
-
VERSION = "0.0.
|
1
|
+
class OneBusAway
|
2
|
+
VERSION = "0.0.2"
|
3
3
|
end
|
data/lib/one_bus_away.rb
CHANGED
@@ -1,33 +1,74 @@
|
|
1
|
-
|
1
|
+
require_relative "one_bus_away/version"
|
2
2
|
require 'rest-client'
|
3
3
|
require 'utilities'
|
4
|
+
require 'contracts'
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
|
6
|
+
class OneBusAway
|
7
|
+
include Contracts::Core
|
8
|
+
C = Contracts
|
9
|
+
|
10
|
+
Contract String => String
|
11
|
+
def initialize(api_key)
|
12
|
+
@api_key = api_key
|
8
13
|
end
|
9
|
-
|
10
|
-
|
11
|
-
|
14
|
+
|
15
|
+
Contract String
|
16
|
+
def current_time
|
17
|
+
response = RestClient.get("http://api.pugetsound.onebusaway.org/api/where/current-time.json?key=#{@api_key}")
|
12
18
|
json = JSON.parse(response)
|
13
19
|
time = json["data"]["entry"]["time"]
|
14
|
-
return time
|
20
|
+
return time.to_s
|
21
|
+
end
|
22
|
+
|
23
|
+
# Contract C::Num, C::Or[C::Num, String], C::Num => C::ArrayOf[C::Any]
|
24
|
+
def arrivals_and_departures_for_stop(stop, route, time_to_look_for)
|
25
|
+
if valid_stop?(stop) && valid_route?(route)
|
26
|
+
response = RestClient.get("http://api.pugetsound.onebusaway.org/api/where/arrivals-and-departures-for-stop/1_#{stop}.json?key=#{@api_key}&minutesAfter=#{time_to_look_for}")
|
27
|
+
json = JSON.parse(response)
|
28
|
+
arrivalsAndDepartures = json["data"]["entry"]["arrivalsAndDepartures"]
|
29
|
+
|
30
|
+
outputs = []
|
31
|
+
|
32
|
+
arrivalsAndDepartures.each do |bus|
|
33
|
+
if bus["routeShortName"] == route
|
34
|
+
outputs.sort
|
35
|
+
outputs.push(Utilities.convert_time(bus["scheduledDepartureTime"].to_s))
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
return outputs
|
40
|
+
else
|
41
|
+
fail "Either your route or stop is invalid."
|
42
|
+
end
|
43
|
+
|
44
|
+
|
15
45
|
end
|
16
46
|
|
17
|
-
|
18
|
-
|
19
|
-
response = RestClient.get("http://api.pugetsound.onebusaway.org/api/where/
|
47
|
+
# Contract C::Num => C::Bool
|
48
|
+
def valid_stop?(stop_number)
|
49
|
+
response = RestClient.get("http://api.pugetsound.onebusaway.org/api/where/stop-ids-for-agency/1.json?key=#{@api_key}")
|
20
50
|
json = JSON.parse(response)
|
21
|
-
arrivalsAndDepartures = json["data"]["entry"]["arrivalsAndDepartures"]
|
22
51
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
@arrivalsAndDepartures2.push(Utilities.convert_time(bus["scheduledDepartureTime"].to_s))
|
28
|
-
end
|
52
|
+
if json["code"] == 200
|
53
|
+
json["data"]["list"].include? "1_#{stop_number}"
|
54
|
+
else
|
55
|
+
fail "OneBusAway API HTTP response error #{json['code']}"
|
29
56
|
end
|
57
|
+
end
|
58
|
+
|
59
|
+
# Contract C::Or[C::Num, String] => C::Bool
|
60
|
+
def valid_route?(route_name)
|
61
|
+
response = RestClient.get("http://api.pugetsound.onebusaway.org/api/where/routes-for-agency/1.json?key=#{@api_key}")
|
62
|
+
json = JSON.parse(response)
|
30
63
|
|
31
|
-
|
64
|
+
if json["code"] == 200
|
65
|
+
array = []
|
66
|
+
json["data"]["list"].map { |x| array.push x["shortName"] }
|
67
|
+
|
68
|
+
array.include? route_name.to_s
|
69
|
+
else
|
70
|
+
fail "OneBusAway API HTTP response error #{json['code']}"
|
71
|
+
end
|
32
72
|
end
|
73
|
+
|
33
74
|
end
|
data/lib/utilities.rb
CHANGED
@@ -1,22 +1,21 @@
|
|
1
1
|
require("date")
|
2
|
-
|
3
2
|
class Utilities
|
4
3
|
def self.convert_time(time)
|
5
4
|
stripped_time = self.strip_time(time)
|
6
|
-
|
5
|
+
|
7
6
|
converted_date = DateTime.strptime(stripped_time,"%s")
|
8
|
-
|
7
|
+
|
9
8
|
new_time = converted_date.to_time#.strftime "%I:%M %P"
|
10
9
|
distance_of_time_in_hours_and_minutes(new_time, Time.now)
|
11
10
|
end
|
12
|
-
|
11
|
+
|
13
12
|
def self.strip_time(time_to_strip)
|
14
13
|
n = time_to_strip.size
|
15
14
|
stripped_time = time_to_strip[0..n-4]
|
16
15
|
return stripped_time
|
17
|
-
|
16
|
+
|
18
17
|
end
|
19
|
-
|
18
|
+
|
20
19
|
def self.distance_of_time_in_hours_and_minutes(from_time, to_time)
|
21
20
|
from_time = from_time.to_time if from_time.respond_to?(:to_time)
|
22
21
|
to_time = to_time.to_time if to_time.respond_to?(:to_time)
|
@@ -30,4 +29,4 @@ class Utilities
|
|
30
29
|
words << "#{hours} #{hours > 1 ? 'hours' : 'hour' } and " if hours > 0
|
31
30
|
words << "#{minutes} #{minutes == 1 ? 'minute' : 'minutes' }"
|
32
31
|
end
|
33
|
-
end
|
32
|
+
end
|
data/one_bus_away.gemspec
CHANGED
@@ -21,7 +21,9 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.7"
|
22
22
|
spec.add_development_dependency "rake", "~> 10.0"
|
23
23
|
spec.add_development_dependency "rspec", "~> 3.2"
|
24
|
+
spec.add_development_dependency "contracts"
|
24
25
|
spec.add_development_dependency "guard-rspec", "~> 4.5"
|
26
|
+
spec.add_development_dependency "terminal-notifier-guard"
|
25
27
|
spec.add_dependency('commander')
|
26
28
|
spec.add_dependency('rest-client')
|
27
|
-
end
|
29
|
+
end
|
data/spec/one_bus_away_spec.rb
CHANGED
@@ -1,24 +1,34 @@
|
|
1
1
|
require 'one_bus_away'
|
2
2
|
|
3
3
|
RSpec.describe OneBusAway do
|
4
|
-
|
5
|
-
it
|
6
|
-
expect(
|
4
|
+
describe '.new' do
|
5
|
+
it 'should raise error without arguements' do
|
6
|
+
expect { OneBusAway.new() }.to raise_error
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'should accept API_KEY as arguement' do
|
10
|
+
expect { OneBusAway.new("somestring")}.not_to raise_error
|
7
11
|
end
|
8
12
|
end
|
9
13
|
|
10
|
-
|
11
|
-
|
12
|
-
|
14
|
+
describe '#current_time' do
|
15
|
+
let(:one_bus_away) { OneBusAway.new("6a1c72f7-6ec4-4522-bf33-3698b3ad86c2") }
|
16
|
+
it 'returns true' do
|
17
|
+
expect { one_bus_away.current_time }.not_to raise_error
|
13
18
|
end
|
14
|
-
|
15
|
-
|
19
|
+
end
|
20
|
+
|
21
|
+
describe '#arrivals_and_departures_for_stop' do
|
22
|
+
let(:one_bus_away) { OneBusAway.new("6a1c72f7-6ec4-4522-bf33-3698b3ad86c2") }
|
23
|
+
it 'returns true' do
|
24
|
+
expect { one_bus_away.arrivals_and_departures_for_stop(18145, "40", 10) }.not_to raise_error
|
16
25
|
end
|
17
26
|
end
|
18
27
|
|
19
|
-
|
20
|
-
|
21
|
-
|
28
|
+
describe '#valid_stop?' do
|
29
|
+
let(:one_bus_away) { OneBusAway.new("6a1c72f7-6ec4-4522-bf33-3698b3ad86c2") }
|
30
|
+
it 'returns true' do
|
31
|
+
expect { one_bus_away.valid_stop?(18145) }.not_to raise_error
|
22
32
|
end
|
23
33
|
end
|
24
34
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: one_bus_away
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jack Ellis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-17 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'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: contracts
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: guard-rspec
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,6 +80,20 @@ dependencies:
|
|
66
80
|
- - "~>"
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '4.5'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: terminal-notifier-guard
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
69
97
|
- !ruby/object:Gem::Dependency
|
70
98
|
name: commander
|
71
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -144,3 +172,4 @@ summary: Simple Gem to query One Bus Away API
|
|
144
172
|
test_files:
|
145
173
|
- spec/one_bus_away_spec.rb
|
146
174
|
- spec/spec_helper.rb
|
175
|
+
has_rdoc:
|