Module: AirMonitor
- Defined in:
- lib/air_monitor.rb,
lib/air_monitor/version.rb
Constant Summary collapse
- VERSION =
"0.0.1"
Instance Method Summary collapse
- #active_outdoors?(day) ⇒ Boolean
- #alert?(condition_indicators, day) ⇒ Boolean
- #children?(day) ⇒ Boolean
- #clean_checked_concerns ⇒ Object
- #forecast ⇒ Object
- #forecasted_aqi_values ⇒ Object
- #forecasted_contaminates ⇒ Object
- #forecasted_contaminates_and_aqi_values ⇒ Object
- #forecasted_contaminates_and_levels ⇒ Object
- #forecasted_levels ⇒ Object
- #general_population?(day) ⇒ Boolean
- #health_effects?(day) ⇒ Boolean
- #heart_disease?(day) ⇒ Boolean
- #initialize(zip_code = nil, params = {}) ⇒ Object
- #lung_disease?(day) ⇒ Boolean
- #observed ⇒ Object
- #observed_aqi_values ⇒ Object
- #observed_contaminates ⇒ Object
- #observed_contaminates_and_aqi_values ⇒ Object
- #observed_contaminates_and_levels ⇒ Object
- #observed_levels ⇒ Object
- #older_adult?(day) ⇒ Boolean
- #parsed_forecast ⇒ Object
- #parsed_observed ⇒ Object
- #red_zone?(day) ⇒ Boolean
- #reporting_area ⇒ Object
Instance Method Details
#active_outdoors?(day) ⇒ Boolean
104 105 106 107 |
# File 'lib/air_monitor.rb', line 104 def active_outdoors?(day) condition_indicators = ["O3"] alert?(condition_indicators, day) end |
#alert?(condition_indicators, day) ⇒ Boolean
113 114 115 116 117 118 119 120 121 122 |
# File 'lib/air_monitor.rb', line 113 def alert?(condition_indicators, day) if day == "today" contaminates_aqis = observed_contaminates_and_aqi_values else contaminates_aqis = forecasted_contaminates_and_aqi_values end present_condition_indicators = contaminates_aqis.keys & condition_indicators present_condition_indicators.any?{|indicator| contaminates_aqis[indicator] > 100} || red_zone?(day) end |
#children?(day) ⇒ Boolean
94 95 96 97 |
# File 'lib/air_monitor.rb', line 94 def children?(day) condition_indicators = ["O3","PM2.5","PM10"] alert?(condition_indicators, day) end |
#clean_checked_concerns ⇒ Object
70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/air_monitor.rb', line 70 def clean_checked_concerns concerns = checked_concerns.map {|concern| concern.gsub("_", " ")} concerns.map! do |concern| if concern == concerns.last && concerns.count > 1 "and #{concern}." elsif concerns.count > 1 concern + "," else concern + "." end end concerns.join(" ") end |
#forecast ⇒ Object
9 10 11 12 |
# File 'lib/air_monitor.rb', line 9 def forecast tomorrow = Date.today + 1 Faraday.get("http://www.airnowapi.org/aq/forecast/zipCode/?format=application/json&zipCode=#{@zip_code}&date=#{tomorrow.strftime('%Y-%m-%d')}&distance=100&API_KEY=6262A4E6-45AF-4316-8485-CB1A259D7231") end |
#forecasted_aqi_values ⇒ Object
54 55 56 |
# File 'lib/air_monitor.rb', line 54 def forecasted_aqi_values parsed_forecast.map {|data| data["AQI"]} end |
#forecasted_contaminates ⇒ Object
30 31 32 |
# File 'lib/air_monitor.rb', line 30 def forecasted_contaminates parsed_forecast.map {|data| data["ParameterName"]} end |
#forecasted_contaminates_and_aqi_values ⇒ Object
58 59 60 |
# File 'lib/air_monitor.rb', line 58 def forecasted_contaminates_and_aqi_values Hash[forecasted_contaminates.zip forecasted_aqi_values] end |
#forecasted_contaminates_and_levels ⇒ Object
34 35 36 |
# File 'lib/air_monitor.rb', line 34 def forecasted_contaminates_and_levels Hash[forecasted_contaminates.zip forecasted_levels] end |
#forecasted_levels ⇒ Object
26 27 28 |
# File 'lib/air_monitor.rb', line 26 def forecasted_levels parsed_forecast.map {|data| data["Category"]["Name"]} end |
#general_population?(day) ⇒ Boolean
109 110 111 |
# File 'lib/air_monitor.rb', line 109 def general_population?(day) red_zone?(day) end |
#health_effects?(day) ⇒ Boolean
132 133 134 135 136 |
# File 'lib/air_monitor.rb', line 132 def health_effects?(day) check_alerts_methods = checked_concerns.map {|concern| concern + "?"} alerts = check_alerts_methods.map {|method| send(method, day)} alerts.include?(true) end |
#heart_disease?(day) ⇒ Boolean
89 90 91 92 |
# File 'lib/air_monitor.rb', line 89 def heart_disease?(day) condition_indicators = ["PM2.5","PM10"] alert?(condition_indicators, day) end |
#initialize(zip_code = nil, params = {}) ⇒ Object
4 5 6 7 |
# File 'lib/air_monitor.rb', line 4 def initialize(zip_code=nil, params={}) @zip_code = zip_code @checked_concerns = params.map {|concern, value| concern if value == "1"}.compact end |
#lung_disease?(day) ⇒ Boolean
84 85 86 87 |
# File 'lib/air_monitor.rb', line 84 def lung_disease?(day) condition_indicators = ["O3","PM2.5","PM10"] alert?(condition_indicators, day) end |
#observed ⇒ Object
14 15 16 |
# File 'lib/air_monitor.rb', line 14 def observed Faraday.get("http://www.airnowapi.org/aq/observation/zipCode/current/?format=application/json&zipCode=#{@zip_code}&distance=25&API_KEY=6262A4E6-45AF-4316-8485-CB1A259D7231") end |
#observed_aqi_values ⇒ Object
50 51 52 |
# File 'lib/air_monitor.rb', line 50 def observed_aqi_values parsed_observed.map {|data| data["AQI"]} end |
#observed_contaminates ⇒ Object
42 43 44 |
# File 'lib/air_monitor.rb', line 42 def observed_contaminates parsed_observed.map {|data| data["ParameterName"]} end |
#observed_contaminates_and_aqi_values ⇒ Object
62 63 64 |
# File 'lib/air_monitor.rb', line 62 def observed_contaminates_and_aqi_values Hash[observed_contaminates.zip observed_aqi_values] end |
#observed_contaminates_and_levels ⇒ Object
46 47 48 |
# File 'lib/air_monitor.rb', line 46 def observed_contaminates_and_levels Hash[observed_contaminates.zip observed_levels] end |
#observed_levels ⇒ Object
38 39 40 |
# File 'lib/air_monitor.rb', line 38 def observed_levels parsed_observed.map {|data| data["Category"]["Name"]} end |
#older_adult?(day) ⇒ Boolean
99 100 101 102 |
# File 'lib/air_monitor.rb', line 99 def older_adult?(day) condition_indicators = ["O3","PM2.5","PM10"] alert?(condition_indicators, day) end |
#parsed_forecast ⇒ Object
18 19 20 |
# File 'lib/air_monitor.rb', line 18 def parsed_forecast JSON.parse(forecast.body) end |
#parsed_observed ⇒ Object
22 23 24 |
# File 'lib/air_monitor.rb', line 22 def parsed_observed JSON.parse(observed.body) end |
#red_zone?(day) ⇒ Boolean
124 125 126 127 128 129 130 |
# File 'lib/air_monitor.rb', line 124 def red_zone?(day) if day == "today" observed_contaminates_and_aqi_values.values.any? {|value| value > 150} else forecasted_contaminates_and_aqi_values.values.any? {|value| value > 150} end end |
#reporting_area ⇒ Object
66 67 68 |
# File 'lib/air_monitor.rb', line 66 def reporting_area parsed_observed[0]["ReportingArea"] end |