Espera-se que o seguinte método Ruby retorne um array ou nulo, dependendo se a chamada da API foi bem-sucedida ou não.
# @return [Array or nil] - but should not throw error if anything fails
def fetch_coords_from_api
api_url = "some_api_url"
params = { api_key: ENV["API_KEY"] }
response = ApiClient.new(api_url, params).get
return unless response
json = JSON.parse(response.body)
return unless json.is_a?(Hash) && json["result"]
addresses = json["result"]
return unless addresses.is_a?(Array) && !addresses.empty?
address = addresses.find { |add| add["zip"] == zip }
return unless address&.key?("latitude") && address&.key?("longitude")
[ address["latitude"], address["longitude"] ]
end
Algum contexto: o método faz parte de uma classe que tenta vários métodos para recuperar coordenadas (se um método falhar, passamos para o próximo).
Isso funciona como esperado, mas também parece violar diversas práticas recomendadas e convenções (em relação às múltiplas verificações de um estado inválido). Alguém pode sugerir uma maneira mais robusta/eficiente/convencional/bonita de lidar com um cenário como esse?