module Firstclasspostcodes::Operations::GetLookup

Public Instance Methods

get_lookup(params) click to toggle source
# File lib/firstclasspostcodes/operations/get_lookup.rb, line 6
def get_lookup(params)
  raise StandError, "Expected hash, received: #{params}" unless params.is_a?(Hash)

  error_object = nil

  parse_f = ->(val) { val.to_f.to_s == val ? val.to_f : nil }

  within = ->(lat, lng) { (lat >= -90 && lat <= 90) && (lng >= -180 && lng <= 180) }

  unless params[:latitude] || params[:longitude]
    error_object = {
      message: "Missing required parameters, expected { latitude, longitude }.",
      docUrl: "https://docs.firstclasspostcodes.com/operation/getLookup",
    }
  end

  latitude = parse_f.call(params[:latitude])
  longitude = parse_f.call(params[:longitude])
  radius = parse_f.call(params[:radius]) || 0.1

  query_params =  { latitude: latitude, longitude: longitude, radius: radius }

  unless latitude && longitude && within.call(latitude, longitude)
    error_object = {
      message: "Parameter is invalid: #{query_params}",
      docUrl: "https://docs.firstclasspostcodes.com/operation/getLookup",
    }
  end

  request_params = { path: "/lookup", method: :get, query_params: query_params }

  @config.logger.debug("Executing operation getLookup: #{request_params}") if @config.debug?

  emit("operation:getLookup", request_params)

  if error_object
    error = StandardError.new(error_object)
    @config.logger.debug("Encountered ParameterValidationError: #{error}")
    emit("error", error)
    raise error
  end

  request(request_params)
end