dcmetro 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/bin/dcmetro +10 -2
- data/dcmetro.gemspec +3 -3
- data/lib/dcmetro/cli/application.rb +28 -1
- data/lib/dcmetro/version.rb +11 -1
- data/lib/dcmetro.rb +54 -14
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 26b4e560cc10b94ec132c545fdfbaf56ab923126
|
4
|
+
data.tar.gz: 10e8f6c5602fe8de59a982a6f31d4880be270623
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5e321972a4fecd6ba6b16d6f3ff47ed1a199f7aebbf266fbccf8072af52ecfd979b80a2413f6b09ab522017d9c270878a838be281073f881b81a255727de1d85
|
7
|
+
data.tar.gz: 345a453a721b5583d19c4e96bdc7ab550d92133ddb62ecba4f00dd97df92b3fac7d6fb9ea5f54e2efd787fbe391d9f7440db4d5e9da4005f9e16309dd3946f40
|
data/bin/dcmetro
CHANGED
@@ -1,7 +1,16 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
|
3
|
+
# You need to set an ENV variable in the shell which will be the Api Key.
|
4
|
+
# It is free from WMATA, https://developer.wmata.com/
|
5
|
+
# Referenced below was the old generic key used for testing the API on WMATA's site.
|
6
|
+
# Since api keys are free I would suggest registering for one, the rate limit is
|
7
|
+
# 10 calls/second, 50,000 calls/day which is pretty good. The generic key below had
|
8
|
+
# significant limits
|
9
|
+
#
|
10
|
+
#
|
11
|
+
API_KEY=ENV['DCMETRO_KEY'] #generic developer's key "kfgpmgvfgacx98de9q3xazww"
|
4
12
|
|
13
|
+
# The below colors are for experimenting with providing color
|
5
14
|
# Color Reset
|
6
15
|
COLOR_OFF="\033[0m" # Text Reset
|
7
16
|
|
@@ -14,6 +23,5 @@ YELLOW="\033[0;93m" # IYellow
|
|
14
23
|
BLUE="\033[0;94m" # IBlue
|
15
24
|
|
16
25
|
require 'dcmetro'
|
17
|
-
# require_relative "dcmetro/cli/application"
|
18
26
|
|
19
27
|
DCMetro::Cli::Application.start(ARGV)
|
data/dcmetro.gemspec
CHANGED
@@ -9,8 +9,8 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.authors = ["Ken Crocken"]
|
10
10
|
spec.email = ["kcrocken@gmail.com"]
|
11
11
|
spec.summary = %q{Returns DC Metro information, including train schedules.}
|
12
|
-
|
13
|
-
spec.homepage = ""
|
12
|
+
spec.description = %q{Returns DC Metro information, including train schedules.}
|
13
|
+
spec.homepage = "https://github.com/kencrocken/dcmetro"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0")
|
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_dependency 'thor', '~> 0.18'
|
22
22
|
spec.add_dependency 'json'
|
23
|
-
spec.add_dependency '
|
23
|
+
spec.add_dependency 'rest-client'
|
24
24
|
|
25
25
|
spec.add_development_dependency "bundler", "~> 1.6"
|
26
26
|
spec.add_development_dependency "rake"
|
@@ -2,18 +2,32 @@ require 'thor'
|
|
2
2
|
require 'json'
|
3
3
|
require 'rest_client'
|
4
4
|
|
5
|
+
#
|
6
|
+
# This is the command line interface using Thor
|
7
|
+
|
5
8
|
module DCMetro
|
6
9
|
module Cli
|
7
10
|
class Application < Thor
|
8
11
|
|
9
12
|
desc 'alerts', 'Display DC Metro system wide alerts.'
|
10
13
|
def alerts
|
14
|
+
#
|
15
|
+
# $dcmetro alerts
|
16
|
+
# => *** Alert! Alert! ***
|
17
|
+
|
11
18
|
x = DCMetro::Information.new
|
12
19
|
display_alerts x.alerts
|
13
20
|
end
|
14
21
|
|
15
22
|
desc 'line COLOR', 'Display metro rail lines, if COLOR, displays rail stations on the COLOR line'
|
16
23
|
def line color=nil
|
24
|
+
#
|
25
|
+
# $dcmetro line
|
26
|
+
# => Orange, Blue, Silver, Red, etc ...
|
27
|
+
#
|
28
|
+
# $dcmetro line Red
|
29
|
+
# => Displays the stations on the Red Line
|
30
|
+
|
17
31
|
x = DCMetro::Information.new
|
18
32
|
|
19
33
|
if !color.nil?
|
@@ -26,6 +40,14 @@ module DCMetro
|
|
26
40
|
desc 'station NAME', 'Display metro station train arrival and departure times.'
|
27
41
|
method_option :alerts, :aliases => '-a', :type => :boolean, :description => "Display Metro wide alerts."
|
28
42
|
def station(name)
|
43
|
+
#
|
44
|
+
# $dcmetro station Greenbelt
|
45
|
+
# => Displays the departure and arrival times at the Greenbelt Station
|
46
|
+
#
|
47
|
+
# $dcmetro station Greenbelt -a
|
48
|
+
# => Displays the alerts, departure and arrival times at the Greenbelt Station
|
49
|
+
#
|
50
|
+
|
29
51
|
x = DCMetro::Information.new
|
30
52
|
|
31
53
|
if options[:alerts]
|
@@ -37,7 +59,6 @@ module DCMetro
|
|
37
59
|
train_time = x['Trains'].empty? ? "Sorry, there is no information for #{name}." : display_trains(x['Trains'])
|
38
60
|
puts train_time if !train_time.kind_of?(Array)
|
39
61
|
train_time
|
40
|
-
|
41
62
|
end
|
42
63
|
|
43
64
|
private
|
@@ -45,6 +66,9 @@ module DCMetro
|
|
45
66
|
no_commands do
|
46
67
|
|
47
68
|
def display_alerts alerts
|
69
|
+
#
|
70
|
+
# Formats the display of the alerts
|
71
|
+
|
48
72
|
if alerts['Incidents'].empty?
|
49
73
|
puts "*** No alerts reported. ***"
|
50
74
|
else
|
@@ -54,6 +78,9 @@ module DCMetro
|
|
54
78
|
end
|
55
79
|
|
56
80
|
def display_trains trains
|
81
|
+
#
|
82
|
+
# Formats the display of the train arrival and departures
|
83
|
+
|
57
84
|
puts "===== #{trains[0]['LocationName']} ====="
|
58
85
|
trains.each do |prediction|
|
59
86
|
puts "Line: #{prediction['Line']} | Towards: #{prediction['DestinationName']} | Arriving: #{prediction['Min']}"
|
data/lib/dcmetro/version.rb
CHANGED
@@ -1,3 +1,13 @@
|
|
1
1
|
module Dcmetro
|
2
|
-
VERSION = "0.0.
|
2
|
+
VERSION = "0.0.2"
|
3
3
|
end
|
4
|
+
|
5
|
+
### Changes in 0.0.2
|
6
|
+
#
|
7
|
+
# Updates the api calls to the new format
|
8
|
+
#
|
9
|
+
# Fixes a bug if multiple stations are returned
|
10
|
+
#
|
11
|
+
# Requires the use of an env variable for the API key
|
12
|
+
#
|
13
|
+
# Requires rest-client
|
data/lib/dcmetro.rb
CHANGED
@@ -6,21 +6,28 @@ module DCMetro
|
|
6
6
|
attr_accessor :metro_incidents, :metro_lines, :metro_stations, :station_code, :metro_time
|
7
7
|
|
8
8
|
def initialize
|
9
|
-
@metro_incidents = JSON.parse(RestClient.get "http://api.wmata.com/Incidents.svc/json/Incidents?api_key=#{API_KEY}")
|
10
|
-
@metro_lines = JSON.parse(RestClient.get "http://api.wmata.com/Rail.svc/json/JLines?api_key=#{API_KEY}")
|
9
|
+
@metro_incidents = JSON.parse(RestClient.get "http://api.wmata.com/Incidents.svc/json/Incidents?api_key=#{API_KEY}&subscription-key=#{API_KEY}")
|
10
|
+
@metro_lines = JSON.parse(RestClient.get "http://api.wmata.com/Rail.svc/json/JLines?api_key=#{API_KEY}&subscription-key=#{API_KEY}")
|
11
11
|
@metro_stations = metro_stations
|
12
12
|
@station_code = ""
|
13
13
|
@metro_time = metro_time
|
14
14
|
end
|
15
15
|
|
16
16
|
def alerts
|
17
|
+
#
|
18
|
+
# Makes the api call and returns the alerts
|
19
|
+
|
17
20
|
@metro_incidents
|
18
21
|
end ### alerts
|
19
22
|
|
20
23
|
def line(color=nil)
|
24
|
+
#
|
25
|
+
# Makes the api call and returns either the stations on a particular line or
|
26
|
+
# if no color is passed, returns the metro lines
|
27
|
+
|
21
28
|
if !color.nil?
|
22
29
|
color = color.downcase
|
23
|
-
@metro_stations = JSON.parse(RestClient.get "http://api.wmata.com/Rail.svc/json/jStations?LineCode=#{color}&api_key=#{API_KEY}")
|
30
|
+
@metro_stations = JSON.parse(RestClient.get "http://api.wmata.com/Rail.svc/json/jStations?LineCode=#{color}&api_key=#{API_KEY}&subscription-key=#{API_KEY}")
|
24
31
|
@metro_stations['Stations']
|
25
32
|
else
|
26
33
|
@metro_lines['Lines']
|
@@ -28,21 +35,59 @@ module DCMetro
|
|
28
35
|
end ### line
|
29
36
|
|
30
37
|
def station(name)
|
31
|
-
|
38
|
+
#
|
39
|
+
# Makes the api call to return all stations in the Metro rail system and
|
40
|
+
# then grabs the specific station passed by the user
|
41
|
+
|
42
|
+
# instantiates a new array to help check for multiple matching stations
|
43
|
+
stations_check = []
|
44
|
+
|
45
|
+
# forming the api call
|
46
|
+
url = "https://api.wmata.com/Rail.svc/json/jStations?api_key=#{API_KEY}&subscription-key=#{API_KEY}"
|
32
47
|
@metro_stations = JSON.parse(RestClient.get "#{url}")
|
48
|
+
|
49
|
+
# Iterates through the response checking if the station name passed by the user
|
50
|
+
# is included in the return response
|
33
51
|
@metro_stations['Stations'].each do |station_name|
|
34
52
|
if station_name['Name'].downcase.include? name.downcase
|
35
|
-
|
36
|
-
|
53
|
+
|
54
|
+
# if the names of the station matches the user's station, the station
|
55
|
+
# is pushed to an array
|
56
|
+
stations_check.push(station_name)
|
37
57
|
end
|
38
58
|
end
|
59
|
+
|
60
|
+
# Oddly, the api seems to return some stations twice - since some stations have more than
|
61
|
+
# one line. Though the additional station information is contained in each instance of the
|
62
|
+
# station.
|
63
|
+
# We limit our array to only unique station names, hopefully limiting the array to a single item
|
64
|
+
stations_check.uniq! { |station| station['Name'] }
|
65
|
+
|
66
|
+
# If the array length is greater than 1, we ask the user to be more specific and
|
67
|
+
# return the names of the stations
|
68
|
+
if stations_check.length > 1
|
69
|
+
puts "****Multiple stations found****"
|
70
|
+
stations_check.each do |station|
|
71
|
+
puts station['Name']
|
72
|
+
puts station
|
73
|
+
end
|
74
|
+
abort "****Please be more specific****"
|
75
|
+
else
|
76
|
+
# We pass the station the station_time method to grab the predictions
|
77
|
+
station_time stations_check[0]
|
78
|
+
end
|
39
79
|
end ### station
|
40
80
|
|
41
81
|
private
|
42
82
|
|
83
|
+
#
|
84
|
+
# This makes an api call to grab the train arrival and departure predictions.
|
85
|
+
# If more than one line is present at a station, such is concatenated and
|
86
|
+
# the call is made on all lines.
|
87
|
+
|
43
88
|
def station_time(station)
|
44
89
|
|
45
|
-
#
|
90
|
+
# If a station has multiple stations codes we join the codes together
|
46
91
|
@station_code = station['Code']
|
47
92
|
if !station['StationTogether1'].empty?
|
48
93
|
@station_code += ",#{station['StationTogether1']}"
|
@@ -50,18 +95,13 @@ module DCMetro
|
|
50
95
|
if !station['StationTogether2'].empty?
|
51
96
|
@station_code += ",#{station['StationTogether2']}"
|
52
97
|
end
|
53
|
-
# p @station_code.class
|
54
|
-
# @station_code = @station_code[1].nil? ? @station_code[0] : @station_code.join(",")
|
55
98
|
|
56
|
-
#
|
57
|
-
url = "http://api.wmata.com/StationPrediction.svc/json/GetPrediction/#{@station_code}?api_key=#{API_KEY}"
|
58
|
-
# p url
|
99
|
+
# The call to the api is made and the prediction times are returned
|
100
|
+
url = "http://api.wmata.com/StationPrediction.svc/json/GetPrediction/#{@station_code}?api_key=#{API_KEY}&subscription-key=#{API_KEY}"
|
59
101
|
@metro_time = JSON.parse(RestClient.get "#{url}")
|
60
|
-
# p @metro_time
|
61
102
|
@metro_time
|
62
103
|
end
|
63
104
|
|
64
|
-
|
65
105
|
end ### Information
|
66
106
|
|
67
107
|
end ### Metro
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dcmetro
|
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
|
- Ken Crocken
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-07-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: rest-client
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
@@ -80,7 +80,7 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
-
description:
|
83
|
+
description: Returns DC Metro information, including train schedules.
|
84
84
|
email:
|
85
85
|
- kcrocken@gmail.com
|
86
86
|
executables:
|
@@ -98,7 +98,7 @@ files:
|
|
98
98
|
- lib/dcmetro.rb
|
99
99
|
- lib/dcmetro/cli/application.rb
|
100
100
|
- lib/dcmetro/version.rb
|
101
|
-
homepage:
|
101
|
+
homepage: https://github.com/kencrocken/dcmetro
|
102
102
|
licenses:
|
103
103
|
- MIT
|
104
104
|
metadata: {}
|
@@ -118,7 +118,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
118
118
|
version: '0'
|
119
119
|
requirements: []
|
120
120
|
rubyforge_project:
|
121
|
-
rubygems_version: 2.
|
121
|
+
rubygems_version: 2.4.5
|
122
122
|
signing_key:
|
123
123
|
specification_version: 4
|
124
124
|
summary: Returns DC Metro information, including train schedules.
|