module AirMonitor

Constants

VERSION

Public Class Methods

new(zip_code=nil, params={}) click to toggle source
# 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

Public Instance Methods

active_outdoors?(day) click to toggle source
# File lib/air_monitor.rb, line 104
def active_outdoors?(day)
  condition_indicators = ["O3"]
  alert?(condition_indicators, day)
end
alert?(condition_indicators, day) click to toggle source
# 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) click to toggle source
# File lib/air_monitor.rb, line 94
def children?(day)
  condition_indicators = ["O3","PM2.5","PM10"]
  alert?(condition_indicators, day)
end
clean_checked_concerns() click to toggle source
# 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() click to toggle source
# 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() click to toggle source
# File lib/air_monitor.rb, line 54
def forecasted_aqi_values
  parsed_forecast.map {|data| data["AQI"]}
end
forecasted_contaminates() click to toggle source
# File lib/air_monitor.rb, line 30
def forecasted_contaminates
  parsed_forecast.map {|data| data["ParameterName"]}
end
forecasted_contaminates_and_aqi_values() click to toggle source
# 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() click to toggle source
# File lib/air_monitor.rb, line 34
def forecasted_contaminates_and_levels
  Hash[forecasted_contaminates.zip forecasted_levels]
end
forecasted_levels() click to toggle source
# File lib/air_monitor.rb, line 26
def forecasted_levels
  parsed_forecast.map {|data| data["Category"]["Name"]}
end
general_population?(day) click to toggle source
# File lib/air_monitor.rb, line 109
def general_population?(day)
  red_zone?(day)
end
health_effects?(day) click to toggle source
# 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) click to toggle source
# File lib/air_monitor.rb, line 89
def heart_disease?(day)
  condition_indicators = ["PM2.5","PM10"]
  alert?(condition_indicators, day)
end
lung_disease?(day) click to toggle source
# File lib/air_monitor.rb, line 84
def lung_disease?(day)
  condition_indicators = ["O3","PM2.5","PM10"]
  alert?(condition_indicators, day)
end
observed() click to toggle source
# 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() click to toggle source
# File lib/air_monitor.rb, line 50
def observed_aqi_values
  parsed_observed.map {|data| data["AQI"]}
end
observed_contaminates() click to toggle source
# File lib/air_monitor.rb, line 42
def observed_contaminates
  parsed_observed.map {|data| data["ParameterName"]}
end
observed_contaminates_and_aqi_values() click to toggle source
# 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() click to toggle source
# File lib/air_monitor.rb, line 46
def observed_contaminates_and_levels
  Hash[observed_contaminates.zip observed_levels]
end
observed_levels() click to toggle source
# File lib/air_monitor.rb, line 38
def observed_levels
  parsed_observed.map {|data| data["Category"]["Name"]}
end
older_adult?(day) click to toggle source
# File lib/air_monitor.rb, line 99
def older_adult?(day)
  condition_indicators = ["O3","PM2.5","PM10"]
  alert?(condition_indicators, day)
end
parsed_forecast() click to toggle source
# File lib/air_monitor.rb, line 18
def parsed_forecast
  JSON.parse(forecast.body)
end
parsed_observed() click to toggle source
# File lib/air_monitor.rb, line 22
def parsed_observed
  JSON.parse(observed.body)
end
red_zone?(day) click to toggle source
# 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() click to toggle source
# File lib/air_monitor.rb, line 66
def reporting_area
  parsed_observed[0]["ReportingArea"]
end