# 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
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

• Too imperative. – Nakilon Jun 16 '15 at 1:38
• Ok, you didn't say anything about needing a functional pattern in your question. And besides, your original is already imperative. What exactly are you looking for? – Devon Parsons Jun 16 '15 at 1:49
• Yes, original is imperative -- this is why I posted it to ask how to make it more Rubyish. – Nakilon Jun 16 '15 at 4:22
• There's nothing inherently 'un-Ruby' about imperative solutions. – Devon Parsons Jun 16 '15 at 13:18