route_c 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +13 -5
- data/.travis.yml +19 -4
- data/buttons.rb +8 -0
- data/config/config.yaml +0 -1
- data/fixtures/rspec/vcr/RouteC_CLI/lights_lights_on_button_press.yml +42 -0
- data/fixtures/rspec/vcr/RouteC_CLI/lights_the_lights.yml +42 -0
- data/fixtures/rspec/vcr/RouteC_CLI/returns_an_array.yml +42 -0
- data/fixtures/rspec/vcr/RouteC_Query/gets_some_json.yml +1 -1
- data/fixtures/rspec/vcr/RouteC_Query/gets_the_average_occupancy.yml +1 -1
- data/fixtures/rspec/vcr/RouteC_Query/light_the_elements/as_an_array/returns_an_array_for_an_average_of_18_.yml +1 -1
- data/fixtures/rspec/vcr/RouteC_Query/lights_the_lights.yml +42 -0
- data/lib/route_c.rb +4 -75
- data/lib/route_c/cli.rb +41 -0
- data/lib/route_c/lights.rb +32 -0
- data/lib/route_c/query.rb +56 -0
- data/lib/route_c/version.rb +1 -1
- data/routec.init.d.example +30 -0
- metadata +38 -30
checksums.yaml
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
YWZkNTUxODU1MjcxM2Y5OGNkZWM3NWE4MGI2ZDRhNjc1NDIxYTljOQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
ZThlODk4ZWQ3OWEwOWIzZDM5OTg0NmM3NzZhODM1MDljNWUyNWQ1OA==
|
5
7
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
NDQyNjJhOGQxYWZmYTdkOWE0Y2IxZGFjMDM0NmQwZDdmOGQ1ZDVhMjNhMDZj
|
10
|
+
YWZhN2EzMjY3N2VjZGUwZGEwMDViN2RhYzc1OWIxMDcwNjQ2Y2I0ZGZjOTc4
|
11
|
+
MmNkYjAxNzY5OWVmZjcyZmE4YzgyNjEyMzYwNGVlZmM5MGU0YTk=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
NzdmYmU5ODkzODdjMDZjNjgwMjQ0ZmM0NzcyNDZkNzQyNDgxYTdlYmM2Yzlm
|
14
|
+
ZDkzZTJkYzE5MDIzNDRkY2IwNDlhNjgyMDMzYTRhYzlkNDNkZmFmNGFkMzMy
|
15
|
+
MDBjNmRmMzAwYjBiN2YwYjFiODhmNWY3YmQxNGQzYWQ3YzdiZjk=
|
data/.travis.yml
CHANGED
@@ -1,9 +1,24 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
-
|
4
|
-
|
3
|
+
- 2.3.0
|
4
|
+
- 2.1.5
|
5
5
|
before_install: gem install bundler -v 1.11.2
|
6
6
|
env:
|
7
7
|
global:
|
8
|
-
|
9
|
-
|
8
|
+
- SIR_HANDEL_USERNAME=foo
|
9
|
+
- SIR_HANDEL_PASSWORD=bar
|
10
|
+
- secure: uXgk++CEZft7nv8Qw3YwWTwJ3pGlnmaVLra3lv1GCwkIFZJZn/B2MSMlVsQbOK4h/ABsLif3gu+L4lvAXzwLOK6n6DfRCkdj3KZ/nEbLZoxTZqxSe/w1g74Dt009Ty4Vcz0881hMgK9WfoycELPc03Oscb31cQpVwgwaZ9imjQzoqqf+b/weF0CWCOKQLcDUjrmpiTwCR7R15FoTuLfbss9lT5FEWnuX4f5VPH2GN7ROL4T8GcatLGG2t0XPqAlfK4sFqBbJn931KX2IM0EY1GmcBkpvoO7y7YCspDm6/PJAFc0t93pKehqVZsUDzC5Jc/9pXZJwOEoBTB1stj0mWZqAWk7E0oEsJrryuu6hcXk/MOOOTQ6iat4EB2rmCnj1pY+2aIRIms9VFWplKjG42CcHKwVYy4LCCwR4UpI982k6EzVt9Heq9FyNj0OsWTtjpTFjSPAFhv16BzF9bUm1Um8Nk61L0OWVnOBJGlqyQegQcRMZ1/wr2r6RVP2GOz/JhFqQCDHlDsJY0Y1jiwzbcqJha0ksAA9TJ01rWES4qPwSUkH7TRo3b8qS+4xc9ZZDBIkZ+RFuB6hmLukbCisBSKqNN9wJmLq/UBClKi78boG6PdlH6X/MfSCwtb1IBk5c2xWCxQcJv6gyqRmSVBL5AiqoBdc0lxmvGrS5ZgQsco4=
|
11
|
+
- secure: cesErL4ZY53X15gemEF+7EJmk7XnGhx2ktDpl7wH55UMFLaKee7m1t17qdb+gOLw0H82Z8iDtCU9iCmi542Ns/ZHd7S/UH4G492o8sP5f+a1Ad9vCj1MnYrcvLk+wuexlFAlCal5RVGEDKY7HwYItLUFScbPAqVteO7Xy0GyVLtceUJ9y3jhSH3bUekSZsNQ0vPJzB4p0CdRrp28FnqgvHzOc83xX0D4vg6jpxsXH+X7+PlMJX+00yHFZBizTUXHxv7Os3Uj7toM7iOLEG6ULtebvryqAyovjYHChTiz3dFQIzRO4+MzZFjWGnY+tIyY9lzF66yvYX7VfFf0gB3/EhrFxCo8SZBIIY5n5yf9Q7aq1iBRVII0qvQbz3AoAlSNAvASSD0e8Q/Zvf7boO0iD+Geywvb18/T9/9EYMvhJba+22qTRZtT6sGMLYIsPIb9GM1DQ7+gtpWHFlMTYCwoMJRoVT/2pw0qqUJvCZE8iumD/l/6M/pnW7biHrRRBwZ8zeOj4ovBlj3LxIFDwWKNrLvH2KU3qasJYfQNRBIJUK8bGrZCCWE0riNp+uQB5Z1x6OtPkIAnkgPkWACAhcOy/Jr8nYZPtwmKY0+6/rTfXZFwTshvZD6kw9xPEdoTf9001jdquUnKLqQsHf0vYU0+MeusqJHaGkncAjffMmwvPIk=
|
12
|
+
after_success:
|
13
|
+
- export GEM_VERSION=`ruby -e "puts Gem::Specification.load(Dir['*.gemspec'].first).version.to_s"`
|
14
|
+
- '[ "$TRAVIS_BRANCH" == "master" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ] && curl
|
15
|
+
-v -X POST -d ''{"ref":"refs/tags/''$GEM_VERSION''","sha":"''$TRAVIS_COMMIT''"}'' --header
|
16
|
+
"Content-Type:application/json" -u $GITHUB_USER:$GITHUB_PASSWORD "https://api.github.com/repos/$TRAVIS_REPO_SLUG/git/refs"'
|
17
|
+
deploy:
|
18
|
+
provider: rubygems
|
19
|
+
api_key:
|
20
|
+
secure: nJWVa1ICOlD46KXaVlSJ9DQWdaaZii42e5tZo2LHutldII1rXouQGh/wNTWnvvBBmqei3OrH/pGkZMTc50POkhWyfRbEbSUZaLNgpttBQjwWnas+t5jgc9ShB20fPvk9OMb+e3CPZyGLj55p3t9/CO5gErSyVPFY0Cur4GQs+FLi95rzp5msTknWVoMGWKdnR6UBERitaIT8mohcBhx1i9ftCwulntk9DAaR0I/kaU9OdFmUvG5dIPbisx98enRDNVscc+k8rg9WhG1VFYTA4XYGTNV9I4t3/HdPZVZz5EBA8p4qSoYWTlfxaniikUm3iq+k9l2kSojLQeacnfpmQDCVrM0IwwZclpdu9y142MB8g9DLUtqtaPGRW8ezxM/3Syo/tBMmoY6ObEOtLxpH8CpGqDQTTwCVKxq1QfSEpczpBY8y4Lkok79+CyIzByM61fWjOHy8nt0ZokTv0mCOVHD/MqER/IFujyq6Ad5+g/yUUU/BRpze3UxkUE7xn6+Mm/cOs01Qg+aPuyeN6aQa1YHe4XU2EXYX8lZXlfsHTIgovuEDlnklridj975tDI5gPxK2pG/44OMqtI0yygOtANKrwUPDe0RttnFpWI3kqdFCgTTg06mnR3TzcruCvgEMkSJkrP0j4AY7B7tgI7xUpJivQQsUvRK1Vj41fKgBe9A=
|
21
|
+
gem: route_c
|
22
|
+
on:
|
23
|
+
tags: true
|
24
|
+
repo: TheODI-UD2D/route_c
|
data/buttons.rb
ADDED
data/config/config.yaml
CHANGED
@@ -0,0 +1,42 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://<SIR_HANDEL_USERNAME>:<SIR_HANDEL_PASSWORD>@goingunderground.herokuapp.com/stations/arriving/southbound/euston/2015-09-23T7:48:00.json
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept-Encoding:
|
11
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
12
|
+
Accept:
|
13
|
+
- "*/*"
|
14
|
+
User-Agent:
|
15
|
+
- Ruby
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
21
|
+
Server:
|
22
|
+
- Cowboy
|
23
|
+
Date:
|
24
|
+
- Mon, 29 Feb 2016 10:42:55 GMT
|
25
|
+
Connection:
|
26
|
+
- keep-alive
|
27
|
+
Content-Type:
|
28
|
+
- application/json
|
29
|
+
Vary:
|
30
|
+
- Accept
|
31
|
+
X-Content-Type-Options:
|
32
|
+
- nosniff
|
33
|
+
Content-Length:
|
34
|
+
- '832'
|
35
|
+
Via:
|
36
|
+
- 1.1 vegur
|
37
|
+
body:
|
38
|
+
encoding: UTF-8
|
39
|
+
string: '[[{"segment":1193,"number":0,"timeStamp":"2015-09-23T07:11:42.012Z"},{"CAR_A":97.02272727272727,"CAR_B":80.56989247311827,"CAR_C":66.51315789473684,"CAR_D":73.3768115942029}],[{"segment":1193,"number":0,"timeStamp":"2015-09-22T23:07:11.575Z"},{"CAR_A":16.650602409638555,"CAR_B":10.929577464788732,"CAR_C":15.414285714285715,"CAR_D":15.185714285714285}],[{"segment":1193,"number":0,"timeStamp":"2015-09-22T21:50:17.475Z"},{"CAR_A":27.041666666666668,"CAR_B":21.36,"CAR_C":13.95,"CAR_D":6.521739130434782}],[{"segment":1193,"number":0,"timeStamp":"2015-09-22T16:50:48.528Z"},{"CAR_A":41.75,"CAR_B":32.36363636363637,"CAR_C":26.11111111111111,"CAR_D":27.11111111111111}],[{"segment":1193,"number":0,"timeStamp":"2015-09-22T15:42:26.012Z"},{"CAR_A":34.05494505494506,"CAR_B":24.7,"CAR_C":14.582089552238806,"CAR_D":6.943661971830986}]]'
|
40
|
+
http_version:
|
41
|
+
recorded_at: Wed, 23 Sep 2015 06:48:00 GMT
|
42
|
+
recorded_with: VCR 3.0.1
|
@@ -0,0 +1,42 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://<SIR_HANDEL_USERNAME>:<SIR_HANDEL_PASSWORD>@goingunderground.herokuapp.com/stations/arriving/southbound/euston/2015-09-23T7:48:00.json
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept-Encoding:
|
11
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
12
|
+
Accept:
|
13
|
+
- "*/*"
|
14
|
+
User-Agent:
|
15
|
+
- Ruby
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
21
|
+
Server:
|
22
|
+
- Cowboy
|
23
|
+
Date:
|
24
|
+
- Mon, 29 Feb 2016 10:34:50 GMT
|
25
|
+
Connection:
|
26
|
+
- keep-alive
|
27
|
+
Content-Type:
|
28
|
+
- application/json
|
29
|
+
Vary:
|
30
|
+
- Accept
|
31
|
+
X-Content-Type-Options:
|
32
|
+
- nosniff
|
33
|
+
Content-Length:
|
34
|
+
- '832'
|
35
|
+
Via:
|
36
|
+
- 1.1 vegur
|
37
|
+
body:
|
38
|
+
encoding: UTF-8
|
39
|
+
string: '[[{"segment":1193,"number":0,"timeStamp":"2015-09-23T07:11:42.012Z"},{"CAR_A":97.02272727272727,"CAR_B":80.56989247311827,"CAR_C":66.51315789473684,"CAR_D":73.3768115942029}],[{"segment":1193,"number":0,"timeStamp":"2015-09-22T23:07:11.575Z"},{"CAR_A":16.650602409638555,"CAR_B":10.929577464788732,"CAR_C":15.414285714285715,"CAR_D":15.185714285714285}],[{"segment":1193,"number":0,"timeStamp":"2015-09-22T21:50:17.475Z"},{"CAR_A":27.041666666666668,"CAR_B":21.36,"CAR_C":13.95,"CAR_D":6.521739130434782}],[{"segment":1193,"number":0,"timeStamp":"2015-09-22T16:50:48.528Z"},{"CAR_A":41.75,"CAR_B":32.36363636363637,"CAR_C":26.11111111111111,"CAR_D":27.11111111111111}],[{"segment":1193,"number":0,"timeStamp":"2015-09-22T15:42:26.012Z"},{"CAR_A":34.05494505494506,"CAR_B":24.7,"CAR_C":14.582089552238806,"CAR_D":6.943661971830986}]]'
|
40
|
+
http_version:
|
41
|
+
recorded_at: Wed, 23 Sep 2015 06:48:00 GMT
|
42
|
+
recorded_with: VCR 3.0.1
|
@@ -0,0 +1,42 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://<SIR_HANDEL_USERNAME>:<SIR_HANDEL_PASSWORD>@goingunderground.herokuapp.com/stations/arriving/southbound/euston/2015-09-23T7:48:00.json
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept-Encoding:
|
11
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
12
|
+
Accept:
|
13
|
+
- "*/*"
|
14
|
+
User-Agent:
|
15
|
+
- Ruby
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
21
|
+
Server:
|
22
|
+
- Cowboy
|
23
|
+
Date:
|
24
|
+
- Mon, 29 Feb 2016 10:34:50 GMT
|
25
|
+
Connection:
|
26
|
+
- keep-alive
|
27
|
+
Content-Type:
|
28
|
+
- application/json
|
29
|
+
Vary:
|
30
|
+
- Accept
|
31
|
+
X-Content-Type-Options:
|
32
|
+
- nosniff
|
33
|
+
Content-Length:
|
34
|
+
- '832'
|
35
|
+
Via:
|
36
|
+
- 1.1 vegur
|
37
|
+
body:
|
38
|
+
encoding: UTF-8
|
39
|
+
string: '[[{"segment":1193,"number":0,"timeStamp":"2015-09-23T07:11:42.012Z"},{"CAR_A":97.02272727272727,"CAR_B":80.56989247311827,"CAR_C":66.51315789473684,"CAR_D":73.3768115942029}],[{"segment":1193,"number":0,"timeStamp":"2015-09-22T23:07:11.575Z"},{"CAR_A":16.650602409638555,"CAR_B":10.929577464788732,"CAR_C":15.414285714285715,"CAR_D":15.185714285714285}],[{"segment":1193,"number":0,"timeStamp":"2015-09-22T21:50:17.475Z"},{"CAR_A":27.041666666666668,"CAR_B":21.36,"CAR_C":13.95,"CAR_D":6.521739130434782}],[{"segment":1193,"number":0,"timeStamp":"2015-09-22T16:50:48.528Z"},{"CAR_A":41.75,"CAR_B":32.36363636363637,"CAR_C":26.11111111111111,"CAR_D":27.11111111111111}],[{"segment":1193,"number":0,"timeStamp":"2015-09-22T15:42:26.012Z"},{"CAR_A":34.05494505494506,"CAR_B":24.7,"CAR_C":14.582089552238806,"CAR_D":6.943661971830986}]]'
|
40
|
+
http_version:
|
41
|
+
recorded_at: Wed, 23 Sep 2015 06:48:00 GMT
|
42
|
+
recorded_with: VCR 3.0.1
|
@@ -0,0 +1,42 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://<SIR_HANDEL_USERNAME>:<SIR_HANDEL_PASSWORD>@goingunderground.herokuapp.com/stations/arriving/southbound/euston/2015-09-23T16:20:00.json
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept-Encoding:
|
11
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
12
|
+
Accept:
|
13
|
+
- "*/*"
|
14
|
+
User-Agent:
|
15
|
+
- Ruby
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
21
|
+
Server:
|
22
|
+
- Cowboy
|
23
|
+
Date:
|
24
|
+
- Mon, 29 Feb 2016 10:34:51 GMT
|
25
|
+
Connection:
|
26
|
+
- keep-alive
|
27
|
+
Content-Type:
|
28
|
+
- application/json
|
29
|
+
Vary:
|
30
|
+
- Accept
|
31
|
+
X-Content-Type-Options:
|
32
|
+
- nosniff
|
33
|
+
Content-Length:
|
34
|
+
- '1728'
|
35
|
+
Via:
|
36
|
+
- 1.1 vegur
|
37
|
+
body:
|
38
|
+
encoding: UTF-8
|
39
|
+
string: '[[{"segment":1193,"number":0,"timeStamp":"2015-09-23T16:08:39.575Z"},{"CAR_A":29.443181818181817,"CAR_B":17.266666666666666,"CAR_C":12.931506849315069,"CAR_D":13.32857142857143}],[{"segment":1193,"number":0,"timeStamp":"2015-09-23T14:58:45.09Z"},{"CAR_A":27.382022471910112,"CAR_B":23.130434782608695,"CAR_C":11.327272727272728,"CAR_D":6.314814814814815}],[{"segment":1193,"number":0,"timeStamp":"2015-09-23T13:31:52.459Z"},{"CAR_A":30.984848484848484,"CAR_B":31.016666666666666,"CAR_C":17.339622641509433,"CAR_D":24.491525423728813}],[{"segment":1193,"number":0,"timeStamp":"2015-09-23T11:12:05.328Z"},{"CAR_A":25.066666666666666,"CAR_B":17.568627450980394,"CAR_C":16.59090909090909,"CAR_D":7.976744186046512}],[{"segment":1193,"number":0,"timeStamp":"2015-09-23T08:28:09.875Z"},{"CAR_A":76.51546391752578,"CAR_B":68.54166666666667,"CAR_C":66.63013698630137,"CAR_D":61.13636363636363}],[{"segment":1193,"number":0,"timeStamp":"2015-09-23T08:27:35.975Z"},{"CAR_A":82.1938775510204,"CAR_B":74.24489795918367,"CAR_C":68.07246376811594,"CAR_D":64.7127659574468}],[{"segment":1193,"number":0,"timeStamp":"2015-09-23T07:11:42.012Z"},{"CAR_A":97.02272727272727,"CAR_B":80.56989247311827,"CAR_C":66.51315789473684,"CAR_D":73.3768115942029}],[{"segment":1193,"number":0,"timeStamp":"2015-09-22T23:07:11.575Z"},{"CAR_A":16.650602409638555,"CAR_B":10.929577464788732,"CAR_C":15.414285714285715,"CAR_D":15.185714285714285}],[{"segment":1193,"number":0,"timeStamp":"2015-09-22T21:50:17.475Z"},{"CAR_A":27.041666666666668,"CAR_B":21.36,"CAR_C":13.95,"CAR_D":6.521739130434782}],[{"segment":1193,"number":0,"timeStamp":"2015-09-22T16:50:48.528Z"},{"CAR_A":41.75,"CAR_B":32.36363636363637,"CAR_C":26.11111111111111,"CAR_D":27.11111111111111}]]'
|
40
|
+
http_version:
|
41
|
+
recorded_at: Fri, 01 Jan 2016 16:20:00 GMT
|
42
|
+
recorded_with: VCR 3.0.1
|
data/lib/route_c.rb
CHANGED
@@ -4,80 +4,9 @@ require 'dotenv'
|
|
4
4
|
require 'open-uri'
|
5
5
|
require 'pi_piper'
|
6
6
|
|
7
|
-
require "route_c/version"
|
8
|
-
require "route_c/cli"
|
9
|
-
|
10
7
|
Dotenv.load
|
11
8
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
end
|
17
|
-
|
18
|
-
def set_datetime(datetime)
|
19
|
-
if datetime.nil?
|
20
|
-
hour = Time.now.hour
|
21
|
-
minute = Time.now.min
|
22
|
-
"2015-09-23T#{hour}:#{minute}:00"
|
23
|
-
else
|
24
|
-
datetime
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def url
|
29
|
-
"#{Query.config['base_url']}#{@direction}/#{@station}/#{@datetime}.json"
|
30
|
-
end
|
31
|
-
|
32
|
-
def self.config
|
33
|
-
YAML.load_file 'config/config.yaml'
|
34
|
-
end
|
35
|
-
|
36
|
-
def self.pins
|
37
|
-
YAML.load_file 'config/pins.yaml'
|
38
|
-
end
|
39
|
-
|
40
|
-
def json
|
41
|
-
request = open(url, http_basic_authentication: [
|
42
|
-
ENV['SIR_HANDEL_USERNAME'],
|
43
|
-
ENV['SIR_HANDEL_PASSWORD']
|
44
|
-
])
|
45
|
-
JSON.parse request.read
|
46
|
-
end
|
47
|
-
|
48
|
-
def average_occupancy
|
49
|
-
loads = json.first.last
|
50
|
-
average = loads.values.inject{ |sum, el| sum + el }.to_f / loads.size
|
51
|
-
average.round
|
52
|
-
end
|
53
|
-
|
54
|
-
def self.num_elements average, elements = Query.config['lights']
|
55
|
-
(elements * (average / 100.0)).round
|
56
|
-
end
|
57
|
-
|
58
|
-
def to_a
|
59
|
-
num = Query.num_elements average_occupancy
|
60
|
-
Array.new(Query.config['lights']).each_with_index.map { |k,v| v + 1 <= num ? 1 : 0 }
|
61
|
-
end
|
62
|
-
|
63
|
-
def to_lights
|
64
|
-
to_a.each_with_index do |b, i|
|
65
|
-
if b == 1
|
66
|
-
lights[i].on
|
67
|
-
sleep Query.config['interval']
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
sleep Query.config['pause']
|
72
|
-
|
73
|
-
lights.reverse.each do |l|
|
74
|
-
l.off
|
75
|
-
sleep Query.config['interval']
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
def lights
|
80
|
-
@lights ||= Query.pins.map { |p| PiPiper::Pin.new(pin: p, direction: :out) }
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
9
|
+
require "route_c/version"
|
10
|
+
require "route_c/lights"
|
11
|
+
require "route_c/query"
|
12
|
+
require "route_c/cli"
|
data/lib/route_c/cli.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'thor'
|
2
|
+
require 'pi_piper'
|
2
3
|
|
3
4
|
module RouteC
|
4
5
|
class CLI < Thor
|
@@ -27,5 +28,45 @@ module RouteC
|
|
27
28
|
routec.to_lights
|
28
29
|
end
|
29
30
|
end
|
31
|
+
|
32
|
+
desc 'watch', 'wait for a button'
|
33
|
+
method_option :daemon,
|
34
|
+
type: :boolean,
|
35
|
+
default: false,
|
36
|
+
desc: 'Creates a file `.pid` with the current process ID'
|
37
|
+
def watch
|
38
|
+
if options['daemon']
|
39
|
+
file = File.new('.pid', 'w+')
|
40
|
+
file.write(Process.pid)
|
41
|
+
file.rewind
|
42
|
+
file.close
|
43
|
+
end
|
44
|
+
|
45
|
+
print 'Waiting for you to push the button... '
|
46
|
+
PiPiper.watch pin: 21 do
|
47
|
+
watching
|
48
|
+
end
|
49
|
+
|
50
|
+
PiPiper.wait
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def watching
|
56
|
+
puts 'done'
|
57
|
+
print 'Getting data... '
|
58
|
+
routec = RouteC::Query.new 'euston', 'southbound'
|
59
|
+
puts 'done'
|
60
|
+
|
61
|
+
print 'Lighting lights... '
|
62
|
+
routec.to_lights
|
63
|
+
puts 'done'
|
64
|
+
|
65
|
+
print 'Releasing lights... '
|
66
|
+
routec.lights.release
|
67
|
+
puts 'done'
|
68
|
+
|
69
|
+
print 'Waiting for you to push the button... '
|
70
|
+
end
|
30
71
|
end
|
31
72
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module RouteC
|
2
|
+
class Lights
|
3
|
+
|
4
|
+
def initialize(array)
|
5
|
+
@array = array
|
6
|
+
end
|
7
|
+
|
8
|
+
def turn_on
|
9
|
+
@array.each_with_index do |b, i|
|
10
|
+
if b == 1
|
11
|
+
lights[i].on
|
12
|
+
sleep Query.config['interval']
|
13
|
+
end
|
14
|
+
end
|
15
|
+
sleep Query.config['pause']
|
16
|
+
lights.reverse.each { |l| l.off ; sleep Query.config['interval'] }
|
17
|
+
end
|
18
|
+
|
19
|
+
def lights
|
20
|
+
@lights ||= Lights.pins.map { |p| PiPiper::Pin.new(pin: p, direction: :out) }
|
21
|
+
end
|
22
|
+
|
23
|
+
def release
|
24
|
+
lights.map { |l| l.release }
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.pins
|
28
|
+
YAML.load_file 'config/pins.yaml'
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module RouteC
|
2
|
+
class Query
|
3
|
+
def initialize(station, direction, datetime = nil)
|
4
|
+
@station, @direction, @datetime = station, direction, set_datetime(datetime)
|
5
|
+
end
|
6
|
+
|
7
|
+
def set_datetime(datetime)
|
8
|
+
if datetime.nil?
|
9
|
+
hour = Time.now.hour
|
10
|
+
minute = Time.now.min
|
11
|
+
"2015-09-23T#{hour}:#{minute}:00"
|
12
|
+
else
|
13
|
+
datetime
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def url
|
18
|
+
"#{Query.config['base_url']}#{@direction}/#{@station}/#{@datetime}.json"
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.config
|
22
|
+
YAML.load_file 'config/config.yaml'
|
23
|
+
end
|
24
|
+
|
25
|
+
def json
|
26
|
+
request = open(url, http_basic_authentication: [
|
27
|
+
ENV['SIR_HANDEL_USERNAME'],
|
28
|
+
ENV['SIR_HANDEL_PASSWORD']
|
29
|
+
])
|
30
|
+
JSON.parse request.read
|
31
|
+
end
|
32
|
+
|
33
|
+
def average_occupancy
|
34
|
+
loads = json.first.last
|
35
|
+
average = loads.values.inject{ |sum, el| sum + el }.to_f / loads.size
|
36
|
+
average.round
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.num_elements average, elements = Lights.pins.count
|
40
|
+
(elements * (average / 100.0)).round
|
41
|
+
end
|
42
|
+
|
43
|
+
def to_a
|
44
|
+
num = Query.num_elements average_occupancy
|
45
|
+
Array.new(Lights.pins.count).each_with_index.map { |k,v| v + 1 <= num ? 1 : 0 }
|
46
|
+
end
|
47
|
+
|
48
|
+
def to_lights
|
49
|
+
lights.turn_on
|
50
|
+
end
|
51
|
+
|
52
|
+
def lights
|
53
|
+
@lights ||= Lights.new(to_a)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
data/lib/route_c/version.rb
CHANGED
@@ -0,0 +1,30 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
# /etc/init.d/route_c
|
3
|
+
|
4
|
+
### BEGIN INIT INFO
|
5
|
+
# Provides: route_c
|
6
|
+
# Required-Start: $remote_fs $syslog
|
7
|
+
# Required-Stop: $remote_fs $syslog
|
8
|
+
# Default-Start: 2 3 4 5
|
9
|
+
# Default-Stop: 0 1 6
|
10
|
+
# Short-Description: Example initscript
|
11
|
+
# Description: This service is used to manage route_c
|
12
|
+
### END INIT INFO
|
13
|
+
|
14
|
+
|
15
|
+
case "$1" in
|
16
|
+
start)
|
17
|
+
echo "Starting route_c"
|
18
|
+
cd /home/pi/route_c && sudo bundle exec routec watch --daemon
|
19
|
+
;;
|
20
|
+
stop)
|
21
|
+
echo "Stopping route_c"
|
22
|
+
PID=`cat /home/pi/route_c/.pid` && sudo kill -15 $PID
|
23
|
+
;;
|
24
|
+
restart)
|
25
|
+
echo "Stopping route_c"
|
26
|
+
PID=`cat /home/pi/route_c/.pid` && sudo kill -15 $PID && cd /home/pi/route_c && sudo bundle exec routec watch --daemon
|
27
|
+
;;
|
28
|
+
esac
|
29
|
+
|
30
|
+
exit 0
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: route_c
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- pikesley
|
@@ -9,160 +9,160 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-02-
|
12
|
+
date: 2016-02-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: dotenv
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- -
|
18
|
+
- - ~>
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: 2.0.2
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- -
|
25
|
+
- - ~>
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: 2.0.2
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: thor
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- -
|
32
|
+
- - ~>
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: '0.19'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- -
|
39
|
+
- - ~>
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '0.19'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: pi_piper
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- -
|
46
|
+
- - ! '>='
|
47
47
|
- !ruby/object:Gem::Version
|
48
48
|
version: '0'
|
49
49
|
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- -
|
53
|
+
- - ! '>='
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '0'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: bundler
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
|
-
- -
|
60
|
+
- - ~>
|
61
61
|
- !ruby/object:Gem::Version
|
62
62
|
version: '1.11'
|
63
63
|
type: :development
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
|
-
- -
|
67
|
+
- - ~>
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '1.11'
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: rake
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
|
-
- -
|
74
|
+
- - ~>
|
75
75
|
- !ruby/object:Gem::Version
|
76
76
|
version: '10.0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
|
-
- -
|
81
|
+
- - ~>
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: '10.0'
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
85
|
name: rspec
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
|
-
- -
|
88
|
+
- - ~>
|
89
89
|
- !ruby/object:Gem::Version
|
90
90
|
version: '3.0'
|
91
91
|
type: :development
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
|
-
- -
|
95
|
+
- - ~>
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '3.0'
|
98
98
|
- !ruby/object:Gem::Dependency
|
99
99
|
name: coveralls
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
101
101
|
requirements:
|
102
|
-
- -
|
102
|
+
- - ~>
|
103
103
|
- !ruby/object:Gem::Version
|
104
104
|
version: '0.8'
|
105
105
|
type: :development
|
106
106
|
prerelease: false
|
107
107
|
version_requirements: !ruby/object:Gem::Requirement
|
108
108
|
requirements:
|
109
|
-
- -
|
109
|
+
- - ~>
|
110
110
|
- !ruby/object:Gem::Version
|
111
111
|
version: '0.8'
|
112
112
|
- !ruby/object:Gem::Dependency
|
113
113
|
name: timecop
|
114
114
|
requirement: !ruby/object:Gem::Requirement
|
115
115
|
requirements:
|
116
|
-
- -
|
116
|
+
- - ~>
|
117
117
|
- !ruby/object:Gem::Version
|
118
118
|
version: '0.8'
|
119
119
|
type: :development
|
120
120
|
prerelease: false
|
121
121
|
version_requirements: !ruby/object:Gem::Requirement
|
122
122
|
requirements:
|
123
|
-
- -
|
123
|
+
- - ~>
|
124
124
|
- !ruby/object:Gem::Version
|
125
125
|
version: '0.8'
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
127
|
name: webmock
|
128
128
|
requirement: !ruby/object:Gem::Requirement
|
129
129
|
requirements:
|
130
|
-
- -
|
130
|
+
- - ~>
|
131
131
|
- !ruby/object:Gem::Version
|
132
132
|
version: '1.22'
|
133
133
|
type: :development
|
134
134
|
prerelease: false
|
135
135
|
version_requirements: !ruby/object:Gem::Requirement
|
136
136
|
requirements:
|
137
|
-
- -
|
137
|
+
- - ~>
|
138
138
|
- !ruby/object:Gem::Version
|
139
139
|
version: '1.22'
|
140
140
|
- !ruby/object:Gem::Dependency
|
141
141
|
name: vcr
|
142
142
|
requirement: !ruby/object:Gem::Requirement
|
143
143
|
requirements:
|
144
|
-
- -
|
144
|
+
- - ~>
|
145
145
|
- !ruby/object:Gem::Version
|
146
146
|
version: '3.0'
|
147
147
|
type: :development
|
148
148
|
prerelease: false
|
149
149
|
version_requirements: !ruby/object:Gem::Requirement
|
150
150
|
requirements:
|
151
|
-
- -
|
151
|
+
- - ~>
|
152
152
|
- !ruby/object:Gem::Version
|
153
153
|
version: '3.0'
|
154
154
|
- !ruby/object:Gem::Dependency
|
155
155
|
name: pry
|
156
156
|
requirement: !ruby/object:Gem::Requirement
|
157
157
|
requirements:
|
158
|
-
- -
|
158
|
+
- - ~>
|
159
159
|
- !ruby/object:Gem::Version
|
160
160
|
version: '0.10'
|
161
161
|
type: :development
|
162
162
|
prerelease: false
|
163
163
|
version_requirements: !ruby/object:Gem::Requirement
|
164
164
|
requirements:
|
165
|
-
- -
|
165
|
+
- - ~>
|
166
166
|
- !ruby/object:Gem::Version
|
167
167
|
version: '0.10'
|
168
168
|
description: words
|
@@ -173,25 +173,33 @@ executables:
|
|
173
173
|
extensions: []
|
174
174
|
extra_rdoc_files: []
|
175
175
|
files:
|
176
|
-
-
|
177
|
-
-
|
178
|
-
-
|
176
|
+
- .gitignore
|
177
|
+
- .rspec
|
178
|
+
- .travis.yml
|
179
179
|
- Gemfile
|
180
180
|
- LICENSE.md
|
181
181
|
- README.md
|
182
182
|
- Rakefile
|
183
183
|
- bin/console
|
184
184
|
- bin/setup
|
185
|
+
- buttons.rb
|
185
186
|
- config/config.yaml
|
186
187
|
- config/pins.yaml
|
187
188
|
- exe/routec
|
189
|
+
- fixtures/rspec/vcr/RouteC_CLI/lights_lights_on_button_press.yml
|
190
|
+
- fixtures/rspec/vcr/RouteC_CLI/lights_the_lights.yml
|
191
|
+
- fixtures/rspec/vcr/RouteC_CLI/returns_an_array.yml
|
188
192
|
- fixtures/rspec/vcr/RouteC_Query/gets_some_json.yml
|
189
193
|
- fixtures/rspec/vcr/RouteC_Query/gets_the_average_occupancy.yml
|
190
194
|
- fixtures/rspec/vcr/RouteC_Query/light_the_elements/as_an_array/returns_an_array_for_an_average_of_18_.yml
|
195
|
+
- fixtures/rspec/vcr/RouteC_Query/lights_the_lights.yml
|
191
196
|
- lib/route_c.rb
|
192
197
|
- lib/route_c/cli.rb
|
198
|
+
- lib/route_c/lights.rb
|
199
|
+
- lib/route_c/query.rb
|
193
200
|
- lib/route_c/version.rb
|
194
201
|
- route_c.gemspec
|
202
|
+
- routec.init.d.example
|
195
203
|
homepage: http://github.com
|
196
204
|
licenses:
|
197
205
|
- MIT
|
@@ -202,17 +210,17 @@ require_paths:
|
|
202
210
|
- lib
|
203
211
|
required_ruby_version: !ruby/object:Gem::Requirement
|
204
212
|
requirements:
|
205
|
-
- -
|
213
|
+
- - ! '>='
|
206
214
|
- !ruby/object:Gem::Version
|
207
215
|
version: '0'
|
208
216
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
209
217
|
requirements:
|
210
|
-
- -
|
218
|
+
- - ! '>='
|
211
219
|
- !ruby/object:Gem::Version
|
212
220
|
version: '0'
|
213
221
|
requirements: []
|
214
222
|
rubyforge_project:
|
215
|
-
rubygems_version: 2.5
|
223
|
+
rubygems_version: 2.4.5
|
216
224
|
signing_key:
|
217
225
|
specification_version: 4
|
218
226
|
summary: words
|