class Forecaster

Constants

DARKSKY_URL

Attributes

forecast[R]

Public Class Methods

new(coordinates, units, forecast_time, options = {}) click to toggle source
# File lib/meteorologist/forecaster.rb, line 5
def initialize(coordinates, units, forecast_time, options = {})
  data = options.fetch(:data) { get_data(coordinates, units, forecast_time) }
  @forecast = validate_and_parse(data)
end

Public Instance Methods

apparent_maximum_temperature() click to toggle source
# File lib/meteorologist/forecaster.rb, line 54
def apparent_maximum_temperature
  todays('apparentTemperatureMax')
end
apparent_minimum_temperature() click to toggle source
# File lib/meteorologist/forecaster.rb, line 46
def apparent_minimum_temperature
  todays('apparentTemperatureMin')
end
current_apparent_temperature() click to toggle source
# File lib/meteorologist/forecaster.rb, line 18
def current_apparent_temperature
  current('apparentTemperature')
end
current_humidity() click to toggle source
# File lib/meteorologist/forecaster.rb, line 22
def current_humidity
  "#{(current('humidity') * 100).to_i}%"
end
current_summary() click to toggle source
# File lib/meteorologist/forecaster.rb, line 10
def current_summary
  current('summary')
end
current_temperature() click to toggle source
# File lib/meteorologist/forecaster.rb, line 14
def current_temperature
  current('temperature')
end
maximum_temperature() click to toggle source
# File lib/meteorologist/forecaster.rb, line 50
def maximum_temperature
  todays('temperatureMax')
end
minimum_temperature() click to toggle source
# File lib/meteorologist/forecaster.rb, line 42
def minimum_temperature
  todays('temperatureMin')
end
moon_phase() click to toggle source
# File lib/meteorologist/forecaster.rb, line 38
def moon_phase
  todays('moonPhase')
end
sunrise() click to toggle source
# File lib/meteorologist/forecaster.rb, line 30
def sunrise
  get_time(todays('sunriseTime'))
end
sunset() click to toggle source
# File lib/meteorologist/forecaster.rb, line 34
def sunset
  get_time(todays('sunsetTime'))
end
todays_summary() click to toggle source
# File lib/meteorologist/forecaster.rb, line 26
def todays_summary
  todays('summary')
end

Private Instance Methods

current(key) click to toggle source
# File lib/meteorologist/forecaster.rb, line 75
def current(key)
  forecast['currently'][key]
end
get_data(coordinates, units, forecast_time) click to toggle source
# File lib/meteorologist/forecaster.rb, line 61
def get_data(coordinates, units, forecast_time)
  time = forecast_time.to_i
  url = "#{DARKSKY_URL}/#{ENV['DARKSKYSECRET']}/#{coordinates},#{time}?units=#{units}"

  `curl -s #{url}`
end
get_time(integer) click to toggle source
# File lib/meteorologist/forecaster.rb, line 83
def get_time(integer)
  (Time.at(integer) + offset).strftime('%H:%M')
end
offset() click to toggle source
# File lib/meteorologist/forecaster.rb, line 87
def offset
  @offset ||= forecast['offset'].to_i * 3600
end
todays(key) click to toggle source
# File lib/meteorologist/forecaster.rb, line 79
def todays(key)
  forecast['daily']['data'][0][key]
end
validate_and_parse(forecast) click to toggle source
# File lib/meteorologist/forecaster.rb, line 68
def validate_and_parse(forecast)
  response = JSON.parse(forecast)

  raise ArgumentError, "Location not found" if response['error']
  response
end