Module: AirMonitor

Defined in:
lib/air_monitor.rb,
lib/air_monitor/version.rb

Constant Summary collapse

VERSION =
"0.0.1"

Instance Method Summary collapse

Instance Method Details

#active_outdoors?(day) ⇒ Boolean

Returns:

  • (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

Returns:

  • (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

Returns:

  • (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_concernsObject



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

#forecastObject



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_valuesObject



54
55
56
# File 'lib/air_monitor.rb', line 54

def forecasted_aqi_values
  parsed_forecast.map {|data| data["AQI"]}
end

#forecasted_contaminatesObject



30
31
32
# File 'lib/air_monitor.rb', line 30

def forecasted_contaminates
  parsed_forecast.map {|data| data["ParameterName"]}
end

#forecasted_contaminates_and_aqi_valuesObject



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_levelsObject



34
35
36
# File 'lib/air_monitor.rb', line 34

def forecasted_contaminates_and_levels
  Hash[forecasted_contaminates.zip forecasted_levels]
end

#forecasted_levelsObject



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

Returns:

  • (Boolean)


109
110
111
# File 'lib/air_monitor.rb', line 109

def general_population?(day)
  red_zone?(day)
end

#health_effects?(day) ⇒ Boolean

Returns:

  • (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

Returns:

  • (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

Returns:

  • (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

#observedObject



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_valuesObject



50
51
52
# File 'lib/air_monitor.rb', line 50

def observed_aqi_values
  parsed_observed.map {|data| data["AQI"]}
end

#observed_contaminatesObject



42
43
44
# File 'lib/air_monitor.rb', line 42

def observed_contaminates
  parsed_observed.map {|data| data["ParameterName"]}
end

#observed_contaminates_and_aqi_valuesObject



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_levelsObject



46
47
48
# File 'lib/air_monitor.rb', line 46

def observed_contaminates_and_levels
  Hash[observed_contaminates.zip observed_levels]
end

#observed_levelsObject



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

Returns:

  • (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_forecastObject



18
19
20
# File 'lib/air_monitor.rb', line 18

def parsed_forecast
  JSON.parse(forecast.body)
end

#parsed_observedObject



22
23
24
# File 'lib/air_monitor.rb', line 22

def parsed_observed
  JSON.parse(observed.body)
end

#red_zone?(day) ⇒ Boolean

Returns:

  • (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_areaObject



66
67
68
# File 'lib/air_monitor.rb', line 66

def reporting_area
  parsed_observed[0]["ReportingArea"]
end