module Stormglass

Constants

RESULT_DICT
VERSION

Attributes

settings[RW]

Public Class Methods

api_key() click to toggle source

API key for stormglass. key is sourced:

  • if set via enviroment variable

  • if set in configuration block

  • if defined in Rails secrets

  • when passed directly to parameters

# File lib/stormglass.rb, line 88
def self.api_key
  key = Stormglass.settings.api_key
  key ||= Rails.application.credentials[:stormglass_api_key] if Gem.loaded_specs.has_key?('rails')
  key
end
configure() { |settings| ... } click to toggle source
# File lib/stormglass.rb, line 28
def configure
  self.settings ||= Configuration.new
  yield(settings)
end
for_address(address_string, params={}) click to toggle source

lookup an address (such as city + zip) and get the coordinates for the first match

# File lib/stormglass.rb, line 39
def self.for_address(address_string, params={})
  if results = Geocoder.search(address_string)
    lat,lng = results.first.coordinates
    self.for_lat_lng(lat: lat, lng: lng, params: params)
  else
    raise Error, 'Could not find address'
  end
end
for_lat_lng(lat:, lng:, params: {}) click to toggle source

query StormGlass given lat/lng. params:

:lat - dateTime (default Now)
:lng - Datetime (default 12 hours from :start)
:params - additional params available to self.reqest
# File lib/stormglass.rb, line 53
def self.for_lat_lng(lat:, lng:, params: {})
  self.request(params: {lat: lat, lng: lng}.merge(params))
end
hours_offset(start_time, hours=12) click to toggle source
# File lib/stormglass.rb, line 94
def self.hours_offset(start_time, hours=12)
  (start_time + (Rational(1,24) * hours))
end
query_time_string(datetime) click to toggle source
# File lib/stormglass.rb, line 98
def self.query_time_string(datetime)
  datetime.new_offset(0).iso8601
end
request(endpoint: 'point', params: {}) click to toggle source

Primary interface to StormGlass. params:

:start - dateTime (default Now)
:end - Datetime (default 12 hours from :start)
:hours - number of hours to determine end (default 12)
:key - API key (default to api_key method )
# File lib/stormglass.rb, line 63
def self.request(endpoint: 'point', params: {})
  hours = (params.delete(:hours) || 11) - 1
  params[:key] ||= api_key
  params[:start] ||= DateTime.now
  params[:end] ||= hours_offset(params[:start], hours)
  params[:start] = query_time_string(params[:start])
  params[:end] = query_time_string(params[:end])
  key = params.delete(:key)
  begin
    body = RestClient.get("https://api.stormglass.io/#{endpoint}", {params: params,  'Authorization' => key}).body
  rescue SocketError => msg
    puts msg
    raise ConnectionError, 'error connecting to stormglass'
  rescue RestClient::PaymentRequired => msg
    puts msg
    raise ExceededLimitError, 'exceeded limit. payment required for additional daily requests'
  end
  Stormglass::Response.new(body)
end
set_settings() click to toggle source
# File lib/stormglass.rb, line 33
def set_settings
  self.settings = Configuration.new
end