class NasaNeo::CloseObj::Client

Constants

ESTIMATED_DIAMETER_KEYS
ESTIMATED_DIAMETER_OPTIONS
HAZARDOUS_KEYS
MISS_DISTANCE_KEYS
MISS_DISTANCE_OPTIONS
NEO_ID_KEYS
NEO_NAME_KEYS
VELOCITY_KEYS
VELOCITY_OPTIONS

Attributes

date[RW]
key[R]

Public Class Methods

new(config) click to toggle source
# File lib/nasa-neo/client.rb, line 24
def initialize(config)
  @config = config
  @calls_remaining = nil
  @key = config.api_key
  @date = parsed_date
  @full_url = nil
  @full_url_neo = nil
  @neo_id = nil
  @result = nil
  @result_neo = nil
  @neo_position = 0
end

Public Instance Methods

calls_remaining() click to toggle source
# File lib/nasa-neo/client.rb, line 42
def calls_remaining
  @calls_remaining == nil ? error_feedback("make new API call first")
                          : @calls_remaining
end
estimated_diameter(measurement = nil, min_max = nil) click to toggle source
# File lib/nasa-neo/client.rb, line 47
def estimated_diameter(measurement = nil, min_max = nil)
  retrieve_specific(ESTIMATED_DIAMETER_OPTIONS, ESTIMATED_DIAMETER_KEYS, measurement, min_max)
end
hazardous?() click to toggle source
# File lib/nasa-neo/client.rb, line 51
def hazardous?
  call_and_rescue { retrieve_neo(HAZARDOUS_KEYS) }
end
key=(value) click to toggle source
# File lib/nasa-neo/client.rb, line 37
def key=(value)
  @calls_remaining = nil
  @key = value
end
miss_distance(measurement = nil) click to toggle source
# File lib/nasa-neo/client.rb, line 55
def miss_distance(measurement = nil)
  retrieve_specific(MISS_DISTANCE_OPTIONS, MISS_DISTANCE_KEYS, measurement)
end
neo_data() click to toggle source
# File lib/nasa-neo/client.rb, line 63
def neo_data
  call_and_rescue { retrieve_neo }
end
neo_data_verbose() click to toggle source
# File lib/nasa-neo/client.rb, line 67
def neo_data_verbose
  call_and_rescue { retrieve_neo_verbose }
end
neo_name() click to toggle source
# File lib/nasa-neo/client.rb, line 59
def neo_name
  call_and_rescue { retrieve_neo(NEO_NAME_KEYS) }
end
neo_select(n) click to toggle source
# File lib/nasa-neo/client.rb, line 83
def neo_select(n)
  @neo_position = n - 1
end
neo_total() click to toggle source
# File lib/nasa-neo/client.rb, line 71
def neo_total
  if @full_url != set_full_url
    call_and_rescue { get_api_data["element_count"]}
  else
    @result["element_count"]
  end
end
update() click to toggle source
# File lib/nasa-neo/client.rb, line 79
def update
  call_and_rescue { get_api_data }
end
velocity(measurement = nil) click to toggle source
# File lib/nasa-neo/client.rb, line 87
def velocity(measurement = nil)
  retrieve_specific(VELOCITY_OPTIONS, VELOCITY_KEYS, measurement)
end

Private Instance Methods

buffer_url(url) click to toggle source
# File lib/nasa-neo/client.rb, line 93
def buffer_url(url)
  api_data = open(url)
  @calls_remaining = api_data.meta['x-ratelimit-remaining'].to_i
  api_data.read
end
call_and_rescue() { || ... } click to toggle source
# File lib/nasa-neo/client.rb, line 99
def call_and_rescue
  yield if block_given?
  rescue OpenURI::HTTPError => e
    @full_url = nil
    @full_url_neo = nil
    error_feedback(e.io.status)
end
error_feedback(error_info) click to toggle source
# File lib/nasa-neo/client.rb, line 152
def error_feedback(error_info)
  { 'error': error_info }
end
get_api_data() click to toggle source
# File lib/nasa-neo/client.rb, line 107
def get_api_data
  @full_url = set_full_url
  @neo_position = 0
  buffer = JSON.parse(buffer_url(@full_url))
  @result = buffer
end
parsed_date() click to toggle source
# File lib/nasa-neo/client.rb, line 114
def parsed_date
  Time.now.strftime("%Y-%m-%d")
end
retrieve_neo(keys = []) click to toggle source
# File lib/nasa-neo/client.rb, line 118
def retrieve_neo(keys = [])
  get_api_data if @full_url != set_full_url
  root_keys = ["near_earth_objects", "#{@date}", @neo_position]
  @result.dig(*root_keys + keys)
end
retrieve_neo_verbose() click to toggle source
# File lib/nasa-neo/client.rb, line 124
def retrieve_neo_verbose
  @neo_id = retrieve_neo(NEO_ID_KEYS)
  if @full_url_neo != set_full_url_neo
    @full_url_neo = set_full_url_neo
    @result_neo = JSON.parse(buffer_url(@full_url_neo))
  else
    @result_neo
  end
end
retrieve_specific(options, keys, measurement, min_max = nil) click to toggle source
# File lib/nasa-neo/client.rb, line 134
def retrieve_specific(options, keys, measurement, min_max = nil)
  if options.include? measurement
    chained_keys = retrieve_neo(keys + ["#{measurement}"])
    if ["min", "max"].include? min_max
      chained_keys = retrieve_neo(keys + ["#{measurement}", "estimated_diameter_#{min_max}"])
      call_and_rescue { chained_keys }
    else
      min_max == nil ? call_and_rescue { (chained_keys.respond_to?(:to_f) &&
                                          chained_keys != nil) ? chained_keys.to_f
                                                               : chained_keys }
                     : error_feedback(['min_max', 'check arguments'])
    end
  else
    measurement == nil ? call_and_rescue { retrieve_neo(keys) }
                       : error_feedback(['measurement', 'check arguments'])
  end
end
set_full_url() click to toggle source
# File lib/nasa-neo/client.rb, line 156
def set_full_url
  "#{@config.host}/feed?start_date=#{@date}&end_date=#{@date}&detailed=false&api_key=#{@key}"
end
set_full_url_neo() click to toggle source
# File lib/nasa-neo/client.rb, line 160
def set_full_url_neo
  "#{@config.host}/neo/#{@neo_id}?api_key=#{@key}"
end