class Meteorologist

Attributes

forecast_time[R]
location[R]
units[R]

Public Class Methods

new(location, options = {}) click to toggle source
# File lib/meteorologist.rb, line 4
def initialize(location, options = {})
  validate_environment

  @location = location
  @forecaster_class = options.fetch(:forecaster) { ::Forecaster }
  @navigator_class = options.fetch(:navigator) { ::Navigator }
  @moon_info_class = options.fetch(:moon_info) { ::MoonInfo }
  @forecast_time = options.fetch(:forecast_time) { Time.now }
  @units = options.fetch(:units) { 'si' } # or 'us' for Imperial units
end

Public Instance Methods

forecast() click to toggle source
# File lib/meteorologist.rb, line 15
def forecast
  @forecast ||= @forecaster_class.new(coordinates, units, forecast_time)
end
location_name() click to toggle source
# File lib/meteorologist.rb, line 23
def location_name
  navigator.location_name
end
moon() click to toggle source
# File lib/meteorologist.rb, line 19
def moon
  @moon ||= @moon_info_class.new(forecast.moon_phase)
end

Private Instance Methods

coordinates() click to toggle source
# File lib/meteorologist.rb, line 30
def coordinates
  navigator.coordinates
end
navigator() click to toggle source
validate_environment() click to toggle source
# File lib/meteorologist.rb, line 38
def validate_environment
  p "WARNING: You have not set a cache path" unless ENV['CACHE_PATH']
  raise RuntimeError, "You must set a Darksky API secret" unless ENV['DARKSKYSECRET']
  raise RuntimeError, "You must set a Google API secret" unless ENV['GOOGLEMAPSECRET']
end