Repository URL to install this package:
|
Version:
0.2.0 ▾
|
require 'http'
require 'ostruct'
require 'geocoder'
module Sunlight
class Times
extend Forwardable
API_BASE_URL = 'http://api.sunrise-sunset.org/json?'
def_delegator :data, :sunrise
def_delegator :data, :sunset
def_delegator :data, :solar_noon
def_delegator :data, :day_length
def_delegator :data, :civil_twilight_begin
def_delegator :data, :civil_twilight_end
def_delegator :data, :nautical_twilight_begin
def_delegator :data, :nautical_twilight_end
def_delegator :data, :astronomical_twilight_begin
def_delegator :data, :astronomical_twilight_end
def initialize(date:, lat_lng:)
raise ArgumentError.new('Please provide a date and location') if (date.nil? || lat_lng.nil?)
lat, lng = lat_lng
@url = "#{API_BASE_URL}lat=#{lat}&lng=#{lng}&date=#{formatted_date(date)}&formatted=0"
end
private
attr_reader :url
def data
@data ||= begin
response = HTTP.get(url)
parse(response.body.to_s)
end
end
def formatted_date(date)
date.is_a?(Date) ? date.strftime('%Y-%m-%d') : date.to_s
end
def parse(response)
json_body = JSON.parse(response)
results = json_body['results'].inject({}) { |memo, (key, val)| memo[key.to_sym] = parse_date(val); memo }
OpenStruct.new(results)
end
def parse_date(time_string)
DateTime.parse(time_string)
rescue
time_string
end
end
end