Retry storing HTTP response into a variable until specific code I want to keep trying to get response until its code is 200 or unknown yet. In first case it should be stored in response variable. In another case I should raise any kind of exception.

  response = nil
  1.times do
    response = begin
      http.request request
    rescue Net::ReadTimeout
      puts "Net::ReadTimeout"
      retry
    end
    case response.code
    when "503"
      puts "servers are busy at #{Time.now}?"
      sleep 5
      redo
    when "200"
      "ok"
    else
      fail "#{response.code} at '#{request.path}'"
    end
  end


The 1.times thing is taken from SO.
The 1.times ... redo thing is just awful. Replace that with an until loop, like this:

success = false
until success
  ...
  case response.code
  ...
  when "200"
    success = true
    "ok"
  else
    ...
  end 
end