lita-onewheel-aqi 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8867fc4ebc3e9e286a24271d4612ba8340dc0f6a
4
- data.tar.gz: 7cb537bd83eb879663b26b7a053d777e994ea287
3
+ metadata.gz: 1596bc749ff6ad46b497452b7f4cf8b503bd58a3
4
+ data.tar.gz: 2fe48f69fafa46b60b95b28dc98f7237ee43ab1f
5
5
  SHA512:
6
- metadata.gz: 041b621412d4d8532c54dc251357597a5931563fae7da0ffefde8ad0e5394efa6648de813f3a6920c3d39b3f105454e69acd32914f3fe5d057792439737fb00f
7
- data.tar.gz: 2b4a43a141ef13a1aa30f785762177ecc2ee755dc27a9118d63429dc28633bfe69b41c9a04c1ea1fcd50db7beefa94b503562ac662e775c82eb88fee693fa691
6
+ metadata.gz: 1151dfe8c05ba826c6f0faf31ce6d33bfd8b0e2e8adbdf69fbf7115e97a1d52ac86779e8e080c95108b36d528069f738c46f050e1eb5c7a744f75ed7bfb06ddb
7
+ data.tar.gz: 9242e9b374b9603ca4be44be5f5690d4b03e5e89c7e56e2c7ce9df9206f006ea2f848d8c225e30382f790df694d82da226a5da8b8de6e8e9acaf9d02510fdf8a
@@ -10,7 +10,37 @@ module Lita
10
10
  route /^aqi(.*)$/i,
11
11
  :get_aqi,
12
12
  command: true,
13
- help: {'!aqi [location]' => 'Gives you available data for air quality (PM2.5) forecast and latest observation.'}
13
+ help: { '!aqi [location]' => 'Gives you available data for air quality (PM2.5) forecast and latest observation.' }
14
+
15
+ # IRC colors.
16
+ def colors
17
+ { white: '00',
18
+ black: '01',
19
+ blue: '02',
20
+ green: '03',
21
+ red: '04',
22
+ brown: '05',
23
+ purple: '06',
24
+ orange: '07',
25
+ yellow: '08',
26
+ lime: '09',
27
+ teal: '10',
28
+ aqua: '11',
29
+ royal: '12',
30
+ pink: '13',
31
+ grey: '14',
32
+ silver: '15' }
33
+ end
34
+
35
+ # Based on the temp in F.
36
+ def aqi_range_colors
37
+ { 0..50 => :green,
38
+ 51..100 => :yellow,
39
+ 101..150 => :orange,
40
+ 151..200 => :red,
41
+ 201..300 => :purple,
42
+ 301..500 => :pink }
43
+ end
14
44
 
15
45
  def get_aqi(response)
16
46
  location = response.matches[0][0].to_s.strip
@@ -21,24 +51,26 @@ module Lita
21
51
  puts loc.inspect
22
52
 
23
53
  parameters = {
24
- latitude: loc[:lat],
25
- longitude: loc[:lng],
26
- api_key: config.api_key,
27
- format: 'application/json'
54
+ latitude: loc[:lat],
55
+ longitude: loc[:lng],
56
+ api_key: config.api_key,
57
+ format: 'application/json'
28
58
  }
29
59
 
30
- query_string = (parameters.map { |k, v| "#{k}=#{v}" }).join "&"
60
+ query_string = (parameters.map { |k, v| "#{k}=#{v}" }).join '&'
31
61
  uri = 'http://airnowapi.org/aq/forecast/latLong/?' + query_string
32
62
  Lita.logger.debug "Getting aqi from #{uri}"
33
- forecast_response = RestClient.get(uri)
34
- forecasted_aqi = JSON.parse(forecast_response)
35
- Lita.logger.debug 'Forecast response: ' + forecasted_aqi.inspect
63
+ # forecast_response = RestClient.get(uri)
64
+ # forecasted_aqi = JSON.parse(forecast_response)
65
+ # Lita.logger.debug 'Forecast response: ' + forecasted_aqi.inspect
36
66
 
37
- observed_response = RestClient.get('http://airnowapi.org/aq/observation/latLong/current/?' + query_string)
67
+ uri = 'http://airnowapi.org/aq/observation/latLong/current/?' + query_string
68
+ Lita.logger.debug "Getting aqi observed from #{uri}"
69
+ observed_response = RestClient.get(uri)
38
70
  observed_aqi = JSON.parse(observed_response)
39
71
  Lita.logger.debug 'Observed response: ' + observed_aqi.inspect
40
72
 
41
- if forecasted_aqi.nil? and observed_aqi.nil?
73
+ if observed_aqi.nil? # forecasted_aqi.nil? and
42
74
  response.reply "No AQI data for #{loc[:name]}."
43
75
  Lita.logger.info "No data found for #{response.matches[0][0]}"
44
76
  return
@@ -46,25 +78,33 @@ module Lita
46
78
 
47
79
  # [{"DateObserved":"2015-08-23 ","HourObserved":14,"LocalTimeZone":"PST","ReportingArea":"Portland","StateCode":"OR","Latitude":45.538,"Longitude":-122.656,"ParameterName":"O3","AQI":49,"Category":{"Number":1,"Name":"Good"}},{"DateObserved":"2015-08-23 ","HourObserved":14,"LocalTimeZone":"PST","ReportingArea":"Portland","StateCode":"OR","Latitude":45.538,"Longitude":-122.656,"ParameterName":"PM2.5","AQI":167,"Category":{"Number":4,"Name":"Unhealthy"}}]
48
80
  # todo: extract today's forecast, not tomorrow's.
49
- forecasted_aqi = extract_pmtwofive(forecasted_aqi)
81
+ # forecasted_aqi = extract_pmtwofive(forecasted_aqi)
50
82
  observed_aqi = extract_pmtwofive(observed_aqi)
51
83
 
52
84
  reply = "AQI for #{loc[:name]}, "
53
- unless forecasted_aqi == []
54
- reply += "Forecasted: #{(forecasted_aqi['ActionDay'] == 'true')? 'Action Day! ' : ''}#{forecasted_aqi['AQI']} #{forecasted_aqi['Category']['Name']} "
55
- end
85
+ # unless forecasted_aqi == []
86
+ # reply += "Forecasted: #{(forecasted_aqi['ActionDay'] == 'true')? 'Action Day! ' : ''}#{forecasted_aqi['AQI']} #{forecasted_aqi['Category']['Name']} "
87
+ # end
56
88
  unless observed_aqi == []
57
- reply += "Observed: #{observed_aqi['AQI']} #{observed_aqi['Category']['Name']} at #{observed_aqi['DateObserved']}#{observed_aqi['HourObserved']}00 hours."
89
+ reply += "Observed: #{color_str(observed_aqi['AQI'])} #{observed_aqi['Category']['Name']} at #{observed_aqi['DateObserved']}#{observed_aqi['HourObserved']}00 hours."
58
90
  end
59
91
  response.reply reply
60
92
  end
61
93
 
94
+ def color_str(str)
95
+ aqi_range_colors.keys.each do |color_key|
96
+ if color_key.cover? str.to_i # Super secred cover sauce
97
+ color = colors[color_key]
98
+ str = "\x03#{color}#{str}\x03"
99
+ end
100
+ end
101
+ str
102
+ end
103
+
62
104
  def extract_pmtwofive(aqi)
63
105
  returned_aqi = aqi
64
106
  aqi.each do |a|
65
- if a['ParameterName'] == 'PM2.5'
66
- returned_aqi = a
67
- end
107
+ returned_aqi = a if a['ParameterName'] == 'PM2.5'
68
108
  end
69
109
  returned_aqi
70
110
  end
@@ -74,26 +114,21 @@ module Lita
74
114
  def optimistic_geo_wrapper(query)
75
115
  geocoded = nil
76
116
  result = ::Geocoder.search(query)
77
- if result[0]
78
- geocoded = result[0].data
79
- end
117
+ puts result.inspect
118
+ geocoded = result[0].data if result[0]
80
119
  geocoded
81
120
  end
82
121
 
83
122
  def geo_lookup(query)
84
- puts query.inspect
123
+ puts "Location lookup #{query.inspect}"
85
124
  geocoded = optimistic_geo_wrapper query
86
125
 
87
- if (query.nil? or query.empty?) and geocoded.nil?
88
- query = 'Portland, OR'
89
- end
126
+ query = 'Portland, OR' if (query.nil? || query.empty?) && geocoded.nil?
90
127
 
91
- {name: geocoded['formatted_address'],
92
- lat: geocoded['geometry']['location']['lat'],
93
- lng: geocoded['geometry']['location']['lng']
94
- }
128
+ { name: geocoded['formatted_address'],
129
+ lat: geocoded['geometry']['location']['lat'],
130
+ lng: geocoded['geometry']['location']['lng'] }
95
131
  end
96
-
97
132
  end
98
133
 
99
134
  Lita.register_handler(OnewheelAqi)
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = 'lita-onewheel-aqi'
3
- spec.version = '0.1.2'
3
+ spec.version = '0.2.0'
4
4
  spec.authors = ['Andrew Kreps']
5
5
  spec.email = ['andrew.kreps@gmail.com']
6
6
  spec.description = 'AQI data retrival bot'
@@ -1,5 +1,34 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
3
  describe Lita::Handlers::OnewheelAqi, lita_handler: true do
4
4
  it { is_expected.to route_command('aqi') }
5
+
6
+ before do
7
+ mock = File.open('spec/fixtures/Output.json').read
8
+ allow(RestClient).to receive(:get) { mock }
9
+
10
+ Geocoder.configure(lookup: :test)
11
+
12
+ Geocoder::Lookup::Test.add_stub(
13
+ 'Portland, OR', [{
14
+ 'formatted_address' => 'Portland, OR, USA',
15
+ 'geometry' => {
16
+ 'location' => {
17
+ 'lat' => 45.523452,
18
+ 'lng' => -122.676207,
19
+ 'address' => 'Portland, OR, USA',
20
+ 'state' => 'Oregon',
21
+ 'state_code' => 'OR',
22
+ 'country' => 'United States',
23
+ 'country_code' => 'US'
24
+ }
25
+ }
26
+ }]
27
+ )
28
+ end
29
+
30
+ it 'queries the aqi' do
31
+ send_command 'aqi'
32
+ expect(replies.last).to include("AQI for Portland, OR, USA, Observed: \u0003118\u0003 Unhealthy for Sensitive Groups at 2017-08-09 1100 hours.")
33
+ end
5
34
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lita-onewheel-aqi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kreps