Как я могу оценить, был ли достигнут случай спасения? - PullRequest
0 голосов
/ 12 июня 2019

Я запускаю обработчик исключений, а затем в другом файле хочу оценить, был ли обработчик исключений запущен успешно, или был запущен аварийный случай.

Я довольно новичок в Ruby, и я не уверен, как оценить, что на самом деле произошло в моем обработчике исключений, и как сохранить результаты (или, если это вообще возможно). Вот как выглядит код.

Файл один - который выполняет вызов API

begin
  HTTParty.get(BASE_URL + url)
rescue
  Hash['message' => 'There was an error connecting with the API, contact support if error persists.']
end

Файл два - в котором анализируется, был ли вызов API успешным

response = call_to_api #api call is ran in file one

if response == #I'm not sure what to put here, but it needs to check if the exception handler didn't trip the rescue
  success
else
  error
end

Ответы [ 2 ]

1 голос
/ 12 июня 2019

Вы можете справиться с этим, используя разные подходы, посмотрите на эти два примера:

# You can catch the error just to handle it and bypass to the caller
# In this case, the caller will need to rescue your custom error
# Example 1
def my_method
  begin
    ...
  rescue
    raise MyCustomError
  end
end

begin
  my_method
rescue MyCustomError => err
  ...
end

# You can provide the error through a block
# Example 2
def my_method
  begin
    yield MyApi.call
  rescue
    yield :fail, { message: 'error' }
  end
end

my_method do |result, error|
  ...
end

Подумайте не об обработке общих ошибок при спасении, а о фактическом обнаружении определенных ошибок и устранении их, если вы только добавите rescue вы предполагаете, что любая ошибка будет обработана в вашем коде одним способом.

0 голосов
/ 12 июня 2019

После HttParty gem здесь , Вы можете сделать

# Use the class methods to get down to business quickly
response = HTTParty.get('http://api.stackexchange.com/2.2/questions?site=stackoverflow')

puts response.body, response.code, response.message, response.headers.inspect

Итак, в вашей функции API вызова, это зависит от того, что API возвращает

response = call_to_api #api call is ran in file one

if response.code == 200 or response.message == "OK"
  success
else
  error
end
...